Name: series-workflowmtc2p Phase: Succeeded StartedAt: 2026-07-21 04:13:28 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[0] Phase: Succeeded StartedAt: 2026-07-21 04:13:28 +0000 UTC FinishedAt: 2026-07-21 04:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 04:13:28 +0000 UTC FinishedAt: 2026-07-21 04:40:08 +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": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_in_icmp", "ip_vs_out_icmp", "ip_vs_in_icmp_v6", "ip_vs_out_icmp_v6", "ip_vs_forward_icmp", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6", "sctp_snat_handler", "sctp_dnat_handler", "tcp_snat_handler", "tcp_dnat_handler", "udp_snat_handler", "udp_dnat_handler", "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3NjdHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3NjdHBfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt1ZHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2I0MzQzYjA4MTBkOTZmMzlmNWQwZjdjYzM2Y2NiMWE2ZjBiZmNjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDA0OjM4OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uYzY4NGE0NmNlMTVhNTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyAmIzQzOzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCAmIzQzOzE5NzQsOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTk4Niw4ICYjNDM7MTk4OSw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG5AQCAtMjA1OSwxNSAmIzQzOzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTYsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbiYjNDM7XHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBMT0NBTF9PVVQgPyAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4mIzQzO31cbiYjNDM7XG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuJiM0MztcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uMjFkYjZhZjIyMGViMDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMiBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDUgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXHQgPSBpcHY2X2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcbi1cdHVuc2lnbmVkIGludCBvZmZzXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cbiBcdGludCBwcm90b2NvbDtcbiBcdHN0cnVjdCBpY21wNmhkciAqaWNtcGg7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcbi1cdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xuJiM0MztcdHN0cnVjdCBpcHY2aGRyICpjaWg7XG4gXG4tXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4tXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpO1xuLVx0b2ZmcyA9IGljbXBfb2Zmc2V0ICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuLVx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdG9mZik7XG4mIzQzO1x0Y2loID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGNpcGgtXHUwMDNlb2ZmKTtcbiBcbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4mIzQzO1x0cHJvdG9jb2wgPSBjaXBoLVx1MDAzZXByb3RvY29sO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoIWNpcGgtXHUwMDNlZnJhZ29mZnMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbiYjNDM7XHQgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHtcbiYjNDM7XHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBjaXBoLVx1MDAzZWxlbik7XG4gXG4gXHRcdElQX1ZTX0RCRygxMSwgXCYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXG5AQCAtMTAxMSwxOSAmIzQzOzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIGljbXBfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRvZmYsXG4gXHRcdFx0XHRcdCAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTtcbi1cdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlaGVhZCAmIzQzOyBpY21wX29mZnNldDtcbiYjNDM7XHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRvZmY7XG4gXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XCYjMzQ7KTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlwmIzM0Oyk7XG4gfVxuICNlbmRpZlxuQEAgLTEwMzMsMzYgJiM0MzsxMDI3LDM4IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiAgKi9cbiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciAqc25ldCxcbi1cdFx0XHRcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGlobCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuJiM0MztcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFx0dW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QO1xuJiM0MztcdHVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtXHUwMDNlbGVuO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKVxuJiM0MztcdFx0Y3RvZmYgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpO1xuJiM0MztcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdGlmIChhZiA9PSBBRl9JTkVUNilcbi1cdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xuJiM0MztcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgJiM0MzsxMDg2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdEN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLlxuICAqL1xuIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgJiM0MzsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XG4gXHRcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXG4gXHRcdFx0cmV0dXJuIE5GX1NUT0xFTjtcbiYjNDM7XHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwdnNoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwmIzM0OyxcbiBcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4tXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuJiM0MztcdFx0ICBcdTAwMjZpcHZzaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXB2c2gtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTEzNiw3ICYjNDM7MTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTtcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKGNpaCA9PSBOVUxMKVxuJiM0MztcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbiBcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTE1OSw5ICYjNDM7MTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNzIsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQxLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MCw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NzUsMTcgJiM0MzsxNzcxLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWhsID0gaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTE4OTgsMTAgJiM0MzsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuJiM0MztcdGlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlobCwgSVBQUk9UT19JQ01QLCBBRl9JTkVUKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCRygxLCBcJiMzNDtJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwmIzM0Oyxcbi1cdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4mIzQzO1x0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMTk3Miw3ICYjNDM7MTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbiBcdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDY0LDYgJiM0MzsyMDY0LDE4IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbkBAIC0yMDczLDcgJiM0MzsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxuIFx0XHRvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuIFxuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbiYjNDM7XHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZjaXBoKTtcbiBcbiBvdXQ6XG4gXHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuQEAgLTIxNTIsNyAmIzQzOzIxNjUsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcbiBcdFx0XHRpbnQgcmVsYXRlZDtcbiBcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLFxuLVx0XHRcdFx0XHRcdCAgICBob29rbnVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjg4LDYgJiM0MzsyMzAxLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovXG5AQCAtMjI5NywxMCAmIzQzOzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgJiM0MzsyMzIzLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gI2VuZGlmXG4gXHR9XG4gXG4tXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2spO1xuJiM0MztcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgJiM0MzsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2Vzb3VyY2UgIT0gY3AtXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbiYjNDM7XHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7XG4mIzQzO1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZWRlc3QgIT0gY3AtXHUwMDNlZHBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZik7XG4gXHRjbXAgPSBzaC1cdTAwM2VjaGVja3N1bTtcbiBcdHZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTtcbiBcbiBcdGlmICh2YWwgIT0gY21wKSB7XG4gXHRcdC8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqL1xuLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbmluZGV4IGY4NmI3NjNlZmNjNGRjLi45OWEyODZmZGM5MGM2NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbiYjNDM7XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjtcbiYjNDM7XHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbiYjNDM7XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVENQLCBhZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgJiM0MzsyNSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjtcbiYjNDM7XHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjU0LDcgJiM0MzsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiBcdHN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDtcbiBcbi1cdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdWRwaG9mZiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuJiM0MztcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXVoLVx1MDAzZWNoZWNrKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uYzIzNDAxYzc4OWRlMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiw4ICYjNDM7MTUwMiw5IEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICAqL1xuIGludFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBydGFibGVcdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4gXHRpbnQgcmM7XG5AQCAtMTUxNSw3ICYjNDM7MTUxNiw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICYjNDM7MTUzNCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuJiM0MztcdFx0XHRcdCAgIE5VTEwsIGNpcGgpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBza2JfcnRhYmxlKHNrYik7XG5AQCAtMTU2NSwxMyAmIzQzOzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdH1cbiBcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7XG4mIzQzO1x0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsOCAmIzQzOzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuQEAgLTE2MDAsNyAmIzQzOzE2MDIsNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICYjNDM7MTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgaXB2c2gsIDAsIHJ0X21vZGUpO1xuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgY2lwaCwgMCwgcnRfbW9kZSk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpO1xuQEAgLTE2NDksMTMgJiM0MzsxNjUxLDEzIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHR9XG4gXG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBjaXBoKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9yd2FyZF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7c2N0cF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7c2N0cF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX3NuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dWRwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQVlMgbG9naWMgZm9yIGhhbmRsaW5nIGNoZWNrc3VtcyBhbmQgTkFUIGZvciBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cy4gSXQgaW50cm9kdWNlcyBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBhbmQgYWx0ZXJzIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNDM0M2IwODEwZDk2ZjM5ZjVkMGY3Y2MzNmNjYjFhNmYwYmZjYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwNDozODoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDQxN2ZmNTFmNjJmYzhlLi5jNjg0YTQ2Y2UxNWE1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0yNSw3ICYjNDM7MjUsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwkJLyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwkJCS8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqLwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXA2X2ZpYi5oJmd0OwogI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oJmd0OwogI2VuZGlmCkBAIC0xOTcyLDggJiM0MzsxOTc0LDkgQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsCi0JCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwomIzQzOwkJICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE5ODYsOCAmIzQzOzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQkgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwKLQkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLAomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTIwNTksMTUgJiM0MzsyMDYzLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiB9CiAKIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7CiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZik7CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTsKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKLQogc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSkKIHsKIAlfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07CkBAIC0yMDkzLDYgJiM0MzsyMDk2LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZikKJiM0Mzt7CiYjNDM7CS8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqLwomIzQzOwlpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyogTE9DQUxfT1VUID8gKi8KJiM0MzsJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi8KJiM0MzsJaWYgKGFmID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKJiM0Mzt9CiYjNDM7CiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0zNjcsNyAmIzQzOzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjIxZGI2YWYyMjBlYjA5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfQogCiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQomIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CkBAIC05MjQsMTMgJiM0Mzs5MjQsMTIgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqIC0gaW5vdXQ6IDE9aW4tJmd0O291dCwgMD1vdXQtJmd0O2luCiAgKi8KIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtJmd0O2lobCo0OwotCXN0cnVjdCBpY21waGRyICppY21waAkgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKLQkJCQkJCSAgICAgIGljbXBfb2Zmc2V0KTsKJiM0MzsJc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiAJc3RydWN0IGlwaGRyICpjaXBoCSA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggJiM0MzsgMSk7CiYjNDM7CXVuc2lnbmVkIGludCBjb2ZmID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwogCiAJaWYgKGlub3V0KSB7CiAJCWlwaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CkBAIC05NTcsNDggJiM0Mzs5NTYsNDUgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7Y2hlY2tzdW0gPSAwOwotCWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpOwomIzQzOwlpY21waC0mZ3Q7Y2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBpcHY2aGRyICppcGgJID0gaXB2Nl9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvZmZzCSA9IDA7IC8qIGhlYWRlciBvZmZzZXQqLwogCWludCBwcm90b2NvbDsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoOwotCXN0cnVjdCBpcHY2aGRyICpjaXBoOwotCXVuc2lnbmVkIHNob3J0IGZyYWdvZmZzOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqY2loOwogCi0JaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKLQlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpOwotCW9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTsKLQljaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwomIzQzOwlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRvZmYpOwomIzQzOwljaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O29mZik7CiAKLQlwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO29mZnMsIC0xLCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKJiM0MzsJcHJvdG9jb2wgPSBjaXBoLSZndDtwcm90b2NvbDsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKLQkJY2lwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pbjY7CiAJfSBlbHNlIHsKIAkJaXBoLSZndDtkYWRkciA9IGNwLSZndDtkYWRkci5pbjY7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmICghZnJhZ29mZnMgJmFtcDsmYW1wOyAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkJCSAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkgewotCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7CiYjNDM7CWlmICghY2lwaC0mZ3Q7ZnJhZ29mZnMgJmFtcDsmYW1wOwomIzQzOwkgICAgKHByb3RvY29sID09IElQUFJPVE9fVENQICB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAomIzQzOwkgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHsKJiM0MzsJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7bGVuKTsKIAogCQlJUF9WU19EQkcoMTEsICYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCSAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksCkBAIC0xMDExLDE5ICYjNDM7MTAwNywxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gaWNtcF9vZmZzZXQsCiYjNDM7CQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHRvZmYsCiAJCQkJCSAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKLQlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7aGVhZCAmIzQzOyBpY21wX29mZnNldDsKJiM0MzsJc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgJiM0MzsgdG9mZjsKIAlza2ItJmd0O2NzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCiAJaWYgKGlub3V0KQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NiYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLAotCQkJICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC0mZ3Q7b2ZmLAogCQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2JiMzNDspOwogfQogI2VuZGlmCkBAIC0xMDMzLDM2ICYjNDM7MTAyNywzOCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAgKi8KIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXVuaW9uIG5mX2luZXRfYWRkciAqc25ldCwKLQkJCQlfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CQkJCXN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsCi0JCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiYjNDM7CQkJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CXVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtJmd0O2xlbjsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCR19CVUYoMSwgJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxuJiMzNDssCiAJCQkgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKQotCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVURQIHx8CiYjNDM7CSAgICBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApCiYjNDM7CQljdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7CiYjNDM7CWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKQogCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJaWYgKGFmID09IEFGX0lORVQ2KQotCQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgY2lwaCk7CiAJZWxzZQogI2VuZGlmCi0JCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxKTsKJiM0MzsJCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmKTsKIAogCWlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtJmd0O2lwdnMsIGFmLCBza2IsIGhvb2tudW0pKQogCQlnb3RvIG91dDsKQEAgLTEwOTAsOSAmIzQzOzEwODYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqCUN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCQkgIHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTExMDcsMTcgJiM0MzsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXB2c2gtJmd0O2xlbjsKJiM0MzsJb2Zmc2V0ID0gaXB2c2gtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwdnNoLSZndDtzYWRkci5pcCwgJmFtcDtpcHZzaC0mZ3Q7ZGFkZHIuaXApOwogCiAJLyoKIAkgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLgpAQCAtMTEzNiw3ICYjNDM7MTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJLyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi8KIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKGNpaCA9PSBOVUxMKQomIzQzOwlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQogCQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KIAogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTE1OSw5ICYjNDM7MTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFjcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCXNuZXQuaXAgPSBpcGgtJmd0O3NhZGRyOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY2loLSZndDtwcm90b2NvbCwgY3AsCi0JCQkJICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTsKJiM0MzsJc25ldC5pcCA9IGlwdnNoLSZndDtzYWRkci5pcDsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAomIzQzOwkJCQkgICAgaG9va251bSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTE3NCw3ICYjNDM7MTE3Miw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAogCSpyZWxhdGVkID0gMTsKIAlpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC0mZ3Q7bGVuLCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwpAQCAtMTIxNyw5ICYjNDM7MTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42OwotCW9mZnNldCA9IGNpcGgubGVuOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNpcGgucHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgb2Zmc2V0LCBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsCiYjNDM7CQkJCSAgICBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKIH0KICNlbmRpZgogCkBAIC0xNTQ1LDcgJiM0MzsxNTQxLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXQKICNlbmRpZgogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwotCQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwgaG9va251bSk7CiYjNDM7CQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwKJiM0MzsJCQkJCQkgICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0xNzUzLDkgJiM0MzsxNzUwLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqLwogc3RhdGljIGludAogaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAotCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTE3NzUsMTcgJiM0MzsxNzcxLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7CiAJCWlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpCiAJCQlyZXR1cm4gTkZfU1RPTEVOOwomIzQzOwkJaWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXBoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCUlQX1ZTX0RCRygxMiwgJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC0mZ3Q7JXBJNFxuJiMzNDssCiAJCSAgaWMtJmd0O3R5cGUsIG50b2hzKGljbXBfaWQoaWMpKSwKLQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aXBoLSZndDtkYWRkcik7CiYjNDM7CQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCwgJmFtcDtpcGgtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTE4OTgsMTAgJiM0MzsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAl2ZXJkaWN0ID0gTkZfRFJPUDsKIAogCS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwotCWlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmYW1wOyZhbXA7IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkgewomIzQzOwlpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlobCwgSVBQUk9UT19JQ01QLCBBRl9JTkVUKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCRygxLCAmIzM0O0luY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXG4mIzM0OywKLQkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKJiM0MzsJCQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTk3Miw3ICYjNDM7MTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLSZndDtwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtJmd0O3Byb3RvY29sIHx8CiAJICAgIElQUFJPVE9fU0NUUCA9PSBjaWgtJmd0O3Byb3RvY29sKQogCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIG9mZnNldCwgaG9va251bSwKJiM0MzsJCQkJICAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIwNjQsNiAmIzQzOzIwNjQsMTggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwomIzQzOwlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC0mZ3Q7bGVuLCBJUFBST1RPX0lDTVBWNiwKJiM0MzsJCQkJCSBBRl9JTkVUNikpIHsKJiM0MzsJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KJiM0MzsJCUlQX1ZTX0RCRygxLCAmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXG4mIzM0OywKJiM0MzsJCQkgICZhbXA7aXBoLSZndDtzYWRkcik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCS8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqLwogCWlwX3ZzX2luX3N0YXRzKGNwLCBza2IpOwogCkBAIC0yMDczLDcgJiM0MzsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbCkKIAkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi8KIAotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIG9mZnNldCwgaG9va251bSwKJiM0MzsJCQkJICAgICAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIxNTIsNyAmIzQzOzIxNjUsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwogCQkJaW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyZWxhdGVkLAotCQkJCQkJICAgIGhvb2tudW0pOwomIzQzOwkJCQkJCSAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMjI4OCw2ICYjNDM7MjMwMSw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS0mZ3Q7bmV0KTsKJiM0MzsJc3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyOwogCWludCByOwogCiAJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLwpAQCAtMjI5NywxMCAmIzQzOzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc3RhdGUtJmd0O3BmID09IE5GUFJPVE9fSVBWNCkgewogCQlpZiAoaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sICE9IElQUFJPVE9fSUNNUCkKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgJmFtcDtpcGhkcik7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAl9IGVsc2UgewotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7Ci0KIAkJaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKIAogCQlpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpCkBAIC0yMzEwLDcgJiM0MzsyMzIzLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsICZhbXA7ciwgc3RhdGUtJmd0O2hvb2spOwomIzQzOwlyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsICZhbXA7ciwgc3RhdGUtJmd0O2hvb2ssICZhbXA7aXBoZHIpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogCiBzdGF0aWMgaW50CiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQl1bnNpZ25lZCBpbnQgc2N0cGhvZmYpOwomIzQzOwkJc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O3NvdXJjZSAhPSBjcC0mZ3Q7dnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8CkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgc2N0cGhvZmYpKQomIzQzOwkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7CiYjNDM7CXNjdHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0Mzsgc2N0cGhvZmY7CiAKIAkvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovCiAJaWYgKHNjdHBoLSZndDtkZXN0ICE9IGNwLSZndDtkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE4NywxOSAmIzQzOzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQl1bnNpZ25lZCBpbnQgc2N0cGhvZmYpCiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKJiM0MzsJdW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLSZndDtsZW47CiAJc3RydWN0IHNjdHBoZHIgKnNoOwogCV9fbGUzMiBjbXAsIHZhbDsKIAomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKJiM0MzsJCXJldHVybiAxOwogCXNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZik7CiAJY21wID0gc2gtJmd0O2NoZWNrc3VtOwogCXZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTsKIAogCWlmICh2YWwgIT0gY21wKSB7CiAJCS8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqLwotCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCSYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCkBAIC0yOSw3ICYjNDM7MjksNyBAQAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTsKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIAogc3RhdGljIGludAogdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7CiYjNDM7CXRjcGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyB0Y3Bob2ZmOwogCXRjcGgtJmd0O3NvdXJjZSA9IGNwLSZndDt2cG9ydDsKIAogCS8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovCkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCF0Y3BfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHRjcGhvZmYpKQomIzQzOwkJaWYgKCF0Y3BfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKgpAQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7CiYjNDM7CXRjcGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyB0Y3Bob2ZmOwogCXRjcGgtJmd0O2Rlc3QgPSBjcC0mZ3Q7ZHBvcnQ7CiAKIAkvKgpAQCAtMzAyLDQxICYjNDM7MzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAogc3RhdGljIGludAogdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCSAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZikKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewotCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwgMCk7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgSVBQUk9UT19UQ1AsCi0JCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwKLQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCWJyZWFrOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC0mZ3Q7bGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7CiYjNDM7CQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtJmd0O29mZiwKJiM0MzsJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0yNSw3ICYjNDM7MjUsNyBAQAogCiBzdGF0aWMgaW50CiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTsKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIAogc3RhdGljIGludAogdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE1NSw3ICYjNDM7MTU1LDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdWRwaG9mZikpCiYjNDM7CQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjsKJiM0MzsJdWRwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHVkcGhvZmY7CiAJdWRwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyoKQEAgLTIzOCw3ICYjNDM7MjM4LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdWRwaG9mZikpCiYjNDM7CQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjsKJiM0MzsJdWRwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHVkcGhvZmY7CiAJdWRwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7CiAJc3RydWN0IHVkcGhkciBfdWRwaCwgKnVoOwogCi0JdWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKJiM0MzsJdWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBpcGgtJmd0O2xlbiwgc2l6ZW9mKF91ZHBoKSwgJmFtcDtfdWRwaCk7CiAJaWYgKHVoID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaWYgKHVoLSZndDtjaGVjayAhPSAwKSB7Ci0JCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQkJY2FzZSBDSEVDS1NVTV9OT05FOgotCQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwKLQkJCQkJCSBza2ItJmd0O2xlbiAtIHVkcGhvZmYsIDApOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJCWlmIChhZiA9PSBBRl9JTkVUNikgewotCQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkJICAgIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwKLQkJCQkJCSAgICBJUFBST1RPX1VEUCwKLQkJCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLQkJCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkJICAgICAgc2tiLSZndDtjc3VtKSkgewotCQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJCWJyZWFrOwotCQl9CiYjNDM7CWlmICghdWgtJmd0O2NoZWNrKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVURQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggOWZlZjQzMzVkYTEzZmQuLmMyMzQwMWM3ODlkZTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKQEAgLTE1MDIsOCAmIzQzOzE1MDIsOSBAQCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKICAqLwogaW50CiBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiYjNDM7CQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCXVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgcnRhYmxlCSpydDsJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KIAlpbnQgcmM7CkBAIC0xNTE1LDcgJiM0MzsxNTE2LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpOwomIzQzOwkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTsKIAkJZWxzZQogCQkJcmMgPSBORl9BQ0NFUFQ7CiAJCS8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqLwpAQCAtMTUzMyw3ICYjNDM7MTUzNCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKIAkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLSZndDtpcHZzLCBjcC0mZ3Q7YWYsIHNrYiwgY3AtJmd0O2Rlc3QsIGNwLSZndDtkYWRkci5pcCwgcnRfbW9kZSwKLQkJCQkgICBOVUxMLCBpcGgpOwomIzQzOwkJCQkgICBOVUxMLCBjaXBoKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gc2tiX3J0YWJsZShza2IpOwpAQCAtMTU2NSwxMyAmIzQzOzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAl9CiAKIAkvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovCi0JaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKQomIzQzOwlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKQogCQlnb3RvIHR4X2Vycm9yOwogCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTsKJiM0MzsJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDggJiM0MzsxNTg4LDkgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogaW50CiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaCkKJiM0MzsJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLAomIzQzOwkJc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiAJaW50IHJjOwpAQCAtMTYwMCw3ICYjNDM7MTYwMiw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovCiAJaWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7CiAJCWlmIChjcC0mZ3Q7cGFja2V0X3htaXQpCi0JCQlyYyA9IGNwLSZndDtwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpOwomIzQzOwkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTsKIAkJZWxzZQogCQkJcmMgPSBORl9BQ0NFUFQ7CiAJCS8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqLwpAQCAtMTYxNyw3ICYjNDM7MTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKIAkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLSZndDtpcHZzLCBjcC0mZ3Q7YWYsIHNrYiwgY3AtJmd0O2Rlc3QsCi0JCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7CiYjNDM7CQkJCSAgICAgICZhbXA7Y3AtJmd0O2RhZGRyLmluNiwgTlVMTCwgY2lwaCwgMCwgcnRfbW9kZSk7CiAJaWYgKGxvY2FsICZsdDsgMCkKIAkJZ290byB0eF9lcnJvcjsKIAlydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpOwpAQCAtMTY0OSwxMyAmIzQzOzE2NTEsMTMgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAl9CiAKIAkvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovCi0JaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKQomIzQzOwlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKQogCQlnb3RvIHR4X2Vycm9yOwogCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTsKJiM0MzsJaXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNrc3VtIFZhbGlkYXRpb24gQ2hhbmdlcyBpbiBJUFZTOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIElQVlMgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCB3b3JrLCBkZWZpbml0ZWx5IHdpdGhpbiByZWFjaCBvZiB0aGUga2VybmVsLiBJdOKAmXMgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBmdW5jdGlvbnMgbGlrZSBgaXBfdnNfY2hlY2tzdW1fbmVlZGVkYCBhbmQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBidW5jaCBvZiBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cyDigJMgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGhhbmRsZV9yZXNwb25zZV9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFuZCB0aGUgdmFyaW91cyBjaGVja3N1bSBjaGVjayBmdW5jdGlvbnMgZm9yIHNjdHAsIHRjcCBhbmQgdWRwLiBJdCBhbHNvIHRvdWNoZXMgYGlwX3ZzX2ljbXBfeG1pdGAgYW5kIGBpcF92c19pY21wX3htaXRfdjZgLgoKS25vd2luZyBJUFZTIGlzIGEgbG9hZCBiYWxhbmNlciB0aGF0IHNpdHMgb24gdG9wIG9mIG5ldGZpbHRlciwgdGhpcyBpcyBjbGVhcmx5IGZ1bmN0aW9uYWwgY29kZSBhbmQgSSB0aGluayBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoZWNrc3VtcyBoZXJlLCB0aGF0IGFsd2F5cyB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0lQX1ZTYCBvYnZpb3VzbHkgZW5hYmxlcyB0aGUgY29yZSBJUFZTIGZ1bmN0aW9uYWxpdHkuIFdl4oCZdmUgZ290IGBDT05GSUdfSVBfVlNfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19TQ1RQYCBmb3IgU0NUUC4gVENQIGFuZCBVRFAgYXJlIHByZXR0eSBtdWNoIGJha2VkIGluIGlmIElQVlMgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEnigJltIGp1c3Qgd29uZGVyaW5nIGFib3V0IE5BVCBzdXBwb3J0LiBJcyB0aGVyZSBhIHNlcGFyYXRlIGBDT05GSUdfSVBfVlNfTkFUYCBvciBpcyBpdCBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBJUFZTIGlzIGVuYWJsZWQuIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgbW9yZSBjbG9zZWx5IG9uIHRoYXQgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIElQVlMuIEkmIzM5O20gdGhpbmtpbmcsIGJ5IGV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZpbGUsIEkgY2FuIGdldCBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0byBsZXZlcmFnZSBpdCB3aXRoaW4gbXkgY3VycmVudCB3b3JrLCBvciBwbGFuIGZ1cnRoZXIgZGV2ZWxvcG1lbnQvdHJvdWJsZXNob290aW5nLiBJIGV4cGVjdCB0byBmaW5kIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGRpZmZlcmVudCBJUFZTIG1vZHVsZXMsIGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZywgc2NoZWR1bGluZyBhbGdvcml0aG1zLCBhbmQgYW55IGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGlzIHRoZSBmaXJzdCwgYW5kIGFyZ3VhYmx5IG1vc3QgaW1wb3J0YW50LCBzdGVwLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2VybmVsIEludGVybmFscyBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NiBhbmQgU0NUUCBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgYGdyZXBgIGZvciBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQgd2lsbCBxdWlja2x5IGJyaW5nIHVwIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IElQdjYgdmVyc3VzIFNDVFAgdHJhZmZpYyBpcyBoYW5kbGVkIGJ5IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgU0NUUCBoYW5kbGluZyBoYXMgdGhlIHNhbWUgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcyBUQ1Agb3IgVURQLCBjb25zaWRlcmluZyB0aGUgbXVsdGktaG9taW5nIGFzcGVjdCBvZiBTQ1RQLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGFzc29jaWF0aW9uIGlkZW50aWZpZXJzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGZsb3cgZGF0YS4gVGhpcyBncmVwIGlzIGEgZ29vZCBpbml0aWFsIHNjYW4gdG8gdW5kZXJzdGFuZCB0aGUgYmFzaWMgYXJjaGl0ZWN0dXJlIGFuZCBxdWlja2x5IGxvY2F0ZSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlNfSVBWNnxjb25maWcgSVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0byB0aGUgY2hhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgSVBfVlNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFJhdGhlciB0aGFuIG1ldGljdWxvdXNseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbGV0JiMzOTtzIGxldmVyYWdlIHRoZSBLY29uZmlnIHN5c3RlbS4gQSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggc2VlbXMgbW9zdCBlZmZpY2llbnQgcmlnaHQgbm93LiBJJiMzOTtsbCBqdXN0IGdyZXAgZm9yIHRoZSBzdHJpbmcgYGNvbmZpZyBJUF9WU2AgaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBub3Qgb3Zlcmx5IGNvbmNlcm5lZCBhYm91dCBhbiBleGFjdCBtYXRjaCBpbml0aWFsbHk7IGEgYnJvYWRlciBzZWFyY2ggd2lsbCBob3BlZnVsbHkgcXVpY2tseSByZXZlYWwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgZmlsdGVyIG91dCB0aGUgaXJyZWxldmFudCByZXN1bHRzIGxhdGVyIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIElQVlMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMgZGVmaW5lZCB3aXRoaW4gdGhpcyBLY29uZmlnIGlzIGNydWNpYWwgZm9yIGFueSBJUFZTLXJlbGF0ZWQgcHJvamVjdCwgYmUgaXQgb3B0aW1pemF0aW9uLCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBidWlsZGluZyBhIGN1c3RvbSBrZXJuZWwuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyB3ZSBoYXZlIHRvIHR1bmUgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgYmVoYXZpb3IuIFRoaXMgS2NvbmZpZyBmaWxlIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBJUFZTIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtLCBzbyBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGVhY2ggc3ltYm9sLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTEwMD1jb25maWdcdElQX1ZTX1BST1RPX0FIXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xNDc9Y29uZmlnXHRJUF9WU19XTENcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTY3OmNvbmZpZyAgSVBfVlNfT1ZGXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTc4PWNvbmZpZ1x0SVBfVlNfTEJMQ1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE5Mjpjb25maWcgIElQX1ZTX0xCTENSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1Mjpjb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkRlYnVnZ2luZyBhIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSBzZWUgYSByZWZlcmVuY2UgdG8gYElQX1ZTX0lQVjZgLiBOb3csIHdoZXJlIGluIHRoZSB3b3JsZCBpcyB0aGF0IGNvbnN0YW50IGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgbWFjcm8gb3IgdmFyaWFibGUgaXMgZGVjbGFyZWQuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZhbHVlIHRvIGNvbXByZWhlbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNlY3Rpb24gb2YgdGhlIHByb2dyYW0uIElzIGl0IGEgZmxhZywgYSBudW1lcmljYWwgY29uc3RhbnQ/IFRoaXMgaGFzIGJpZyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFY2IGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIElQdjYgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkLiBJZiBJIGNhbiYjMzk7dCBmaW5kIGl0LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkZWVwZXIgZGlnZ2luZyB0byB0cmFjayBkb3duIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI3PWlmIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NTQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTYtLyogV2UgbmVlZCBhbiBhZGRyc3RybGVuIHRoYXQgd29ya3Mgd2l0aCBvciB3aXRob3V0IHY2ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OC0jZGVmaW5lIElQX1ZTX0FERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTY2PXN0YXRpYyB1MzIgaXBfdnNfY29ubl9oYXNoa2V5KHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZiwgdW5zaWduZWQgaW50IHByb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTcyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE3NC1cdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9OTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19iaW5kX3htaXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM0LVx0Y2FzZSBJUF9WU19DT05OX0ZfVFVOTkVMOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNi1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6OTU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05NTgtc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdF92NihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDY2PXZvaWQgaXBfdnNfdHJ5X2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDk5LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDEtXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNTM9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQ0Mi1cdC8qIEJpbmQgaXRzIHBhY2tldCB0cmFuc21pdHRlciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDQzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDQ0LVx0aWYgKHAtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNTgzPXN0YXRpYyBpbnQgaXBfdnNfY29ubl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2MDY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDctXHRcdGlmIChjcC1cdTAwM2VkYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjEzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjE0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjE1LVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNjU4PXN0YXRpYyBpbnQgaXBfdnNfY29ubl9zeW5jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTY2ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2OS1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NzUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2NzY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NzctXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDYtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDMtXHRcdHJldHVybiBcJiMzNDtJQ01QXCYjMzQ7O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxMDQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwNS1cdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yODQ9dTMyIGlwX3ZzX3JodF9oYXNoX2xpbmZvKHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI4OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6Mjg5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yOTAtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz00MzE9aXBfdnNfc2NoZWRfcGVyc2lzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDU1LVx0LyogTWFzayBzYWRkciB3aXRoIHRoZSBuZXRtYXNrIHRvIGFkanVzdCB0ZW1wbGF0ZSBncmFudWxhcml0eSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo0NTY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ1Ny1cdGlmIChzdmMtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NTItXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NjM9aW50IGlwX3ZzX2xlYXZlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MzgtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODM5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NDAtXHRpZiAoc3ZjLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04OTg9c3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNS1cdFx0cmV0dXJuIDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjkwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTA3LVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05MjY9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk3MS12b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDI4PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1NS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA1NjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1Ny1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEwODg9c3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjExNjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjYtc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEzMDI9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX25ld19jb25uX291dChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTMyOS1cdFx0LyogYXBwbHkgbmV0bWFzayB0aGUgc2FtZSB3YXkgaW5ncmVzcy1zaWRlIGRvZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTMzMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTMzMS1cdFx0aWYgKHN2Yy1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE0MzE9aGFuZGxlX3Jlc3BvbnNlKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTQ1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ1MS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDI9aXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUyOS1cdGlwX3ZzX2ZpbGxfaXBoX3NrYihhZiwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTUzMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUzMS1cdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTU1Ni1cdC8qIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE1NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE1NTgtXHRpZiAoYWYgPT0gQUZfSU5FVClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2MTUtXHRcdFx0XHRcdFx0aXBoLmxlbikpKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjE3LVx0XHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzUyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5ODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODctc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjEwNz1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMDA9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE0LVx0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzE1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE2LVx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzc2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzc3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzc4LXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyNz1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MzQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQzNTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQzNi1cdFx0b3BzID0gaXBfdnNfb3BzNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0NTY9dm9pZCBpcF92c191bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgYWYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDYyLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NjM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NjQtXHRcdG9wcyA9IGlwX3ZzX29wczY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2LSNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz02Nz1zdGF0aWMgdm9pZCBfX2lwX3ZzX2RlbF9zZXJ2aWNlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGJvb2wgY2xlYW51cCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjcwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTcxLS8qIFRha2VuIGZyb20gcnQ2X2ZpbGxfbm9kZSgpIGluIG5ldC9pcHY2L3JvdXRlLmMsIGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9ODY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX3JzX2hhc2hrZXkoaW50IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy04NzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6ODc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTg3Ni1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQwMj1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDA3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE0MDg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQwOS1cdGlmICh1ZGVzdC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNzA5PWlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3NDYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTc0NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ4LVx0aWYgKHUtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTkxOD1pcF92c19lZGl0X3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE5NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTk1Mi1cdGlmICh1LVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI5NzU9c3RhdGljIGludCBpcF92c19pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yOTk0LVx0XHRpZiAoIXN2Yy1cdTAwM2Vmd21hcmspIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyOTk1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5OTYtXHRcdFx0aWYgKHN2Yy1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzAyMy1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzAyNDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMDI1LVx0XHRcdGlmIChkZXN0LVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00MTU3PXN0YXRpYyBib29sIGlwX3ZzX2lzX2FmX3ZhbGlkKGludCBhZilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2MC1cdFx0cmV0dXJuIHRydWU7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MTYyLVx0aWYgKGFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBpcHY2X21vZF9lbmFibGVkKCkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0MzA9c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDQ1LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDQ2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDctXHRpZiAoYy1cdTAwM2VtY2FzdF9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00NTE3PXN0YXRpYyBpbnQgaXBfdnNfZ2VubF9uZXdfZGFlbW9uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1NDQtXHRcdGlmIChhKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDU0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NTQ2LVx0XHRcdGludCBhZGRyX3R5cGU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzI9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcF92c19kc3Rfbm90aWZpZXIgPSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTE3My1cdC5ub3RpZmllcl9jYWxsID0gaXBfdnNfZHN0X2V2ZW50LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUxNzQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTE3NS1cdC5wcmlvcml0eSA9IEFERFJDT05GX05PVElGWV9QUklPUklUWSAmIzQzOyA1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jPTcwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX2RoX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMtNzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYzo3NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jLTc1LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz00MTg9c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ2My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0NjQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDY1LVx0XHRcdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBwcm90byA9PSAmIzM5OzImIzM5Oykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9MTQ4PWlwX3ZzX2xibGNfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTE1MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM6MTUyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYy0xNTMtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmM9MzExPWlwX3ZzX2xibGNyX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmM6MzE1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE2LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jPTg4PWlwX3ZzX21oX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMtOTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYzo5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTk1LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTIxND1pcF92c190Y3B1ZHBfZGVidWdfcGFja2V0X3Y0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjQzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6MjQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjQ1LXN0YXRpYyB2b2lkXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjc5PWlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoaW50IGFmLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI4My17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyODQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0yODUtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05Mj1zY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjk5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xMDAtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTQ2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE0OC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZWZyYWdvZmZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xMDU9dGNwX2Zhc3RfY3N1bV91cGRhdGUoaW50IGFmLCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMDkte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMTEtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEyNj10Y3BfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTEzMC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTEzMi1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE1NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNTYtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAwLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMDE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAyLVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTIyNT10Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTIzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjM0LVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlZnJhZ29mZnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI4My1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Mjg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI4NS1cdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz05Mz11ZHBfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTk3LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo5ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy05OS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MTE1PXVkcF9wYXJ0aWFsX2NzdW1fdXBkYXRlKGludCBhZiwgc3RydWN0IHVkcGhkciAqdWhkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTE5LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTIxLVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0xMzY9dWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNDMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE0NS1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZWZyYWdvZmZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xOTMtXHRcdHNrYi1cdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjE5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xOTUtXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjI2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIyNzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yMjgtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjc3LVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyNzg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjc5LVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmM9MTQyPXZvaWQgaXBfdnNfc2NoZWR1bGVyX2VycihzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBjaGFyICptc2cpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMtMTQ5LVx0XHRcdCAgICAgc2NoZWRfbmFtZSwgc3ZjLVx1MDAzZWZ3bWFyaywgc3ZjLVx1MDAzZWZ3bWFyaywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jOjE1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jLTE1MS1cdH0gZWxzZSBpZiAoc3ZjLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmM9ODM9aXBfdnNfc2hfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYy04Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jOjg4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODktXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjcxLVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzMyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg4PWlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgzLVx0aWYgKHMtXHUwMDNldjYudHlwZSBcdTAwMjYgU1RZUEVfRl9JTkVUNikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDg1LVx0XHRhZiA9IEFGX0lORVQ2O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE4MS1cdFx0XHRcdCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjExODI6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExODMtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjk3PXN0YXRpYyB2b2lkIHNldF9tY2FzdF9sb29wKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIGxvb3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzAwLVx0aW5ldF9hc3NpZ25fYml0KE1DX0xPT1AsIHNrLCBsb29wKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMwMi1cdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZmFtaWx5KSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMxMj1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfdHRsKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIHR0bClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMTgtXHRXUklURV9PTkNFKGluZXQtXHUwMDNlbWNfdHRsLCB0dGwpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzE5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzNy1cdFdSSVRFX09OQ0UoaW5ldC1cdTAwM2VwbXR1ZGlzYywgdmFsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMzODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzOS1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTI9c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cdC8qICBpbmV0LVx1MDAzZW1jX2FkZHIgID0gMDsgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2My1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzODI9am9pbl9tY2FzdF9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMy1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTUyMD1zdGF0aWMgaW50IG1ha2VfcmVjZWl2ZV9zb2NrKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgaWQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUwLVx0Lyogam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NTItXHRpZiAoaXB2cy1cdTAwM2ViY2ZnLm1jYXN0X2FmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTMzPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpkb19vdXRwdXRfcm91dGU0KHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRhZGRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTYwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNjE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2Mi1zdGF0aWMgaW5saW5lIGludCBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTY4PXN0YXRpYyBpbmxpbmUgYm9vbCBjcm9zc2VzX2xvY2FsX3JvdXRlX2JvdW5kYXJ5KGludCBza2JfYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNzctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE3ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc5LVx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmVfbXR1X2lzX2FkZXF1YXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MjIyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yMjMtXHRpZiAoc2tiX2FmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0yNTk9c3RhdGljIGlubGluZSBib29sIGRlY3JlbWVudF90dGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjI2NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjY2LVx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MzE2PV9faXBfdnNfZ2V0X291dF9ydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IHNrYl9hZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6NDQ3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDgtc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9NzM2PWlwX3ZzX2J5cGFzc194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6NzU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTgtaW50XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03ODc9aXBfdnNfbmF0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODY4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo4Njk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3MC1pbnRcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTk2MT1pcF92c19wcmVwYXJlX3R1bm5lbGVkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2tiX2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtOTY4LVx0X191OCBvbGRfZHNmaWVsZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTY5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05NzAtXHRzdHJ1Y3QgaXB2NmhkciAqb2xkX2lwdjZoID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTk4NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTg1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODYtXHRpZiAoc2tiX2FmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMTQ3PWlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTEyODktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjEyOTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTEyOTEtaW50XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNDM5PWlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTQ2Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTQ2NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDIwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBJUFZTIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgdGhlIGtleSBvbmVzIHRvIGZvY3VzIG9uLiBMZXQgbWUganVzdCBjb25maXJtIHdoZXJlIGBJUF9WU19JUFY2YCBpcyBkZWZpbmVkLCBhaCB5ZXMsIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIEFuZCwganVzdCB0byBiZSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLCB5ZXAsIHN0aWxsIHRoZXJlLCBhbGwgZ29vZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgTkFULiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIGZvciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gaW4gSVBWUz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoZSBgTkFUYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19OQVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTQwCgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzIGZvciBJUFZTIE5BVCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIElQVlMgTkFUIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBJUFZTIE5BVCBpcyBpbmhlcmVudGx5IGJ1aWx0LWluIHdoZW4gSVBWUyBpcyBlbmFibGVkLiBHb29kLiBOb3csIGxldCYjMzk7cyBhbmFseXplIHRoZSByZWxldmFudCBjb2RlLgoKSSBzZWUgdGhhdCBzZXZlcmFsIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoZXNlIGFyZSBhbGwgY29yZSBJUFZTIGZ1bmN0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpJbml0aWFsbHksIEkgdGhvdWdodCB0byBwcmlvcml0aXplOiBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX291dF9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgY3N1bSBjaGVja3MgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgc28gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoZXkmIzM5O3JlIGNhbGxlZC4gQWgsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGV0Yy4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KCkkmIzM5O20gbm93IHRoaW5raW5nIEkgc2hvdWxkIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHRoZSBoYW5kbGVycywgd2hpY2ggYXJlIHRoZSBpbnRlcmVzdGluZyBwb2ludHMgdG8gYXR0YWNrLiBUaGUgaGFuZGxlcnMgaW5jbHVkZTogYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgYHRjcF9zbmF0X2hhbmRsZXJgLCBgdGNwX2RuYXRfaGFuZGxlcmAsIGB1ZHBfc25hdF9oYW5kbGVyYCwgYW5kIGB1ZHBfZG5hdF9oYW5kbGVyYC4KCkFscmlnaHQsIGJhY2sgdG8gdGhvc2UgaW5pdGlhbCBjb3JlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggY29ycmVjdGx5LiBgaXBfdnNfaW5faWNtcGAgaXMgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgaXBfdnNfaW5faG9va2AgYW5kIGBpcF92c19mb3J3YXJkX2ljbXBgLiBMaWtld2lzZSwgYGlwX3ZzX291dF9pY21wYCBpcyBzdGF0aWMsIGNhbGxlZCBvbmx5IGZyb20gYGlwX3ZzX291dF9ob29rYC4gT2theSwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLgoKU28sIHRoZSB1cGRhdGVkIHByaW9yaXR5IGZvciBmdXp6aW5nIHNob3VsZCBiZTogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBhbmQgYHVkcF9kbmF0X2hhbmRsZXJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHRoZXNlIGZ1bmN0aW9uIG5hbWVzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIChpcF92c19pbl9ob29rfGlwX3ZzX291dF9ob29rfGlwX3ZzX2ZvcndhcmRfaWNtcHxpcF92c19pY21wX3htaXR8aXBfdnNfaWNtcF94bWl0X3Y2fHNjdHBfc25hdF9oYW5kbGVyfHNjdHBfZG5hdF9oYW5kbGVyfHRjcF9zbmF0X2hhbmRsZXJ8dGNwX2RuYXRfaGFuZGxlcnx1ZHBfc25hdF9oYW5kbGVyfHVkcF9kbmF0X2hhbmRsZXIpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDEzCgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZWZpbmluZyB0aGUgQXBwcm9hY2gqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbuKApiBpdCYjMzk7cyBwcm92aW5nIGEgYml0IHRvbyByZXN0cmljdGl2ZSBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gSSBjYW4gc2VlIEkmIzM5O20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpdHMgcHJlY2lzaW9uLCB3aGVuIGEgc2ltcGxlciBzb2x1dGlvbiBtaWdodCBiZSBtb3JlIGVmZmVjdGl2ZSBhbmQgbGVzcyBwcm9uZSB0byBlZGdlLWNhc2UgZXJyb3JzLiBJdCYjMzk7cyB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgcmUtZXZhbHVhdGUuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IHdpdGggYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gZm9yY2UgYSBwZXJmZWN0IG1hdGNoIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHdpbGwgZGlyZWN0bHkgc2VhcmNoIGZvciB0aGUgY29yZSBlbGVtZW50OiB0aGUgbmFtZXMgdGhlbXNlbHZlcy4gVGhpcyB3aWxsIHN0cmVhbWxpbmUgdGhlIHByb2Nlc3MgYW5kIGhvcGVmdWxseSBkZWxpdmVyIHRoZSBkYXRhIHdpdGggbGVzcyBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19pbl9ob29rfGlwX3ZzX291dF9ob29rfGlwX3ZzX2ZvcndhcmRfaWNtcHxpcF92c19pY21wX3htaXR8aXBfdnNfaWNtcF94bWl0X3Y2fHNjdHBfc25hdF9oYW5kbGVyfHNjdHBfZG5hdF9oYW5kbGVyfHRjcF9zbmF0X2hhbmRsZXJ8dGNwX2RuYXRfaGFuZGxlcnx1ZHBfc25hdF9oYW5kbGVyfHVkcF9kbmF0X2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9Njg9RVhQT1JUX1NZTUJPTChpcF92c19uZXdfY29ubl9vdXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzEtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3MjpcdElORElSRUNUX0NBTExfMihmLCB0Y3Bfc25hdF9oYW5kbGVyLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzMtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NDojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB0Y3Bfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzctI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDE9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNTAyOmlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUwMy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzUyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzMtXHRcdG9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5NzQ6XHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzUtXHRcdFx0XHQgIFx1MDAyNmNpcGgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTk4Nz1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDg4Olx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg5LVx0XHRcdFx0ICAgICBcdTAwMjZjaXBoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMDY9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTA3OmlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTA4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIyOTk9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAwOmlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAxLVx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzMS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzMjpcdFx0Lmhvb2tcdFx0PSBpcF92c19vdXRfaG9vayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzMy1cdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0MC1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM0MTpcdFx0Lmhvb2tcdFx0PSBpcF92c19pbl9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQyLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ3LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzQ4Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ5LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzU0LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzU1Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX2luX2hvb2ssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNTYtXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNjItXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNjM6XHRcdC5ob29rXHRcdD0gaXBfdnNfZm9yd2FyZF9pY21wLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY0LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY5LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzcwOlx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzcxLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4MC1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM4MTpcdFx0Lmhvb2tcdFx0PSBpcF92c19vdXRfaG9vayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4Mi1cdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4OS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5MDpcdFx0Lmhvb2tcdFx0PSBpcF92c19pbl9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzkxLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk2LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzk3Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk4LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDAzLVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDA0Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX2luX2hvb2ssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MDUtXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTEtXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MTI6XHRcdC5ob29rXHRcdD0gaXBfdnNfZm9yd2FyZF9pY21wLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDEzLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDE4LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDE5Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDIwLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05MT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjkyOnNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTkzLVx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz0xMzk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDA6c2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTQxLVx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz01Njk9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHAgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy01ODItXHQuY29ubl9vdXRfZ2V0XHQ9IGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6NTgzOlx0LnNuYXRfaGFuZGxlclx0PSBzY3RwX3NuYXRfaGFuZGxlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6NTg0Olx0LmRuYXRfaGFuZGxlclx0PSBzY3RwX2RuYXRfaGFuZGxlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtNTg1LVx0LnN0YXRlX25hbWVcdD0gc2N0cF9zdGF0ZV9uYW1lLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xNDY9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTQ3OnRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNDgtXHRcdCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIyNTp0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjI2LVx0XHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9Njg0PXN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF90Y3AgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTY5Ny1cdC5jb25uX291dF9nZXQgPVx0XHRpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk4Olx0LnNuYXRfaGFuZGxlciA9XHRcdHRjcF9zbmF0X2hhbmRsZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk5Olx0LmRuYXRfaGFuZGxlciA9XHRcdHRjcF9kbmF0X2hhbmRsZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtNzAwLVx0LnN0YXRlX25hbWUgPVx0XHR0Y3Bfc3RhdGVfbmFtZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MTM1PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjEzNjp1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTM3LVx0XHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyMTk6dWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTIyMC1cdFx0IHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTQ0OD1zdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgaXBfdnNfcHJvdG9jb2xfdWRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy00NTktXHQuY29ubl9vdXRfZ2V0ID1cdFx0aXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjQ2MDpcdC5zbmF0X2hhbmRsZXIgPVx0XHR1ZHBfc25hdF9oYW5kbGVyLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjQ2MTpcdC5kbmF0X2hhbmRsZXIgPVx0XHR1ZHBfZG5hdF9oYW5kbGVyLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTQ2Mi1cdC5zdGF0ZV90cmFuc2l0aW9uID1cdHVkcF9zdGF0ZV90cmFuc2l0aW9uLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTUwMz1pbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTUwNDppcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNTA1LVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1ODk9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTA6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5MS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIElDTVAgYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcgaW4gdGhlIElQVlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBJUFZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYSBmZXcga2V5IGVudHJ5IHBvaW50czogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBhbmQgdGhlIE5BVCBoYW5kbGVycyBmb3IgdmFyaW91cyBwcm90b2NvbHMgbGlrZSBTQ1RQLCBUQ1AsIGFuZCBVRFAuIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYC4KCkJ1dCB0aGVuLCBjb25zaWRlcmluZyB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgaG9va3MgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfb3V0X2hvb2tgIGFyZSBjYWxsZWQgZm9yICpldmVyeSogcGFja2V0LiBUaGV5JiMzOTtyZSBvbiB0aGUgaG90IHBhdGgsIG1ha2luZyB0aGVtIGEgbGVzcyB0YXJnZXRlZCBhcHByb2FjaCBmb3IgdGhlc2Ugc3BlY2lmaWMgY2hhbmdlcyByZWxhdGVkIHRvIElDTVAuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3R1YWxseSBtb3JlIGZvY3VzZWQgb24gaGFuZGxpbmcgSUNNUCBwYWNrZXRzIHdpdGhpbiB0aG9zZSBob29rcywgc3BlY2lmaWNhbGx5IGluIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYC4KClNpbmNlIHRoZXNlIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBJIGNhbiYjMzk7dCBkaXJlY3RseSBsaXN0IHRoZW0gKnVubGVzcyogdGhleSYjMzk7cmUgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlIChrYWxsc3ltcykuIEJ1dCBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zLCBhc3N1bWluZyB0aGV5IGFyZSBpbiBrYWxsc3ltcy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBmaW5lIHRvIGxpc3QuIFRodXMsIEkmIzM5O2xsIHByaW9yaXRpemUgZnV6emluZyBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYW5kIGBpcF92c19vdXRfaWNtcF92NmAgYmVjYXVzZSB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgSUNNUCBoYW5kbGluZy4gVGhhdCYjMzk7cyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBmdXp6aW5nIHRoZSBob29rcyB0aGVtc2VsdmVzLgoKSSBjb25maXJtZWQgdGhlc2UgYXJlIGluZGVlZCBqdXN0IGBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXAoLi4uKWAgYW5kIGBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKC4uLilgLCBzbyB0aGV5IGFyZSAqbm90KiBpbmxpbmUgYW5kICp3aWxsKiBiZSBpbiBrYWxsc3ltcy4KClNvLCB0aGUgZnV6emluZyBsaXN0IHdpbGwgYmU6CgpgaXBfdnNfaW5faWNtcGAKYGlwX3ZzX291dF9pY21wYApgaXBfdnNfaW5faWNtcF92NmAKYGlwX3ZzX291dF9pY21wX3Y2YApgaXBfdnNfZm9yd2FyZF9pY21wYApgaXBfdnNfaWNtcF94bWl0YApgaXBfdnNfaWNtcF94bWl0X3Y2YApgc2N0cF9zbmF0X2hhbmRsZXJgCmBzY3RwX2RuYXRfaGFuZGxlcmAKYHRjcF9zbmF0X2hhbmRsZXJgCmB0Y3BfZG5hdF9oYW5kbGVyYApgdWRwX3NuYXRfaGFuZGxlcmAKYHVkcF9kbmF0X2hhbmRsZXJgCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbiBgSVBfVlNfUFJPVE9fVENQYCBjb25maWc/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBmb3IgdGhlIEZsYWc6IEEgQnJpZWYgRGlhZ25vc3RpYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGRlZmluZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY29uc3RhbnQsIGFuZCB3aXRob3V0IGl0LCBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSB3b24mIzM5O3Qgd29yayBhcyBleHBlY3RlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIHdoZXRoZXIgaXQgYmUgZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIG1ldHJpY3MsIG9yIGRldmVsb3Bpbmcgc29tZSBuZXcgcmVsYXRlZCBmZWF0dXJlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaW4gcGxhY2UuIFNvLCBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgaXMgYSBnb29kIGZpcnN0IHN0ZXAgdG8gYXZvaWQgc3Bpbm5pbmcgbXkgd2hlZWxzIGxhdGVyLiBJdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBvZiBjaGVja2luZyB0aGF0IHlvdXIgdG9vbHMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYmVmb3JlIHN0YXJ0aW5nIHdvcmsgb24gYSBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBzb21lIHJlbGF0ZWQgY29uc3RhbnRzIGVhcmxpZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZWNhbGwgZW5jb3VudGVyaW5nIGBJUF9WU19QUk9UT19BSGAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBpbiB0aGUgcHJldmlvdXMgY29kZSBJIHdhcyBhbmFseXppbmcuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhlaXIgcHJlc2VuY2UgYW5kIGNvbnRleHQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBSZWdleCBDaGVjayAmYW1wOyBDb250ZXh0dWFsIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBzeW50YXgsIHRoaW5raW5nIGl0IHdhcyBwcm9iYWJseSBhIHNpbXBsZSByZWdleCBtYXRjaCwgbGlrZWx5IHN0YXJ0aW5nIHdpdGggYF5jb25maWcgYC4gVGhhdCBmZWVscyByaWdodCBnaXZlbiB0aGUgY29udGV4dC4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29kZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSBiZWNhdXNlLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBJUF9WU19QUk9UT2Agc3ltYm9sIGlzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBhZnRlciwgYW5kIGl0JiMzOTtzIGEgdmVyeSBjb21tb24gcGF0dGVybiB0byB1c2UgS2NvbmZpZyBmaWxlcyB0byBjb25maWd1cmUgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcdElQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcdElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODYtXHRib29sIFwmIzM0O1VEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5MTpjb25maWdcdElQX1ZTX1BST1RPX0FIX0VTUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XHRkZWZfYm9vbCBJUF9WU19QUk9UT19FU1AgfHwgSVBfVlNfUFJPVE9fQUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkzLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXHRJUF9WU19QUk9UT19FU1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk1LVx0Ym9vbCBcJiMzNDtFU1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTAwOmNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NDQKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgSVBWUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGlzIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgZGVmaW5pdGVseSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgdG8gZW5hYmxlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIHRvIGdldCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB3ZSBuZWVkIHRvIGNvbnNpZGVyLgoKTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgSVBWUyBmaWxlczogYGlwX3ZzX2FwcC5jYCwgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBgaXBfdnNfcHJvdG9fdWRwLmNgLCBhbmQgYGlwX3ZzX3htaXQuY2AuIFRoZXNlIGFyZSBhbGwgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9WU2AsIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZmlsZXMgZGVwZW5kIG9uIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgY29uZmlncy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIElQVlMgbG9naWMsIHBhcnRpY3VsYXJseSBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gYmVpbmcgaW50cm9kdWNlZCwgYW5kIGl0JiMzOTtzIHBsYXlpbmcgd2l0aCBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyAqcmVhY2hhYmxlKiBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSDigJMgcGVyZmVjdCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19uYXRfaWNtcF92NmAuCgpTbywgaW4gc3VtbWFyeSwgSSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIGNoYW5nZXM6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9yd2FyZF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7c2N0cF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7c2N0cF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX3NuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dWRwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQVlMgbG9naWMgZm9yIGhhbmRsaW5nIGNoZWNrc3VtcyBhbmQgTkFUIGZvciBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cy4gSXQgaW50cm9kdWNlcyBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBhbmQgYWx0ZXJzIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3NjdHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3NjdHBfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt1ZHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuMTk3OTMyNDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzMDkyNjUzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJzY3RwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwic2N0cF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVBWUyBsb2dpYyBmb3IgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCBhbHRlcnMgcGFja2V0IG1hbmdsaW5nIG9mZnNldHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuMTk3OTM5NzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQwMDMwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjQzNDNiMDgxMGQ5NmYzOWY1ZDBmN2NjMzZjY2IxYTZmMGJmY2MxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDA0OjM4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLmM2ODRhNDZjZTE1YTU0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuQEAgLTI1LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFx0XFx0XFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gI2VuZGlmXFxuQEAgLTE5NzIsOCArMTk3NCw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xOTg2LDggKzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuQEAgLTIwNTksMTUgKzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gfVxcbiBcXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xcbi1cXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcXG4ge1xcbiBcXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XFxuQEAgLTIwOTMsNiArMjA5NiwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbiBcXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXFxuK3tcXG4rXFx0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXFxuK1xcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qIExPQ0FMX09VVCA/ICovXFxuK1xcdGlmICghc2tiLVxcdTAwM2VkZXYgfHwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xcbitcXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0aWYgKCEoZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSktXFx1MDAzZXJ0NmlfZmxhZ3MgXFx1MDAyNiBSVEZfTE9DQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cXHUwMDNlcnRfZmxhZ3MgXFx1MDAyNiBSVENGX0xPQ0FMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKipcXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXFxuK3tcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xcbit9XFxuK1xcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXFxuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVxcdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVxcdTAwM2VsZW4pO1xcbitcXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIGlwdnNoLVxcdTAwM2VsZW4pO1xcbiBcXG4gXFx0LypcXG4gXFx0ICpcXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXFxuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uMjFkYjZhZjIyMGViMDkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtODY3LDcgKzg2Nyw3IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cXG4gXFxuICNlbmRpZlxcbiBcXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbitzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbiB7XFxuIFxcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xcbiB9XFxuQEAgLTkyNCwxMyArOTI0LDEyIEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuICAqIC0gaW5vdXQ6IDE9aW4tXFx1MDAzZW91dCwgMD1vdXQtXFx1MDAzZWluXFxuICAqL1xcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBoZHIgKmlwaFxcdCA9IGlwX2hkcihza2IpO1xcbi1cXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXFx1MDAzZWlobCo0O1xcbi1cXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpY21wX29mZnNldCk7XFxuK1xcdHN0cnVjdCBpY21waGRyICppY21waFxcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0b2ZmKTtcXG4gXFx0c3RydWN0IGlwaGRyICpjaXBoXFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xcbitcXHR1bnNpZ25lZCBpbnQgY29mZiA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xcbiBcXG4gXFx0aWYgKGlub3V0KSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuQEAgLTk1Nyw0OCArOTU2LDQ1IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXFx0ID0gaXB2Nl9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNcXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cXG4gXFx0aW50IHByb3RvY29sO1xcbiBcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xcbi1cXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcXG4tXFx0dW5zaWduZWQgc2hvcnQgZnJhZ29mZnM7XFxuK1xcdHN0cnVjdCBpcHY2aGRyICpjaWg7XFxuIFxcbi1cXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4tXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaWNtcF9vZmZzZXQpO1xcbi1cXHRvZmZzID0gaWNtcF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcXG4tXFx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xcbitcXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuK1xcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBjaXBoLVxcdTAwM2VvZmYpO1xcbiBcXG4tXFx0cHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZnMsIC0xLCBcXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xcbitcXHRwcm90b2NvbCA9IGNpcGgtXFx1MDAzZXByb3RvY29sO1xcbiBcXG4gXFx0aWYgKGlub3V0KSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbi1cXHRcXHRjaXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2V2YWRkci5pbjY7XFxuK1xcdFxcdGNpaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpcGgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXFxuLVxcdGlmICghZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XFxuLVxcdFxcdFxcdCAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkge1xcbi1cXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4rXFx0aWYgKCFjaXBoLVxcdTAwM2VmcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHByb3RvY29sID09IElQUFJPVE9fVENQICB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDI3LDM4IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApXFxuK1xcdFxcdGN0b2ZmICs9IDIgKiBzaXplb2YoX191MTYpO1xcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi1cXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7XFxuK1xcdFxcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XFxuIFxcbiBcXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVxcdTAwM2VpcHZzLCBhZiwgc2tiLCBob29rbnVtKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTEwOTAsOSArMTA4Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgKlxcdEN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLlxcbiAgKi9cXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKVxcbitcXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdFxcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gXFx0c3RydWN0IGljbXBoZHJcXHRfaWNtcGgsICppYztcXG4gXFx0c3RydWN0IGlwaGRyXFx0X2NpcGgsICpjaWg7XFx0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXFxuIFxcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xcbkBAIC0xMTA3LDE3ICsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxcbitcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHR9XFxuIFxcbi1cXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4tXFx0b2Zmc2V0ID0gaWhsID0gaXBoLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRpaGwgPSBpcHZzaC1cXHUwMDNlbGVuO1xcbitcXHRvZmZzZXQgPSBpcHZzaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwdnNoLVxcdTAwM2VzYWRkci5pcCwgXFx1MDAyNmlwdnNoLVxcdTAwM2VkYWRkci5pcCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbkBAIC0xMTM2LDcgKzExMzQsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKGNpaCA9PSBOVUxMKVxcbitcXHRpZiAoIShjaWggXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2VpaGwgXFx1MDAzZT0gNSkpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbiBcXG4gXFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTExNTksOSArMTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghY3ApXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbi1cXHRzbmV0LmlwID0gaXBoLVxcdTAwM2VzYWRkcjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNpaC1cXHUwMDNlcHJvdG9jb2wsIGNwLFxcbi1cXHRcXHRcXHRcXHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xcbitcXHRzbmV0LmlwID0gaXB2c2gtXFx1MDAzZXNhZGRyLmlwO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcXHUwMDI2c25ldCwgY3AsIHBwLCBcXHUwMDI2Y2lwaCwgaWhsLFxcbitcXHRcXHRcXHRcXHQgICAgaG9va251bSk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xMTc0LDcgKzExNzIsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XFxuIFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xcbi1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXG4gXFx0KnJlbGF0ZWQgPSAxO1xcbiBcXHRpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC1cXHUwMDNlbGVuLCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuQEAgLTEyMTcsOSArMTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0MSw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUwLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NzUsMTcgKzE3NzEsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XFxuIFxcdFxcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXFxuIFxcdFxcdFxcdHJldHVybiBORl9TVE9MRU47XFxuK1xcdFxcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwaC1cXHUwMDNlbGVuO1xcbitcXHRvZmZzZXQgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4gXFx0aWYgKGljID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXG4gXFx0SVBfVlNfREJHKDEyLCBcXFwiSW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXFx1MDAzZSVwSTRcXFxcblxcXCIsXFxuIFxcdFxcdCAgaWMtXFx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcXG4tXFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbitcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkci5pcCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbkBAIC0xODk4LDEwICsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTcyLDcgKzE5NzEsOCBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpaC1cXHUwMDNlcHJvdG9jb2wgfHxcXG4gXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sKVxcbiBcXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXFx1MDAyNmNpcGgpO1xcbitcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjA2NCw2ICsyMDY0LDE4IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG5AQCAtMjA3Myw3ICsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXFxuIFxcdFxcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cXG4gXFxuLVxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXFx1MDAyNmNpcGgpO1xcbitcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTY1LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyODgsNiArMjMwMSw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjMxMSw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMyMyw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi5jMjM0MDFjNzg5ZGUzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDggKzE1MDIsOSBAQCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gICovXFxuIGludFxcbiBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuK1xcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRhYmxlXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuIFxcdGludCByYztcXG5AQCAtMTUxNSw3ICsxNTE2LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM0LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY1LDEzICsxNTY2LDEzIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcbkBAIC0xNTg3LDggKzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuIFxcdGludCByYztcXG5AQCAtMTYwMCw3ICsxNjAyLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xcbitcXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cmMgPSBORl9BQ0NFUFQ7XFxuIFxcdFxcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xcbkBAIC0xNjE3LDcgKzE2MTksNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XFxuIFxcdFxcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcXG4gXFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXFx1MDAzZWlwdnMsIGNwLVxcdTAwM2VhZiwgc2tiLCBjcC1cXHUwMDNlZGVzdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNwLVxcdTAwM2VkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNwLVxcdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xcbiBcXHRpZiAobG9jYWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHRydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpO1xcbkBAIC0xNjQ5LDEzICsxNjUxLDEzIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODozMS43MDI0NjcwOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDgwNDcyMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInNjdHBfc25hdF9oYW5kbGVyXCIsXG4gICAgXCJzY3RwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiNDM0M2IwODEwZDk2ZjM5ZjVkMGY3Y2MzNmNjYjFhNmYwYmZjYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDozODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uYzY4NGE0NmNlMTVhNTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCArMTk3NCw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4rXHRcdCAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xOTg2LDggKzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgKzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4rXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5NiwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxuK3tcbitcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuK1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIExPQ0FMX09VVCA/ICovXG4rXHRpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbitcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuK1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbit7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuK31cbitcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXHUwMDNlbGVuKTtcbitcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cdTAwM2VsZW4pO1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjIxZGI2YWYyMjBlYjA5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg2Nyw3ICs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG5AQCAtOTI0LDEzICs5MjQsMTIgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbiAgKiAtIGlub3V0OiAxPWluLVx1MDAzZW91dCwgMD1vdXQtXHUwMDNlaW5cbiAgKi9cbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4tXHRcdFx0XHRcdFx0ICAgICAgaWNtcF9vZmZzZXQpO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xuK1x0dW5zaWduZWQgaW50IGNvZmYgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NTcsNDggKzk1Niw0NSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSAwO1xuLVx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGljbXBfb2Zmc2V0KTtcbitcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCB0b2ZmKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcIik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBpcHY2aGRyICppcGhcdCA9IGlwdjZfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG9mZnNcdCA9IDA7IC8qIGhlYWRlciBvZmZzZXQqL1xuIFx0aW50IHByb3RvY29sO1xuIFx0c3RydWN0IGljbXA2aGRyICppY21waDtcbi1cdHN0cnVjdCBpcHY2aGRyICpjaXBoO1xuLVx0dW5zaWduZWQgc2hvcnQgZnJhZ29mZnM7XG4rXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaWNtcF9vZmZzZXQpO1xuLVx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4tXHRjaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XG4rXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbitcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlb2ZmKTtcbiBcbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4rXHRwcm90b2NvbCA9IGNpcGgtXHUwMDNlcHJvdG9jb2w7XG4gXG4gXHRpZiAoaW5vdXQpIHtcbiBcdFx0aXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuLVx0XHRjaXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuK1x0XHRjaWgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4tXHRcdGNpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4rXHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xuK1x0aWYgKCFjaXBoLVx1MDAzZWZyYWdvZmZzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbitcdCAgICAgcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSkge1xuK1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgKyBjaXBoLVx1MDAzZWxlbik7XG4gXG4gXHRcdElQX1ZTX0RCRygxMSwgXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgKzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIGljbXBfb2Zmc2V0LFxuK1x0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdG9mZixcbiBcdFx0XHRcdFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xuLVx0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VoZWFkICsgaWNtcF9vZmZzZXQ7XG4rXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsgdG9mZjtcbiBcdHNrYi1cdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7XG4gXG4gXHRpZiAoaW5vdXQpXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlwiKTtcbiB9XG4gI2VuZGlmXG5AQCAtMTAzMywzNiArMTAyNywzOCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4rXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGlobCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuK1x0XHRcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbitcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFx0dW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QO1xuK1x0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cdTAwM2VsZW47XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApXG4rXHRcdGN0b2ZmICs9IDIgKiBzaXplb2YoX191MTYpO1xuK1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIFx0aWYgKGFmID09IEFGX0lORVQ2KVxuLVx0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7XG4rXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgKzEwODYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgKzExMDMsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcHZzaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiT3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXB2c2gtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwdnNoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTExMzYsNyArMTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4gXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNTksOSArMTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuK1x0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuK1x0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4rXHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyArMTE3Miw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XG4gXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFxuIFx0KnJlbGF0ZWQgPSAxO1xuIFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXHUwMDNlbGVuLCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbkBAIC0xMjE3LDkgKzEyMTQsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFx1MDAyNnNuZXQsIGNpcGgucHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuK1x0XHRcdFx0ICAgIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE1NDUsNyArMTU0MSw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XG4gI2VuZGlmXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuLVx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLCBob29rbnVtKTtcbitcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbitcdFx0XHRcdFx0XHQgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0xNzUzLDkgKzE3NTAsOCBAQCBzdGF0aWMgaW50IGlwdnNfZ3JlX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqL1xuIHN0YXRpYyBpbnRcbiBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4tXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NzUsMTcgKzE3NzEsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4rXHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuK1x0b2Zmc2V0ID0gaXBoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCIsXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbitcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xODk4LDEwICsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwiLFxuLVx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NzIsNyArMTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbiBcdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIG9mZnNldCwgaG9va251bSxcbitcdFx0XHRcdCAgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDY0LDYgKzIwNjQsMTggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdHZlcmRpY3QgPSBORl9EUk9QO1xuK1xuK1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4rXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgQUZfSU5FVDYpKSB7XG4rXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbitcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXG5cIixcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbkBAIC0yMDczLDcgKzIwODUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXG4gXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbiBcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4rXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG4rXHRcdFx0XHQgICAgIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjE1Miw3ICsyMTY1LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjg4LDYgKzIzMDEsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMoc3RhdGUtXHUwMDNlbmV0KTtcbitcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbiBcdGludCByO1xuIFxuIFx0LyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqL1xuQEAgLTIyOTcsMTAgKzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1x0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIFx0fSBlbHNlIHtcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuLVxuIFx0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiBcbiBcdFx0aWYgKGlwaGRyLnByb3RvY29sICE9IElQUFJPVE9fSUNNUFY2KVxuQEAgLTIzMTAsNyArMjMyMyw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICNlbmRpZlxuIFx0fVxuIFxuLVx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbitcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgKzExLDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcbitcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMDksNyArMTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xMjEsNyArMTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlc291cmNlICE9IGNwLVx1MDAzZXZwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbitcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XG4rXHRzY3RwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2VkZXN0ICE9IGNwLVx1MDAzZWRwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE4NywxOSArMTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbitcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuK1x0dW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuK1x0XHRyZXR1cm4gMTtcbiBcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmYpO1xuIFx0Y21wID0gc2gtXHUwMDNlY2hlY2tzdW07XG4gXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XG4gXG4gXHRpZiAodmFsICE9IGNtcCkge1xuIFx0XHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cbi1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbitcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTI5LDcgKzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHRjcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XG4rXHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHRjcGhvZmY7XG4gXHR0Y3BoLVx1MDAzZXNvdXJjZSA9IGNwLVx1MDAzZXZwb3J0O1xuIFxuIFx0LyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi9cbkBAIC0yNDQsNyArMjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4rXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgKzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2VkZXN0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gXG4gXHQvKlxuQEAgLTMwMiw0MSArMzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuK1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdGJyZWFrO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbi1cbiBcdHJldHVybiAxO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbmluZGV4IDU4ZjllMjU1OTI3ZTJlLi5mMzI3ODU2ODI0MDJkZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5AQCAtMjUsNyArMjUsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xuK1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyArMTU1LDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXG4rXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB1ZHBob2ZmO1xuK1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggKzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4gXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XG4gXG4tXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbitcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0aWYgKCF1aC1cdTAwM2VjaGVjaylcbitcdFx0cmV0dXJuIDE7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcbitcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbitcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uYzIzNDAxYzc4OWRlMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiw4ICsxNTAyLDkgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0YWJsZVx0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbiBcdGludCByYztcbkBAIC0xNTE1LDcgKzE1MTYsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICsxNTM0LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydChjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LCBjcC1cdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcbi1cdFx0XHRcdCAgIE5VTEwsIGlwaCk7XG4rXHRcdFx0XHQgICBOVUxMLCBjaXBoKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xuQEAgLTE1NjUsMTMgKzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdH1cbiBcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbkBAIC0xNTg3LDggKzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuQEAgLTE2MDAsNyArMTYwMiw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE2MTcsNyArMTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgaXB2c2gsIDAsIHJ0X21vZGUpO1xuK1x0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7XG5AQCAtMTY0OSwxMyArMTY1MSwxMyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0fVxuIFxuIFx0LyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqL1xuLVx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxuK1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuK1x0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuNzAyNDY4Mzk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg3ODQ1NTE3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tzdW0gVmFsaWRhdGlvbiBDaGFuZ2VzIGluIElQVlM6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIElQVlMgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCB3b3JrLCBkZWZpbml0ZWx5IHdpdGhpbiByZWFjaCBvZiB0aGUga2VybmVsLiBJdOKAmXMgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBmdW5jdGlvbnMgbGlrZSBgaXBfdnNfY2hlY2tzdW1fbmVlZGVkYCBhbmQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AuIEZ1cnRoZXJtb3JlLCBpdCdzIG1vZGlmeWluZyBhIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzIOKAkyBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAgYW5kIHRoZSB2YXJpb3VzIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBmb3Igc2N0cCwgdGNwIGFuZCB1ZHAuIEl0IGFsc28gdG91Y2hlcyBgaXBfdnNfaWNtcF94bWl0YCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuXG5cbktub3dpbmcgSVBWUyBpcyBhIGxvYWQgYmFsYW5jZXIgdGhhdCBzaXRzIG9uIHRvcCBvZiBuZXRmaWx0ZXIsIHRoaXMgaXMgY2xlYXJseSBmdW5jdGlvbmFsIGNvZGUgYW5kIEkgdGhpbmsgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoZWNrc3VtcyBoZXJlLCB0aGF0IGFsd2F5cyB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfSVBfVlNgIG9idmlvdXNseSBlbmFibGVzIHRoZSBjb3JlIElQVlMgZnVuY3Rpb25hbGl0eS4gV2XigJl2ZSBnb3QgYENPTkZJR19JUF9WU19JUFY2YCBmb3IgSVB2NiBzdXBwb3J0IGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgIGZvciBTQ1RQLiBUQ1AgYW5kIFVEUCBhcmUgcHJldHR5IG11Y2ggYmFrZWQgaW4gaWYgSVBWUyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSeKAmW0ganVzdCB3b25kZXJpbmcgYWJvdXQgTkFUIHN1cHBvcnQuIElzIHRoZXJlIGEgc2VwYXJhdGUgYENPTkZJR19JUF9WU19OQVRgIG9yIGlzIGl0IGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIElQVlMgaXMgZW5hYmxlZC4gSeKAmWxsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBtb3JlIGNsb3NlbHkgb24gdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1MC40ODcwMjIxODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NTI2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1MC44NTE1NTUwNzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5NTYzNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIElQVlMuIEknbSB0aGlua2luZywgYnkgZXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSwgSSBjYW4gZ2V0IGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhYmxlIGZlYXR1cmVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRvIGxldmVyYWdlIGl0IHdpdGhpbiBteSBjdXJyZW50IHdvcmssIG9yIHBsYW4gZnVydGhlciBkZXZlbG9wbWVudC90cm91Ymxlc2hvb3RpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IElQVlMgbW9kdWxlcywgZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBzY2hlZHVsaW5nIGFsZ29yaXRobXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgaXMgdGhlIGZpcnN0LCBhbmQgYXJndWFibHkgbW9zdCBpbXBvcnRhbnQsIHN0ZXAuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbiBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1My45ODExMjAyMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxNzQyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU0LjAzNzMwMTY2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzEwMzYyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgSW50ZXJuYWxzIGZvciBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIElQdjYgYW5kIFNDVFAgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgYGdyZXBgIGZvciBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQgd2lsbCBxdWlja2x5IGJyaW5nIHVwIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IElQdjYgdmVyc3VzIFNDVFAgdHJhZmZpYyBpcyBoYW5kbGVkIGJ5IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBTQ1RQIGhhbmRsaW5nIGhhcyB0aGUgc2FtZSBsZXZlbCBvZiBncmFudWxhciBjb250cm9sIGFzIFRDUCBvciBVRFAsIGNvbnNpZGVyaW5nIHRoZSBtdWx0aS1ob21pbmcgYXNwZWN0IG9mIFNDVFAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IGhvdyBhc3NvY2lhdGlvbiBpZGVudGlmaWVycyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBmbG93IGRhdGEuIFRoaXMgZ3JlcCBpcyBhIGdvb2QgaW5pdGlhbCBzY2FuIHRvIHVuZGVyc3RhbmQgdGhlIGJhc2ljIGFyY2hpdGVjdHVyZSBhbmQgcXVpY2tseSBsb2NhdGUgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxNCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU4LjA2ODM0MDMzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgxODU5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0lQVjZ8Y29uZmlnIElQX1ZTX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU4LjEyNjE2NTQ0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDUwODU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdG8gdGhlIGNoYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYElQX1ZTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBSYXRoZXIgdGhhbiBtZXRpY3Vsb3VzbHkgc2lmdGluZyB0aHJvdWdoIHRoZSBzb3VyY2UsIGxldCdzIGxldmVyYWdlIHRoZSBLY29uZmlnIHN5c3RlbS4gQSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggc2VlbXMgbW9zdCBlZmZpY2llbnQgcmlnaHQgbm93LiBJJ2xsIGp1c3QgZ3JlcCBmb3IgdGhlIHN0cmluZyBgY29uZmlnIElQX1ZTYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgYW4gZXhhY3QgbWF0Y2ggaW5pdGlhbGx5OyBhIGJyb2FkZXIgc2VhcmNoIHdpbGwgaG9wZWZ1bGx5IHF1aWNrbHkgcmV2ZWFsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGZpbGUuIEknbGwgZmlsdGVyIG91dCB0aGUgaXJyZWxldmFudCByZXN1bHRzIGxhdGVyIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowMS4wNzEyNTM0NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODI0Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowMS4xMjgwODE4ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxOTUzNzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBJUFZTLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmVzIGRlZmluZWQgd2l0aGluIHRoaXMgS2NvbmZpZyBpcyBjcnVjaWFsIGZvciBhbnkgSVBWUy1yZWxhdGVkIHByb2plY3QsIGJlIGl0IG9wdGltaXphdGlvbiwgZGVidWdnaW5nLCBvciBldmVuIGp1c3QgYnVpbGRpbmcgYSBjdXN0b20ga2VybmVsLiBJIG5lZWQgdG8gc2VlIHdoYXQga25vYnMgd2UgaGF2ZSB0byB0dW5lIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGJlaGF2aW9yLiBUaGlzIEtjb25maWcgZmlsZSBob2xkcyB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgSVBWUyBjb25maWd1cmF0aW9uIGVjb3N5c3RlbSwgc28gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGVhY2ggc3ltYm9sLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MDMuOTQ3NjIxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDc1MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTEwMD1jb25maWdcXHRJUF9WU19QUk9UT19BSFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXFx0Ym9vbCBcXFwiU0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTQ3PWNvbmZpZ1xcdElQX1ZTX1dMQ1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE1Nzpjb25maWcgIElQX1ZTX0ZPXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVxcdFxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE2Nzpjb25maWcgIElQX1ZTX09WRlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2OC1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgb3ZlcmZsb3cgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTE3OD1jb25maWdcXHRJUF9WU19MQkxDXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTEtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTkyOmNvbmZpZyAgSVBfVlNfTEJMQ1JcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzUxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1Mjpjb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowNC4xNDUxMDE3MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMzEyMTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRlYnVnZ2luZyBhIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBJUF9WU19JUFY2YC4gTm93LCB3aGVyZSBpbiB0aGUgd29ybGQgaXMgdGhhdCBjb25zdGFudCBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIG1hY3JvIG9yIHZhcmlhYmxlIGlzIGRlY2xhcmVkLiBJdCBjb3VsZCBiZSBpbiBhIGhlYWRlciBmaWxlLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgZXZlbiBkeW5hbWljYWxseSBnZW5lcmF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB2YWx1ZSB0byBjb21wcmVoZW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNlY3Rpb24gb2YgdGhlIHByb2dyYW0uIElzIGl0IGEgZmxhZywgYSBudW1lcmljYWwgY29uc3RhbnQ/IFRoaXMgaGFzIGJpZyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFY2IGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIElQdjYgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkLiBJZiBJIGNhbid0IGZpbmQgaXQsIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gdHJhY2sgZG93biB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjA2Ljk0ODIyNTcxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NTcyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTYtLyogV2UgbmVlZCBhbiBhZGRyc3RybGVuIHRoYXQgd29ya3Mgd2l0aCBvciB3aXRob3V0IHY2ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU4LSNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiBJTkVUNl9BRERSU1RSTEVOXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE2Nj1zdGF0aWMgdTMyIGlwX3ZzX2Nvbm5faGFzaGtleShzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgYWYsIHVuc2lnbmVkIGludCBwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTcyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTczOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTc0LVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz05Mjc9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNC1cXHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MzYtXFx0XFx0aWYgKGNwLVxcdTAwM2VkYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjk1NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1OC1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0X3Y2KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA2Nj12b2lkIGlwX3ZzX3RyeV9iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDk5LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTAwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwMS1cXHRcXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzUzPWlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQ0Mi1cXHQvKiBCaW5kIGl0cyBwYWNrZXQgdHJhbnNtaXR0ZXIgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0NDM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDQ0LVxcdGlmIChwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTU4Mz1zdGF0aWMgaW50IGlwX3ZzX2Nvbm5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjA2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTYwNy1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTYxMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2MTQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjE1LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE2NTg9c3RhdGljIGludCBpcF92c19jb25uX3N5bmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjY4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2OS1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY3NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2NzY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjc3LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NDU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy00Ni0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwMy1cXHRcXHRyZXR1cm4gXFxcIklDTVBcXFwiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1LVxcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI4ND11MzIgaXBfdnNfcmh0X2hhc2hfbGluZm8oc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yODgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyODk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yOTAtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz00MzE9aXBfdnNfc2NoZWRfcGVyc2lzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy00NTUtXFx0LyogTWFzayBzYWRkciB3aXRoIHRoZSBuZXRtYXNrIHRvIGFkanVzdCB0ZW1wbGF0ZSBncmFudWxhcml0eSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NDU2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDU3LVxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NTAte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUyLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NzYzPWludCBpcF92c19sZWF2ZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MzgtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4Mzk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NDAtXFx0aWYgKHN2Yy1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk4PXN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNS1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjkwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNy1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9OTI2PXZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTY5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTcwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTcxLXZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTAyOD1zdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEwNTY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDU3LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTA4OD1zdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTE2NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjYtc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTMwMj1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfbmV3X2Nvbm5fb3V0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEzMjktXFx0XFx0LyogYXBwbHkgbmV0bWFzayB0aGUgc2FtZSB3YXkgaW5ncmVzcy1zaWRlIGRvZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEzMzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMzMxLVxcdFxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNDMxPWhhbmRsZV9yZXNwb25zZShpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE0NTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNDUxLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTUwMj1pcF92c19vdXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE1MjktXFx0aXBfdnNfZmlsbF9pcGhfc2tiKGFmLCBza2IsIGZhbHNlLCBcXHUwMDI2aXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE1MzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTMxLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTU2LVxcdC8qIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNTU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTU1OC1cXHRpZiAoYWYgPT0gQUZfSU5FVClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYxNS1cXHRcXHRcXHRcXHRcXHRcXHRpcGgubGVuKSkpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYxNy1cXHRcXHRcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Mj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTg2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4Ny1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMDc9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTUzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE1NC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjMwMD1pcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMxNC1cXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE2LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNzYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzc3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM3OC1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczZbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyNz1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQzNC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDM2LVxcdFxcdG9wcyA9IGlwX3ZzX29wczY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0NTY9dm9pZCBpcF92c191bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgYWYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NjItXFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDYzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ2NC1cXHRcXHRvcHMgPSBpcF92c19vcHM2O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTY3PXN0YXRpYyB2b2lkIF9faXBfdnNfZGVsX3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgYm9vbCBjbGVhbnVwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTcxLS8qIFRha2VuIGZyb20gcnQ2X2ZpbGxfbm9kZSgpIGluIG5ldC9pcHY2L3JvdXRlLmMsIGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz04Njg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdnNfcnNfaGFzaGtleShpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtODc0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo4NzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTg3Ni1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQwMj1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MDctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE0MDg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MDktXFx0aWYgKHVkZXN0LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNzQ3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ4LVxcdGlmICh1LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE5MTg9aXBfdnNfZWRpdF9zZXJ2aWNlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxOTUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUyLVxcdGlmICh1LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI5NzU9c3RhdGljIGludCBpcF92c19pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5OTQtXFx0XFx0aWYgKCFzdmMtXFx1MDAzZWZ3bWFyaykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyOTk1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yOTk2LVxcdFxcdFxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMwMjMtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzAyNDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzAyNS1cXHRcXHRcXHRpZiAoZGVzdC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDE1Nz1zdGF0aWMgYm9vbCBpcF92c19pc19hZl92YWxpZChpbnQgYWYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2Mi1cXHRpZiAoYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXB2Nl9tb2RfZW5hYmxlZCgpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0MzA9c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHN0YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0NDY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDctXFx0aWYgKGMtXFx1MDAzZW1jYXN0X2FmID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDUxNz1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1NDQtXFx0XFx0aWYgKGEpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDU0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDU0Ni1cXHRcXHRcXHRpbnQgYWRkcl90eXBlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzI9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcF92c19kc3Rfbm90aWZpZXIgPSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxNzMtXFx0Lm5vdGlmaWVyX2NhbGwgPSBpcF92c19kc3RfZXZlbnQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUxNzQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxNzUtXFx0LnByaW9yaXR5ID0gQUREUkNPTkZfTk9USUZZX1BSSU9SSVRZICsgNSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jPTcwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX2RoX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYzo3NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYy03NS1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NDE4PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2luKHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ2My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDY0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00NjUtXFx0XFx0XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiBwcm90byA9PSAnMicpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9MTQ4PWlwX3ZzX2xibGNfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMtMTUxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM6MTUyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMtMTUzLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTMxMT1pcF92c19sYmxjcl9oYXNoa2V5KGludCBhZiwgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jOjMxNTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYy0zMTYtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmM9ODg9aXBfdnNfbWhfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jOjk0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTk1LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTIxND1pcF92c190Y3B1ZHBfZGVidWdfcGFja2V0X3Y0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0yNDMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6MjQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI0NS1zdGF0aWMgdm9pZFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjc5PWlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoaW50IGFmLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjgzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyODQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjg1LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo5OTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTEwMC1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDgtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiBpcGgtXFx1MDAzZWZyYWdvZmZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEwNT10Y3BfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTA5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMTEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEyNj10Y3BfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMzItXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNTU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE1Ni1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAwLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAyLVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yMzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIzMzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjM0LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2VmcmFnb2ZmcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yODMtXFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Mjg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yODUtXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz05Mz11ZHBfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtOTcte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo5ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtOTktXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTExNT11ZHBfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTE5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTIwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xMjEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTQzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNDQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE0NS1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTkzLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjE5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTk1LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yMjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIyNzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjI4LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2VmcmFnb2ZmcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNzctXFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6Mjc4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNzktXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jPTE0Mj12b2lkIGlwX3ZzX3NjaGVkdWxlcl9lcnIoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3QgY2hhciAqbXNnKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMtMTQ5LVxcdFxcdFxcdCAgICAgc2NoZWRfbmFtZSwgc3ZjLVxcdTAwM2Vmd21hcmssIHN2Yy1cXHUwMDNlZndtYXJrLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jOjE1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2NoZWQuYy0xNTEtXFx0fSBlbHNlIGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYz04Mz1pcF92c19zaF9oYXNoa2V5KGludCBhZiwgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmM6ODg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODktXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3MS1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODg9aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzkyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc5MzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODMtXFx0aWYgKHMtXFx1MDAzZXY2LnR5cGUgXFx1MDAyNiBTVFlQRV9GX0lORVQ2KSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4NS1cXHRcXHRhZiA9IEFGX0lORVQ2O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTgxLVxcdFxcdFxcdFxcdCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTgyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE4My1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyOTc9c3RhdGljIHZvaWQgc2V0X21jYXN0X2xvb3Aoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgbG9vcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMwMC1cXHRpbmV0X2Fzc2lnbl9iaXQoTUNfTE9PUCwgc2ssIGxvb3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDItXFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5KSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzEyPXN0YXRpYyB2b2lkIHNldF9tY2FzdF90dGwoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgdHRsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzE4LVxcdFdSSVRFX09OQ0UoaW5ldC1cXHUwMDNlbWNfdHRsLCB0dGwpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMxOTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjAtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzM3LVxcdFdSSVRFX09OQ0UoaW5ldC1cXHUwMDNlcG10dWRpc2MsIHZhbCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzM4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzOS1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzUyPXN0YXRpYyBpbnQgc2V0X21jYXN0X2lmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cXHQvKiAgaW5ldC1cXHUwMDNlbWNfYWRkciAgPSAwOyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTM4Mj1qb2luX21jYXN0X2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluX2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MDEtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDAyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMy1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTIwPXN0YXRpYyBpbnQgbWFrZV9yZWNlaXZlX3NvY2soc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU1MC1cXHQvKiBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUyLVxcdGlmIChpcHZzLVxcdTAwM2ViY2ZnLm1jYXN0X2FmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMzM9c3RhdGljIHN0cnVjdCBydGFibGUgKmRvX291dHB1dF9yb3V0ZTQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZGFkZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2Mi1zdGF0aWMgaW5saW5lIGludCBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNjg9c3RhdGljIGlubGluZSBib29sIGNyb3NzZXNfbG9jYWxfcm91dGVfYm91bmRhcnkoaW50IHNrYl9hZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTc4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc5LVxcdGlmIChza2JfYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmVfbXR1X2lzX2FkZXF1YXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yMjEte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MjIyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjIzLVxcdGlmIChza2JfYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBkZWNyZW1lbnRfdHRsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoyNjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjYtXFx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0zMTY9X19pcF92c19nZXRfb3V0X3J0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo0NDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDgtc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03MzY9aXBfdnNfYnlwYXNzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo3NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTgtaW50XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg2OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg2OTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3MC1pbnRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9OTYxPWlwX3ZzX3ByZXBhcmVfdHVubmVsZWRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGludCBza2JfYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTk2OC1cXHRfX3U4IG9sZF9kc2ZpZWxkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTY5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtOTcwLVxcdHN0cnVjdCBpcHY2aGRyICpvbGRfaXB2NmggPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo5ODU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODYtXFx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMTQ3PWlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTI4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjEyOTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xMjkxLWludFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNDM5PWlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNDY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTQ2NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MDcuMDA4MTg3NTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODA3NDAwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQVlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZXNlIElQVlMgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBJUF9WU19JUFY2YCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24uIExldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgYElQX1ZTX0lQVjZgIGlzIGRlZmluZWQsIGFoIHllcywgaXQncyByaWdodCB0aGVyZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBBbmQsIGp1c3QgdG8gYmUgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLCB5ZXAsIHN0aWxsIHRoZXJlLCBhbGwgZ29vZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgTkFULiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIGZvciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gaW4gSVBWUz8gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhlIGBOQVRgIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjExLjE4ODkzMTc5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5MDg2MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjExLjI1NTg0Nzc1OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTA2Mjc3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIElQVlMgTkFUKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIElQVlMgTkFUIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBJUFZTIE5BVCBpcyBpbmhlcmVudGx5IGJ1aWx0LWluIHdoZW4gSVBWUyBpcyBlbmFibGVkLiBHb29kLiBOb3csIGxldCdzIGFuYWx5emUgdGhlIHJlbGV2YW50IGNvZGUuXG5cbkkgc2VlIHRoYXQgc2V2ZXJhbCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAsIGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgLCBgaXBfdnNfaWNtcF94bWl0YCwgYW5kIGBpcF92c19pY21wX3htaXRfdjZgLiBUaGVzZSBhcmUgYWxsIGNvcmUgSVBWUyBmdW5jdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IHRvIHByaW9yaXRpemU6IGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9jc3VtX2NoZWNrYCwgYHRjcF9jc3VtX2NoZWNrYCwgYW5kIGB1ZHBfY3N1bV9jaGVja2AuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBjc3VtIGNoZWNrcyBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHNvIEkgbmVlZCB0byBzZWUgKndoZXJlKiB0aGV5J3JlIGNhbGxlZC4gQWgsIHRoZXkncmUgY2FsbGVkIGZyb20gYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgZXRjLiBUaGF0IGNoYW5nZXMgdGhpbmdzLlxuXG5JJ20gbm93IHRoaW5raW5nIEkgc2hvdWxkIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHRoZSBoYW5kbGVycywgd2hpY2ggYXJlIHRoZSBpbnRlcmVzdGluZyBwb2ludHMgdG8gYXR0YWNrLiBUaGUgaGFuZGxlcnMgaW5jbHVkZTogYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgYHRjcF9zbmF0X2hhbmRsZXJgLCBgdGNwX2RuYXRfaGFuZGxlcmAsIGB1ZHBfc25hdF9oYW5kbGVyYCwgYW5kIGB1ZHBfZG5hdF9oYW5kbGVyYC5cblxuQWxyaWdodCwgYmFjayB0byB0aG9zZSBpbml0aWFsIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBjb3JyZWN0bHkuIGBpcF92c19pbl9pY21wYCBpcyBzdGF0aWMuIEl0J3MgY2FsbGVkIGZyb20gYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gTGlrZXdpc2UsIGBpcF92c19vdXRfaWNtcGAgaXMgc3RhdGljLCBjYWxsZWQgb25seSBmcm9tIGBpcF92c19vdXRfaG9va2AuIE9rYXksIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy5cblxuU28sIHRoZSB1cGRhdGVkIHByaW9yaXR5IGZvciBmdXp6aW5nIHNob3VsZCBiZTogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBhbmQgYHVkcF9kbmF0X2hhbmRsZXJgLiBJdCdzIGVzc2VudGlhbCB0byB2ZXJpZnkgdGhlc2UgZnVuY3Rpb24gbmFtZXMgYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NDAsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjIxLjE2MjEyNjk1NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NTQ0NDkyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgKGlwX3ZzX2luX2hvb2t8aXBfdnNfb3V0X2hvb2t8aXBfdnNfZm9yd2FyZF9pY21wfGlwX3ZzX2ljbXBfeG1pdHxpcF92c19pY21wX3htaXRfdjZ8c2N0cF9zbmF0X2hhbmRsZXJ8c2N0cF9kbmF0X2hhbmRsZXJ8dGNwX3NuYXRfaGFuZGxlcnx0Y3BfZG5hdF9oYW5kbGVyfHVkcF9zbmF0X2hhbmRsZXJ8dWRwX2RuYXRfaGFuZGxlcilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjEuMzg3Njc3OTA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTQzNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZWZpbmluZyB0aGUgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCB0aGF0IGluaXRpYWwgcmVndWxhciBleHByZXNzaW9u4oCmIGl0J3MgcHJvdmluZyBhIGJpdCB0b28gcmVzdHJpY3RpdmUgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEkgY2FuIHNlZSBJJ20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpdHMgcHJlY2lzaW9uLCB3aGVuIGEgc2ltcGxlciBzb2x1dGlvbiBtaWdodCBiZSBtb3JlIGVmZmVjdGl2ZSBhbmQgbGVzcyBwcm9uZSB0byBlZGdlLWNhc2UgZXJyb3JzLiBJdCdzIHRpbWUgdG8gc3RlcCBiYWNrIGFuZCByZS1ldmFsdWF0ZS4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGFuZCBzdGFydCB3aXRoIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZvcmNlIGEgcGVyZmVjdCBtYXRjaCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSB3aWxsIGRpcmVjdGx5IHNlYXJjaCBmb3IgdGhlIGNvcmUgZWxlbWVudDogdGhlIG5hbWVzIHRoZW1zZWx2ZXMuIFRoaXMgd2lsbCBzdHJlYW1saW5lIHRoZSBwcm9jZXNzIGFuZCBob3BlZnVsbHkgZGVsaXZlciB0aGUgZGF0YSB3aXRoIGxlc3MgY29tcGxleGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMTMsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjQuOTgyMDQwMDY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3NjA1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaW5faG9va3xpcF92c19vdXRfaG9va3xpcF92c19mb3J3YXJkX2ljbXB8aXBfdnNfaWNtcF94bWl0fGlwX3ZzX2ljbXBfeG1pdF92NnxzY3RwX3NuYXRfaGFuZGxlcnxzY3RwX2RuYXRfaGFuZGxlcnx0Y3Bfc25hdF9oYW5kbGVyfHRjcF9kbmF0X2hhbmRsZXJ8dWRwX3NuYXRfaGFuZGxlcnx1ZHBfZG5hdF9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02OD1FWFBPUlRfU1lNQk9MKGlwX3ZzX25ld19jb25uX291dCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxLSNkZWZpbmUgU05BVF9DQUxMKGYsIC4uLikgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzI6XFx0SU5ESVJFQ1RfQ0FMTF8yKGYsIHRjcF9zbmF0X2hhbmRsZXIsIHVkcF9zbmF0X2hhbmRsZXIsIF9fVkFfQVJHU19fKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzMtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzQ6I2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBJTkRJUkVDVF9DQUxMXzEoZiwgdGNwX3NuYXRfaGFuZGxlciwgX19WQV9BUkdTX18pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NS0jZWxpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19VRFApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc3LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDE9c3RhdGljIHVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTUwMjppcF92c19vdXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTAzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Mj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzMtXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTk3NDpcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk3NS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZjaXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTk4Nz1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwODctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDg4OlxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC1cXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNpcGgpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMTA2PXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMDc6aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTA4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjI5OT1zdGF0aWMgdW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAwOmlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMS1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMzEtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzMjpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzMzLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQwLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDE6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2luX2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQyLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ3LVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDg6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX291dF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0OS1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM1NC1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzU1OlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19pbl9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM1Ni1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM2Mi1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzYzOlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19mb3J3YXJkX2ljbXAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY0LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY5LVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNzA6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX291dF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM3MS1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjM3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczZbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4MC1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzgxOlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19vdXRfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzODItXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzODktXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5MDpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfaW5faG9vayxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzOTEtXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzOTYtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5NzpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk4LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDAzLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MDQ6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2luX2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDA1LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDExLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MTI6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2ZvcndhcmRfaWNtcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTMtXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTgtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQxOTpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDIwLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05MT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo5MjpzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTMtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz0xMzk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTQwOnNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDEtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz01Njk9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTU4Mi1cXHQuY29ubl9vdXRfZ2V0XFx0PSBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo1ODM6XFx0LnNuYXRfaGFuZGxlclxcdD0gc2N0cF9zbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo1ODQ6XFx0LmRuYXRfaGFuZGxlclxcdD0gc2N0cF9kbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy01ODUtXFx0LnN0YXRlX25hbWVcXHQ9IHNjdHBfc3RhdGVfbmFtZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xNDY9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE0Nzp0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE0OC1cXHRcXHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjQ9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMjU6dGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yMjYtXFx0XFx0IHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9Njg0PXN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF90Y3AgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtNjk3LVxcdC5jb25uX291dF9nZXQgPVxcdFxcdGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk4OlxcdC5zbmF0X2hhbmRsZXIgPVxcdFxcdHRjcF9zbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjY5OTpcXHQuZG5hdF9oYW5kbGVyID1cXHRcXHR0Y3BfZG5hdF9oYW5kbGVyLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy03MDAtXFx0LnN0YXRlX25hbWUgPVxcdFxcdHRjcF9zdGF0ZV9uYW1lLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTM2OnVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTM3LVxcdFxcdCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTIxOD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIxOTp1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTIyMC1cXHRcXHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz00NDg9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3VkcCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy00NTktXFx0LmNvbm5fb3V0X2dldCA9XFx0XFx0aXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo0NjA6XFx0LnNuYXRfaGFuZGxlciA9XFx0XFx0dWRwX3NuYXRfaGFuZGxlcixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6NDYxOlxcdC5kbmF0X2hhbmRsZXIgPVxcdFxcdHVkcF9kbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTQ2Mi1cXHQuc3RhdGVfdHJhbnNpdGlvbiA9XFx0dWRwX3N0YXRlX3RyYW5zaXRpb24sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1MDM9aW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNTA0OmlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNTA1LVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTg5PWludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTU5MDppcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5MS1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjUuMTU0ODA1MDkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDk1NzQ2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSUNNUCBhbmQgQ29ubmVjdGlvbiBUcmFja2luZyBpbiB0aGUgSVBWUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBJUFZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYSBmZXcga2V5IGVudHJ5IHBvaW50czogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBhbmQgdGhlIE5BVCBoYW5kbGVycyBmb3IgdmFyaW91cyBwcm90b2NvbHMgbGlrZSBTQ1RQLCBUQ1AsIGFuZCBVRFAuIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYC5cblxuQnV0IHRoZW4sIGNvbnNpZGVyaW5nIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBob29rcyBgaXBfdnNfaW5faG9va2AgYW5kIGBpcF92c19vdXRfaG9va2AgYXJlIGNhbGxlZCBmb3IgKmV2ZXJ5KiBwYWNrZXQuIFRoZXkncmUgb24gdGhlIGhvdCBwYXRoLCBtYWtpbmcgdGhlbSBhIGxlc3MgdGFyZ2V0ZWQgYXBwcm9hY2ggZm9yIHRoZXNlIHNwZWNpZmljIGNoYW5nZXMgcmVsYXRlZCB0byBJQ01QLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgbW9yZSBmb2N1c2VkIG9uIGhhbmRsaW5nIElDTVAgcGFja2V0cyB3aXRoaW4gdGhvc2UgaG9va3MsIHNwZWNpZmljYWxseSBpbiBgaXBfdnNfaW5faWNtcGAgYW5kIGBpcF92c19vdXRfaWNtcGAuXG5cblNpbmNlIHRoZXNlIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBJIGNhbid0IGRpcmVjdGx5IGxpc3QgdGhlbSAqdW5sZXNzKiB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSAoa2FsbHN5bXMpLiBCdXQgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucywgYXNzdW1pbmcgdGhleSBhcmUgaW4ga2FsbHN5bXMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgZmluZSB0byBsaXN0LiBUaHVzLCBJJ2xsIHByaW9yaXRpemUgZnV6emluZyBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYW5kIGBpcF92c19vdXRfaWNtcF92NmAgYmVjYXVzZSB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgSUNNUCBoYW5kbGluZy4gVGhhdCdzIGJldHRlciB0aGFuIGRpcmVjdGx5IGZ1enppbmcgdGhlIGhvb2tzIHRoZW1zZWx2ZXMuXG5cbkkgY29uZmlybWVkIHRoZXNlIGFyZSBpbmRlZWQganVzdCBgc3RhdGljIGludCBpcF92c19pbl9pY21wKC4uLilgIGFuZCBgc3RhdGljIGludCBpcF92c19vdXRfaWNtcCguLi4pYCwgc28gdGhleSBhcmUgKm5vdCogaW5saW5lIGFuZCAqd2lsbCogYmUgaW4ga2FsbHN5bXMuXG5cblNvLCB0aGUgZnV6emluZyBsaXN0IHdpbGwgYmU6XG5cbmBpcF92c19pbl9pY21wYFxuYGlwX3ZzX291dF9pY21wYFxuYGlwX3ZzX2luX2ljbXBfdjZgXG5gaXBfdnNfb3V0X2ljbXBfdjZgXG5gaXBfdnNfZm9yd2FyZF9pY21wYFxuYGlwX3ZzX2ljbXBfeG1pdGBcbmBpcF92c19pY21wX3htaXRfdjZgXG5gc2N0cF9zbmF0X2hhbmRsZXJgXG5gc2N0cF9kbmF0X2hhbmRsZXJgXG5gdGNwX3NuYXRfaGFuZGxlcmBcbmB0Y3BfZG5hdF9oYW5kbGVyYFxuYHVkcF9zbmF0X2hhbmRsZXJgXG5gdWRwX2RuYXRfaGFuZGxlcmBcblxuSSdsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbiBgSVBfVlNfUFJPVE9fVENQYCBjb25maWc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjM0LjIwNDM4Mjg4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MjM1NDA1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MzUuNTQ2NzQzNzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTYxOTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGZvciB0aGUgRmxhZzogQSBCcmllZiBEaWFnbm9zdGljKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGRlZmluZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBjb25zdGFudCwgYW5kIHdpdGhvdXQgaXQsIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgc2VydmVyIGZ1bmN0aW9uYWxpdHkgd29uJ3Qgd29yayBhcyBleHBlY3RlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIHdoZXRoZXIgaXQgYmUgZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIG1ldHJpY3MsIG9yIGRldmVsb3Bpbmcgc29tZSBuZXcgcmVsYXRlZCBmZWF0dXJlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaW4gcGxhY2UuIFNvLCBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgaXMgYSBnb29kIGZpcnN0IHN0ZXAgdG8gYXZvaWQgc3Bpbm5pbmcgbXkgd2hlZWxzIGxhdGVyLiBJdCdzIHRoZSBlcXVpdmFsZW50IG9mIGNoZWNraW5nIHRoYXQgeW91ciB0b29scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBiZWZvcmUgc3RhcnRpbmcgd29yayBvbiBhIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MzguOTQyOTM4ODAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIxMTI0MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjM5LjIwNTA1ODY5MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc3NTg0MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIEkgc2F3IHNvbWUgcmVsYXRlZCBjb25zdGFudHMgZWFybGllci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZS4gU3BlY2lmaWNhbGx5LCBJIHNlZW0gdG8gcmVjYWxsIGVuY291bnRlcmluZyBgSVBfVlNfUFJPVE9fQUhgIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIHByZXZpb3VzIGNvZGUgSSB3YXMgYW5hbHl6aW5nLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhlaXIgcHJlc2VuY2UgYW5kIGNvbnRleHQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6NDIuMzgyNjQ1MTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI4MzUxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTo0Mi40NDg5MzQ3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNDI3NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFJlZ2V4IENoZWNrIFx1MDAyNiBDb250ZXh0dWFsIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgbXkgZmlyc3QgaW5zdGluY3Qgd2FzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHN5bnRheCwgdGhpbmtpbmcgaXQgd2FzIHByb2JhYmx5IGEgc2ltcGxlIHJlZ2V4IG1hdGNoLCBsaWtlbHkgc3RhcnRpbmcgd2l0aCBgXmNvbmZpZyBgLiBUaGF0IGZlZWxzIHJpZ2h0IGdpdmVuIHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQncyBob3cgaXQncyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29kZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSBiZWNhdXNlLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBJUF9WU19QUk9UT2Agc3ltYm9sIGlzIGRlZmluZWQgdGhlcmUuIFRoYXQncyBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gYWZ0ZXIsIGFuZCBpdCdzIGEgdmVyeSBjb21tb24gcGF0dGVybiB0byB1c2UgS2NvbmZpZyBmaWxlcyB0byBjb25maWd1cmUgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjQ2Ljc3MzIxMjI1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMjY0MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcXHRJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkxOmNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkyOlxcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjk0OmNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk1LVxcdGJvb2wgXFxcIkVTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTAwOmNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkFIIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjQ3LjEyNjQ4MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5NDc3MTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIElQVlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aHJvdWdoIHRoaXMgYW5kIGl0J3MgcHJldHR5IGNsZWFyOiBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgYXJlIGRlZmluaXRlbHkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSBuZWVkIHRvIGVuYWJsZSBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCB0byBnZXQgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIG5lZWQgdG8gY29uc2lkZXIuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgSVBWUyBmaWxlczogYGlwX3ZzX2FwcC5jYCwgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBgaXBfdnNfcHJvdG9fdWRwLmNgLCBhbmQgYGlwX3ZzX3htaXQuY2AuIFRoZXNlIGFyZSBhbGwgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9WU2AsIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZmlsZXMgZGVwZW5kIG9uIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgY29uZmlncy5cblxuVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBJUFZTIGxvZ2ljLCBwYXJ0aWN1bGFybHkgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gYmVpbmcgaW50cm9kdWNlZCwgYW5kIGl0J3MgcGxheWluZyB3aXRoIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzICpyZWFjaGFibGUqIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IOKAkyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBgdWRwX2RuYXRfaGFuZGxlcmAsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfbmF0X2ljbXBfdjZgLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIGNoYW5nZXM6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBOb3csIGxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NjQ0LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTo1Ni40MjEyNTU3NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkyOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJzY3RwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwic2N0cF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVBWUyBsb2dpYyBmb3IgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCBhbHRlcnMgcGFja2V0IG1hbmdsaW5nIG9mZnNldHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInNjdHBfc25hdF9oYW5kbGVyXCIsXG4gICAgXCJzY3RwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 04:13:28 +0000 UTC FinishedAt: 2026-07-21 04:39:58 +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": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_in_icmp", "ip_vs_out_icmp", "ip_vs_in_icmp_v6", "ip_vs_out_icmp_v6", "ip_vs_forward_icmp", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6", "sctp_snat_handler", "sctp_dnat_handler", "tcp_snat_handler", "tcp_dnat_handler", "udp_snat_handler", "udp_dnat_handler", "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3NjdHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3NjdHBfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt1ZHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2I0MzQzYjA4MTBkOTZmMzlmNWQwZjdjYzM2Y2NiMWE2ZjBiZmNjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDA0OjM4OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uYzY4NGE0NmNlMTVhNTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyAmIzQzOzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCAmIzQzOzE5NzQsOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTk4Niw4ICYjNDM7MTk4OSw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG5AQCAtMjA1OSwxNSAmIzQzOzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTYsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbiYjNDM7XHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBMT0NBTF9PVVQgPyAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4mIzQzO31cbiYjNDM7XG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuJiM0MztcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uMjFkYjZhZjIyMGViMDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMiBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDUgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXHQgPSBpcHY2X2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcbi1cdHVuc2lnbmVkIGludCBvZmZzXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cbiBcdGludCBwcm90b2NvbDtcbiBcdHN0cnVjdCBpY21wNmhkciAqaWNtcGg7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcbi1cdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xuJiM0MztcdHN0cnVjdCBpcHY2aGRyICpjaWg7XG4gXG4tXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4tXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpO1xuLVx0b2ZmcyA9IGljbXBfb2Zmc2V0ICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuLVx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdG9mZik7XG4mIzQzO1x0Y2loID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGNpcGgtXHUwMDNlb2ZmKTtcbiBcbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4mIzQzO1x0cHJvdG9jb2wgPSBjaXBoLVx1MDAzZXByb3RvY29sO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoIWNpcGgtXHUwMDNlZnJhZ29mZnMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbiYjNDM7XHQgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHtcbiYjNDM7XHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBjaXBoLVx1MDAzZWxlbik7XG4gXG4gXHRcdElQX1ZTX0RCRygxMSwgXCYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXG5AQCAtMTAxMSwxOSAmIzQzOzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIGljbXBfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRvZmYsXG4gXHRcdFx0XHRcdCAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTtcbi1cdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlaGVhZCAmIzQzOyBpY21wX29mZnNldDtcbiYjNDM7XHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRvZmY7XG4gXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XCYjMzQ7KTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlwmIzM0Oyk7XG4gfVxuICNlbmRpZlxuQEAgLTEwMzMsMzYgJiM0MzsxMDI3LDM4IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiAgKi9cbiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciAqc25ldCxcbi1cdFx0XHRcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGlobCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuJiM0MztcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFx0dW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QO1xuJiM0MztcdHVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtXHUwMDNlbGVuO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKVxuJiM0MztcdFx0Y3RvZmYgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpO1xuJiM0MztcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdGlmIChhZiA9PSBBRl9JTkVUNilcbi1cdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xuJiM0MztcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgJiM0MzsxMDg2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdEN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLlxuICAqL1xuIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgJiM0MzsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XG4gXHRcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXG4gXHRcdFx0cmV0dXJuIE5GX1NUT0xFTjtcbiYjNDM7XHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwdnNoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwmIzM0OyxcbiBcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4tXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuJiM0MztcdFx0ICBcdTAwMjZpcHZzaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXB2c2gtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTEzNiw3ICYjNDM7MTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTtcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKGNpaCA9PSBOVUxMKVxuJiM0MztcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbiBcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTE1OSw5ICYjNDM7MTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNzIsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQxLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MCw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NzUsMTcgJiM0MzsxNzcxLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWhsID0gaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTE4OTgsMTAgJiM0MzsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuJiM0MztcdGlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlobCwgSVBQUk9UT19JQ01QLCBBRl9JTkVUKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCRygxLCBcJiMzNDtJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwmIzM0Oyxcbi1cdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4mIzQzO1x0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMTk3Miw3ICYjNDM7MTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbiBcdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDY0LDYgJiM0MzsyMDY0LDE4IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbkBAIC0yMDczLDcgJiM0MzsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxuIFx0XHRvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuIFxuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbiYjNDM7XHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZjaXBoKTtcbiBcbiBvdXQ6XG4gXHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuQEAgLTIxNTIsNyAmIzQzOzIxNjUsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcbiBcdFx0XHRpbnQgcmVsYXRlZDtcbiBcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLFxuLVx0XHRcdFx0XHRcdCAgICBob29rbnVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjg4LDYgJiM0MzsyMzAxLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovXG5AQCAtMjI5NywxMCAmIzQzOzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgJiM0MzsyMzIzLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gI2VuZGlmXG4gXHR9XG4gXG4tXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2spO1xuJiM0MztcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgJiM0MzsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2Vzb3VyY2UgIT0gY3AtXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbiYjNDM7XHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7XG4mIzQzO1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZWRlc3QgIT0gY3AtXHUwMDNlZHBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZik7XG4gXHRjbXAgPSBzaC1cdTAwM2VjaGVja3N1bTtcbiBcdHZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTtcbiBcbiBcdGlmICh2YWwgIT0gY21wKSB7XG4gXHRcdC8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqL1xuLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbmluZGV4IGY4NmI3NjNlZmNjNGRjLi45OWEyODZmZGM5MGM2NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbiYjNDM7XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjtcbiYjNDM7XHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbiYjNDM7XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVENQLCBhZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgJiM0MzsyNSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjtcbiYjNDM7XHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjU0LDcgJiM0MzsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiBcdHN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDtcbiBcbi1cdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdWRwaG9mZiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuJiM0MztcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXVoLVx1MDAzZWNoZWNrKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uYzIzNDAxYzc4OWRlMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiw4ICYjNDM7MTUwMiw5IEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICAqL1xuIGludFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBydGFibGVcdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4gXHRpbnQgcmM7XG5AQCAtMTUxNSw3ICYjNDM7MTUxNiw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICYjNDM7MTUzNCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuJiM0MztcdFx0XHRcdCAgIE5VTEwsIGNpcGgpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBza2JfcnRhYmxlKHNrYik7XG5AQCAtMTU2NSwxMyAmIzQzOzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdH1cbiBcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7XG4mIzQzO1x0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsOCAmIzQzOzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuQEAgLTE2MDAsNyAmIzQzOzE2MDIsNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICYjNDM7MTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgaXB2c2gsIDAsIHJ0X21vZGUpO1xuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgY2lwaCwgMCwgcnRfbW9kZSk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpO1xuQEAgLTE2NDksMTMgJiM0MzsxNjUxLDEzIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHR9XG4gXG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBjaXBoKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9yd2FyZF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7c2N0cF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7c2N0cF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX3NuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dWRwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQVlMgbG9naWMgZm9yIGhhbmRsaW5nIGNoZWNrc3VtcyBhbmQgTkFUIGZvciBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cy4gSXQgaW50cm9kdWNlcyBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBhbmQgYWx0ZXJzIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNDM0M2IwODEwZDk2ZjM5ZjVkMGY3Y2MzNmNjYjFhNmYwYmZjYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwNDozODoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDQxN2ZmNTFmNjJmYzhlLi5jNjg0YTQ2Y2UxNWE1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0yNSw3ICYjNDM7MjUsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci5oJmd0OwkJLyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwkJCS8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqLwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaXA2X2ZpYi5oJmd0OwogI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oJmd0OwogI2VuZGlmCkBAIC0xOTcyLDggJiM0MzsxOTc0LDkgQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsCi0JCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwomIzQzOwkJICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE5ODYsOCAmIzQzOzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQkgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwKLQkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLAomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTIwNTksMTUgJiM0MzsyMDYzLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiB9CiAKIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7CiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZik7CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTsKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKLQogc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSkKIHsKIAlfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07CkBAIC0yMDkzLDYgJiM0MzsyMDk2LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZikKJiM0Mzt7CiYjNDM7CS8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqLwomIzQzOwlpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyogTE9DQUxfT1VUID8gKi8KJiM0MzsJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi8KJiM0MzsJaWYgKGFmID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKJiM0Mzt9CiYjNDM7CiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0zNjcsNyAmIzQzOzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjIxZGI2YWYyMjBlYjA5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfQogCiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQomIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CkBAIC05MjQsMTMgJiM0Mzs5MjQsMTIgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqIC0gaW5vdXQ6IDE9aW4tJmd0O291dCwgMD1vdXQtJmd0O2luCiAgKi8KIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtJmd0O2lobCo0OwotCXN0cnVjdCBpY21waGRyICppY21waAkgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKLQkJCQkJCSAgICAgIGljbXBfb2Zmc2V0KTsKJiM0MzsJc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiAJc3RydWN0IGlwaGRyICpjaXBoCSA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggJiM0MzsgMSk7CiYjNDM7CXVuc2lnbmVkIGludCBjb2ZmID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwogCiAJaWYgKGlub3V0KSB7CiAJCWlwaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CkBAIC05NTcsNDggJiM0Mzs5NTYsNDUgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7Y2hlY2tzdW0gPSAwOwotCWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpOwomIzQzOwlpY21waC0mZ3Q7Y2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBpcHY2aGRyICppcGgJID0gaXB2Nl9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvZmZzCSA9IDA7IC8qIGhlYWRlciBvZmZzZXQqLwogCWludCBwcm90b2NvbDsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoOwotCXN0cnVjdCBpcHY2aGRyICpjaXBoOwotCXVuc2lnbmVkIHNob3J0IGZyYWdvZmZzOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqY2loOwogCi0JaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKLQlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpOwotCW9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTsKLQljaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwomIzQzOwlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRvZmYpOwomIzQzOwljaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O29mZik7CiAKLQlwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO29mZnMsIC0xLCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKJiM0MzsJcHJvdG9jb2wgPSBjaXBoLSZndDtwcm90b2NvbDsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKLQkJY2lwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pbjY7CiAJfSBlbHNlIHsKIAkJaXBoLSZndDtkYWRkciA9IGNwLSZndDtkYWRkci5pbjY7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmICghZnJhZ29mZnMgJmFtcDsmYW1wOyAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkJCSAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkgewotCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7CiYjNDM7CWlmICghY2lwaC0mZ3Q7ZnJhZ29mZnMgJmFtcDsmYW1wOwomIzQzOwkgICAgKHByb3RvY29sID09IElQUFJPVE9fVENQICB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAomIzQzOwkgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHsKJiM0MzsJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7bGVuKTsKIAogCQlJUF9WU19EQkcoMTEsICYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCSAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksCkBAIC0xMDExLDE5ICYjNDM7MTAwNywxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gaWNtcF9vZmZzZXQsCiYjNDM7CQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHRvZmYsCiAJCQkJCSAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKLQlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7aGVhZCAmIzQzOyBpY21wX29mZnNldDsKJiM0MzsJc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgJiM0MzsgdG9mZjsKIAlza2ItJmd0O2NzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCiAJaWYgKGlub3V0KQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NiYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLAotCQkJICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC0mZ3Q7b2ZmLAogCQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2JiMzNDspOwogfQogI2VuZGlmCkBAIC0xMDMzLDM2ICYjNDM7MTAyNywzOCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAgKi8KIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXVuaW9uIG5mX2luZXRfYWRkciAqc25ldCwKLQkJCQlfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CQkJCXN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsCi0JCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiYjNDM7CQkJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CXVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtJmd0O2xlbjsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCR19CVUYoMSwgJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxuJiMzNDssCiAJCQkgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKQotCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVURQIHx8CiYjNDM7CSAgICBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApCiYjNDM7CQljdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7CiYjNDM7CWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKQogCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJaWYgKGFmID09IEFGX0lORVQ2KQotCQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgY2lwaCk7CiAJZWxzZQogI2VuZGlmCi0JCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxKTsKJiM0MzsJCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmKTsKIAogCWlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtJmd0O2lwdnMsIGFmLCBza2IsIGhvb2tudW0pKQogCQlnb3RvIG91dDsKQEAgLTEwOTAsOSAmIzQzOzEwODYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqCUN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCQkgIHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTExMDcsMTcgJiM0MzsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXB2c2gtJmd0O2xlbjsKJiM0MzsJb2Zmc2V0ID0gaXB2c2gtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwdnNoLSZndDtzYWRkci5pcCwgJmFtcDtpcHZzaC0mZ3Q7ZGFkZHIuaXApOwogCiAJLyoKIAkgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLgpAQCAtMTEzNiw3ICYjNDM7MTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJLyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi8KIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKGNpaCA9PSBOVUxMKQomIzQzOwlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQogCQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KIAogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTE1OSw5ICYjNDM7MTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFjcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCXNuZXQuaXAgPSBpcGgtJmd0O3NhZGRyOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY2loLSZndDtwcm90b2NvbCwgY3AsCi0JCQkJICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTsKJiM0MzsJc25ldC5pcCA9IGlwdnNoLSZndDtzYWRkci5pcDsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAomIzQzOwkJCQkgICAgaG9va251bSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTE3NCw3ICYjNDM7MTE3Miw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAogCSpyZWxhdGVkID0gMTsKIAlpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC0mZ3Q7bGVuLCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwpAQCAtMTIxNyw5ICYjNDM7MTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42OwotCW9mZnNldCA9IGNpcGgubGVuOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNpcGgucHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgb2Zmc2V0LCBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsCiYjNDM7CQkJCSAgICBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKIH0KICNlbmRpZgogCkBAIC0xNTQ1LDcgJiM0MzsxNTQxLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXQKICNlbmRpZgogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwotCQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwgaG9va251bSk7CiYjNDM7CQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwKJiM0MzsJCQkJCQkgICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0xNzUzLDkgJiM0MzsxNzUwLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqLwogc3RhdGljIGludAogaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAotCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTE3NzUsMTcgJiM0MzsxNzcxLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7CiAJCWlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpCiAJCQlyZXR1cm4gTkZfU1RPTEVOOwomIzQzOwkJaWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXBoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCUlQX1ZTX0RCRygxMiwgJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC0mZ3Q7JXBJNFxuJiMzNDssCiAJCSAgaWMtJmd0O3R5cGUsIG50b2hzKGljbXBfaWQoaWMpKSwKLQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aXBoLSZndDtkYWRkcik7CiYjNDM7CQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCwgJmFtcDtpcGgtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTE4OTgsMTAgJiM0MzsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAl2ZXJkaWN0ID0gTkZfRFJPUDsKIAogCS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwotCWlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSAmYW1wOyZhbXA7IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkgewomIzQzOwlpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlobCwgSVBQUk9UT19JQ01QLCBBRl9JTkVUKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCRygxLCAmIzM0O0luY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXG4mIzM0OywKLQkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKJiM0MzsJCQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTk3Miw3ICYjNDM7MTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLSZndDtwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtJmd0O3Byb3RvY29sIHx8CiAJICAgIElQUFJPVE9fU0NUUCA9PSBjaWgtJmd0O3Byb3RvY29sKQogCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIG9mZnNldCwgaG9va251bSwKJiM0MzsJCQkJICAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIwNjQsNiAmIzQzOzIwNjQsMTggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwomIzQzOwlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC0mZ3Q7bGVuLCBJUFBST1RPX0lDTVBWNiwKJiM0MzsJCQkJCSBBRl9JTkVUNikpIHsKJiM0MzsJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KJiM0MzsJCUlQX1ZTX0RCRygxLCAmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXG4mIzM0OywKJiM0MzsJCQkgICZhbXA7aXBoLSZndDtzYWRkcik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCS8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqLwogCWlwX3ZzX2luX3N0YXRzKGNwLCBza2IpOwogCkBAIC0yMDczLDcgJiM0MzsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbCkKIAkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi8KIAotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIG9mZnNldCwgaG9va251bSwKJiM0MzsJCQkJICAgICAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIxNTIsNyAmIzQzOzIxNjUsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwogCQkJaW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyZWxhdGVkLAotCQkJCQkJICAgIGhvb2tudW0pOwomIzQzOwkJCQkJCSAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMjI4OCw2ICYjNDM7MjMwMSw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS0mZ3Q7bmV0KTsKJiM0MzsJc3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyOwogCWludCByOwogCiAJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLwpAQCAtMjI5NywxMCAmIzQzOzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc3RhdGUtJmd0O3BmID09IE5GUFJPVE9fSVBWNCkgewogCQlpZiAoaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sICE9IElQUFJPVE9fSUNNUCkKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgJmFtcDtpcGhkcik7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAl9IGVsc2UgewotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7Ci0KIAkJaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKIAogCQlpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpCkBAIC0yMzEwLDcgJiM0MzsyMzIzLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsICZhbXA7ciwgc3RhdGUtJmd0O2hvb2spOwomIzQzOwlyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsICZhbXA7ciwgc3RhdGUtJmd0O2hvb2ssICZhbXA7aXBoZHIpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogCiBzdGF0aWMgaW50CiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQl1bnNpZ25lZCBpbnQgc2N0cGhvZmYpOwomIzQzOwkJc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O3NvdXJjZSAhPSBjcC0mZ3Q7dnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8CkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgc2N0cGhvZmYpKQomIzQzOwkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7CiYjNDM7CXNjdHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0Mzsgc2N0cGhvZmY7CiAKIAkvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovCiAJaWYgKHNjdHBoLSZndDtkZXN0ICE9IGNwLSZndDtkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE4NywxOSAmIzQzOzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQl1bnNpZ25lZCBpbnQgc2N0cGhvZmYpCiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKJiM0MzsJdW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLSZndDtsZW47CiAJc3RydWN0IHNjdHBoZHIgKnNoOwogCV9fbGUzMiBjbXAsIHZhbDsKIAomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKJiM0MzsJCXJldHVybiAxOwogCXNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZik7CiAJY21wID0gc2gtJmd0O2NoZWNrc3VtOwogCXZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTsKIAogCWlmICh2YWwgIT0gY21wKSB7CiAJCS8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqLwotCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCSYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCkBAIC0yOSw3ICYjNDM7MjksNyBAQAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTsKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIAogc3RhdGljIGludAogdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7CiYjNDM7CXRjcGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyB0Y3Bob2ZmOwogCXRjcGgtJmd0O3NvdXJjZSA9IGNwLSZndDt2cG9ydDsKIAogCS8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovCkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCF0Y3BfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHRjcGhvZmYpKQomIzQzOwkJaWYgKCF0Y3BfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKgpAQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCQlwYXlsb2FkX2NzdW0gPSB0cnVlOwogCX0KIAotCXRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7CiYjNDM7CXRjcGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyB0Y3Bob2ZmOwogCXRjcGgtJmd0O2Rlc3QgPSBjcC0mZ3Q7ZHBvcnQ7CiAKIAkvKgpAQCAtMzAyLDQxICYjNDM7MzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAogc3RhdGljIGludAogdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCSAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZikKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewotCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCXNrYi0mZ3Q7Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwgMCk7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgSVBQUk9UT19UQ1AsCi0JCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gdGNwaG9mZiwKLQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovCi0JCWJyZWFrOwomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC0mZ3Q7bGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7CiYjNDM7CQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtJmd0O29mZiwKJiM0MzsJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0yNSw3ICYjNDM7MjUsNyBAQAogCiBzdGF0aWMgaW50CiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTsKJiM0MzsJICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIAogc3RhdGljIGludAogdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE1NSw3ICYjNDM7MTU1LDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdWRwaG9mZikpCiYjNDM7CQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjsKJiM0MzsJdWRwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHVkcGhvZmY7CiAJdWRwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyoKQEAgLTIzOCw3ICYjNDM7MjM4LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdWRwaG9mZikpCiYjNDM7CQlpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNTQsNyAmIzQzOzI1NCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjsKJiM0MzsJdWRwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHVkcGhvZmY7CiAJdWRwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7CiAJc3RydWN0IHVkcGhkciBfdWRwaCwgKnVoOwogCi0JdWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKJiM0MzsJdWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBpcGgtJmd0O2xlbiwgc2l6ZW9mKF91ZHBoKSwgJmFtcDtfdWRwaCk7CiAJaWYgKHVoID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaWYgKHVoLSZndDtjaGVjayAhPSAwKSB7Ci0JCXN3aXRjaCAoc2tiLSZndDtpcF9zdW1tZWQpIHsKLQkJY2FzZSBDSEVDS1NVTV9OT05FOgotCQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwKLQkJCQkJCSBza2ItJmd0O2xlbiAtIHVkcGhvZmYsIDApOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKLQkJCWlmIChhZiA9PSBBRl9JTkVUNikgewotCQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJCSAgICAmYW1wO2lwdjZfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkJICAgIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwKLQkJCQkJCSAgICBJUFBST1RPX1VEUCwKLQkJCQkJCSAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLQkJCQlpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O2RhZGRyLAotCQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgICAgaXBfaGRyKHNrYiktJmd0O3Byb3RvY29sLAotCQkJCQkJICAgICAgc2tiLSZndDtjc3VtKSkgewotCQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJCWJyZWFrOwotCQl9CiYjNDM7CWlmICghdWgtJmd0O2NoZWNrKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVURQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggOWZlZjQzMzVkYTEzZmQuLmMyMzQwMWM3ODlkZTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKQEAgLTE1MDIsOCAmIzQzOzE1MDIsOSBAQCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKICAqLwogaW50CiBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiYjNDM7CQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCXVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgcnRhYmxlCSpydDsJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KIAlpbnQgcmM7CkBAIC0xNTE1LDcgJiM0MzsxNTE2LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpOwomIzQzOwkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTsKIAkJZWxzZQogCQkJcmMgPSBORl9BQ0NFUFQ7CiAJCS8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqLwpAQCAtMTUzMyw3ICYjNDM7MTUzNCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKIAkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLSZndDtpcHZzLCBjcC0mZ3Q7YWYsIHNrYiwgY3AtJmd0O2Rlc3QsIGNwLSZndDtkYWRkci5pcCwgcnRfbW9kZSwKLQkJCQkgICBOVUxMLCBpcGgpOwomIzQzOwkJCQkgICBOVUxMLCBjaXBoKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gc2tiX3J0YWJsZShza2IpOwpAQCAtMTU2NSwxMyAmIzQzOzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAl9CiAKIAkvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovCi0JaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKQomIzQzOwlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKQogCQlnb3RvIHR4X2Vycm9yOwogCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTsKJiM0MzsJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDggJiM0MzsxNTg4LDkgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogaW50CiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSwKLQkJc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaCkKJiM0MzsJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLAomIzQzOwkJc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiAJaW50IHJjOwpAQCAtMTYwMCw3ICYjNDM7MTYwMiw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovCiAJaWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7CiAJCWlmIChjcC0mZ3Q7cGFja2V0X3htaXQpCi0JCQlyYyA9IGNwLSZndDtwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpOwomIzQzOwkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTsKIAkJZWxzZQogCQkJcmMgPSBORl9BQ0NFUFQ7CiAJCS8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqLwpAQCAtMTYxNyw3ICYjNDM7MTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKIAkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLSZndDtpcHZzLCBjcC0mZ3Q7YWYsIHNrYiwgY3AtJmd0O2Rlc3QsCi0JCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7CiYjNDM7CQkJCSAgICAgICZhbXA7Y3AtJmd0O2RhZGRyLmluNiwgTlVMTCwgY2lwaCwgMCwgcnRfbW9kZSk7CiAJaWYgKGxvY2FsICZsdDsgMCkKIAkJZ290byB0eF9lcnJvcjsKIAlydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpOwpAQCAtMTY0OSwxMyAmIzQzOzE2NTEsMTMgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAl9CiAKIAkvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovCi0JaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKQomIzQzOwlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKQogCQlnb3RvIHR4X2Vycm9yOwogCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTsKJiM0MzsJaXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNrc3VtIFZhbGlkYXRpb24gQ2hhbmdlcyBpbiBJUFZTOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIElQVlMgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCB3b3JrLCBkZWZpbml0ZWx5IHdpdGhpbiByZWFjaCBvZiB0aGUga2VybmVsLiBJdOKAmXMgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBmdW5jdGlvbnMgbGlrZSBgaXBfdnNfY2hlY2tzdW1fbmVlZGVkYCBhbmQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBidW5jaCBvZiBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cyDigJMgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGhhbmRsZV9yZXNwb25zZV9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFuZCB0aGUgdmFyaW91cyBjaGVja3N1bSBjaGVjayBmdW5jdGlvbnMgZm9yIHNjdHAsIHRjcCBhbmQgdWRwLiBJdCBhbHNvIHRvdWNoZXMgYGlwX3ZzX2ljbXBfeG1pdGAgYW5kIGBpcF92c19pY21wX3htaXRfdjZgLgoKS25vd2luZyBJUFZTIGlzIGEgbG9hZCBiYWxhbmNlciB0aGF0IHNpdHMgb24gdG9wIG9mIG5ldGZpbHRlciwgdGhpcyBpcyBjbGVhcmx5IGZ1bmN0aW9uYWwgY29kZSBhbmQgSSB0aGluayBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoZWNrc3VtcyBoZXJlLCB0aGF0IGFsd2F5cyB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0lQX1ZTYCBvYnZpb3VzbHkgZW5hYmxlcyB0aGUgY29yZSBJUFZTIGZ1bmN0aW9uYWxpdHkuIFdl4oCZdmUgZ290IGBDT05GSUdfSVBfVlNfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19TQ1RQYCBmb3IgU0NUUC4gVENQIGFuZCBVRFAgYXJlIHByZXR0eSBtdWNoIGJha2VkIGluIGlmIElQVlMgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEnigJltIGp1c3Qgd29uZGVyaW5nIGFib3V0IE5BVCBzdXBwb3J0LiBJcyB0aGVyZSBhIHNlcGFyYXRlIGBDT05GSUdfSVBfVlNfTkFUYCBvciBpcyBpdCBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBJUFZTIGlzIGVuYWJsZWQuIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgbW9yZSBjbG9zZWx5IG9uIHRoYXQgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIElQVlMuIEkmIzM5O20gdGhpbmtpbmcsIGJ5IGV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZpbGUsIEkgY2FuIGdldCBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0byBsZXZlcmFnZSBpdCB3aXRoaW4gbXkgY3VycmVudCB3b3JrLCBvciBwbGFuIGZ1cnRoZXIgZGV2ZWxvcG1lbnQvdHJvdWJsZXNob290aW5nLiBJIGV4cGVjdCB0byBmaW5kIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGRpZmZlcmVudCBJUFZTIG1vZHVsZXMsIGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZywgc2NoZWR1bGluZyBhbGdvcml0aG1zLCBhbmQgYW55IGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGlzIHRoZSBmaXJzdCwgYW5kIGFyZ3VhYmx5IG1vc3QgaW1wb3J0YW50LCBzdGVwLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2VybmVsIEludGVybmFscyBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NiBhbmQgU0NUUCBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgYGdyZXBgIGZvciBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQgd2lsbCBxdWlja2x5IGJyaW5nIHVwIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IElQdjYgdmVyc3VzIFNDVFAgdHJhZmZpYyBpcyBoYW5kbGVkIGJ5IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgU0NUUCBoYW5kbGluZyBoYXMgdGhlIHNhbWUgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcyBUQ1Agb3IgVURQLCBjb25zaWRlcmluZyB0aGUgbXVsdGktaG9taW5nIGFzcGVjdCBvZiBTQ1RQLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGFzc29jaWF0aW9uIGlkZW50aWZpZXJzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGZsb3cgZGF0YS4gVGhpcyBncmVwIGlzIGEgZ29vZCBpbml0aWFsIHNjYW4gdG8gdW5kZXJzdGFuZCB0aGUgYmFzaWMgYXJjaGl0ZWN0dXJlIGFuZCBxdWlja2x5IGxvY2F0ZSBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlNfSVBWNnxjb25maWcgSVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0byB0aGUgY2hhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgSVBfVlNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFJhdGhlciB0aGFuIG1ldGljdWxvdXNseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbGV0JiMzOTtzIGxldmVyYWdlIHRoZSBLY29uZmlnIHN5c3RlbS4gQSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggc2VlbXMgbW9zdCBlZmZpY2llbnQgcmlnaHQgbm93LiBJJiMzOTtsbCBqdXN0IGdyZXAgZm9yIHRoZSBzdHJpbmcgYGNvbmZpZyBJUF9WU2AgaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBub3Qgb3Zlcmx5IGNvbmNlcm5lZCBhYm91dCBhbiBleGFjdCBtYXRjaCBpbml0aWFsbHk7IGEgYnJvYWRlciBzZWFyY2ggd2lsbCBob3BlZnVsbHkgcXVpY2tseSByZXZlYWwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgZmlsdGVyIG91dCB0aGUgaXJyZWxldmFudCByZXN1bHRzIGxhdGVyIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIElQVlMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMgZGVmaW5lZCB3aXRoaW4gdGhpcyBLY29uZmlnIGlzIGNydWNpYWwgZm9yIGFueSBJUFZTLXJlbGF0ZWQgcHJvamVjdCwgYmUgaXQgb3B0aW1pemF0aW9uLCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBidWlsZGluZyBhIGN1c3RvbSBrZXJuZWwuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyB3ZSBoYXZlIHRvIHR1bmUgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgYmVoYXZpb3IuIFRoaXMgS2NvbmZpZyBmaWxlIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBJUFZTIGNvbmZpZ3VyYXRpb24gZWNvc3lzdGVtLCBzbyBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGVhY2ggc3ltYm9sLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTEwMD1jb25maWdcdElQX1ZTX1BST1RPX0FIXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xNDc9Y29uZmlnXHRJUF9WU19XTENcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTY3OmNvbmZpZyAgSVBfVlNfT1ZGXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTc4PWNvbmZpZ1x0SVBfVlNfTEJMQ1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE5Mjpjb25maWcgIElQX1ZTX0xCTENSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXHR0cmlzdGF0ZSBcJiMzNDtsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHdpdGggcmVwbGljYXRpb24gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1Mjpjb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkRlYnVnZ2luZyBhIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSBzZWUgYSByZWZlcmVuY2UgdG8gYElQX1ZTX0lQVjZgLiBOb3csIHdoZXJlIGluIHRoZSB3b3JsZCBpcyB0aGF0IGNvbnN0YW50IGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgbWFjcm8gb3IgdmFyaWFibGUgaXMgZGVjbGFyZWQuIEl0IGNvdWxkIGJlIGluIGEgaGVhZGVyIGZpbGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZhbHVlIHRvIGNvbXByZWhlbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNlY3Rpb24gb2YgdGhlIHByb2dyYW0uIElzIGl0IGEgZmxhZywgYSBudW1lcmljYWwgY29uc3RhbnQ/IFRoaXMgaGFzIGJpZyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFY2IGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIElQdjYgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkLiBJZiBJIGNhbiYjMzk7dCBmaW5kIGl0LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkZWVwZXIgZGlnZ2luZyB0byB0cmFjayBkb3duIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI3PWlmIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1x0SVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgSVBWU1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NTQ9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTYtLyogV2UgbmVlZCBhbiBhZGRyc3RybGVuIHRoYXQgd29ya3Mgd2l0aCBvciB3aXRob3V0IHY2ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy01OC0jZGVmaW5lIElQX1ZTX0FERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTY2PXN0YXRpYyB1MzIgaXBfdnNfY29ubl9oYXNoa2V5KHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZiwgdW5zaWduZWQgaW50IHByb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTcyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE3NC1cdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9OTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19iaW5kX3htaXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtOTM0LVx0Y2FzZSBJUF9WU19DT05OX0ZfVFVOTkVMOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNi1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6OTU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05NTgtc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdF92NihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDY2PXZvaWQgaXBfdnNfdHJ5X2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDk5LVx0XHRjcC1cdTAwM2VwYWNrZXRfeG1pdCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDEtXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNTM9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQ0Mi1cdC8qIEJpbmQgaXRzIHBhY2tldCB0cmFuc21pdHRlciAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDQzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDQ0LVx0aWYgKHAtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNTgzPXN0YXRpYyBpbnQgaXBfdnNfY29ubl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2MDY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDctXHRcdGlmIChjcC1cdTAwM2VkYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjEzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjE0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjE1LVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNjU4PXN0YXRpYyBpbnQgaXBfdnNfY29ubl9zeW5jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTY2ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2OS1cdFx0aWYgKGNwLVx1MDAzZWRhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NzUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2NzY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NzctXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDYtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDMtXHRcdHJldHVybiBcJiMzNDtJQ01QXCYjMzQ7O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxMDQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwNS1cdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yODQ9dTMyIGlwX3ZzX3JodF9oYXNoX2xpbmZvKHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI4OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6Mjg5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yOTAtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz00MzE9aXBfdnNfc2NoZWRfcGVyc2lzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDU1LVx0LyogTWFzayBzYWRkciB3aXRoIHRoZSBuZXRtYXNrIHRvIGFkanVzdCB0ZW1wbGF0ZSBncmFudWxhcml0eSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo0NTY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ1Ny1cdGlmIChzdmMtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NTItXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NjM9aW50IGlwX3ZzX2xlYXZlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MzgtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODM5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NDAtXHRpZiAoc3ZjLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04OTg9c3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNS1cdFx0cmV0dXJuIDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjkwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTA3LVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05MjY9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk3MS12b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDI4PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1NS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA1NjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1Ny1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEwODg9c3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjExNjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjYtc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEzMDI9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX25ld19jb25uX291dChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTMyOS1cdFx0LyogYXBwbHkgbmV0bWFzayB0aGUgc2FtZSB3YXkgaW5ncmVzcy1zaWRlIGRvZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTMzMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTMzMS1cdFx0aWYgKHN2Yy1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE0MzE9aGFuZGxlX3Jlc3BvbnNlKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTQ1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ1MS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDI9aXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUyOS1cdGlwX3ZzX2ZpbGxfaXBoX3NrYihhZiwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTUzMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUzMS1cdGlmIChhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTU1Ni1cdC8qIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE1NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE1NTgtXHRpZiAoYWYgPT0gQUZfSU5FVClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2MTUtXHRcdFx0XHRcdFx0aXBoLmxlbikpKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjE3LVx0XHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzUyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5ODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODctc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjEwNz1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxNTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMDA9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE0LVx0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzE1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE2LVx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzc2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzc3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzc4LXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyNz1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MzQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQzNTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQzNi1cdFx0b3BzID0gaXBfdnNfb3BzNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0NTY9dm9pZCBpcF92c191bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgYWYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDYyLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NjM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NjQtXHRcdG9wcyA9IGlwX3ZzX29wczY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2LSNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz02Nz1zdGF0aWMgdm9pZCBfX2lwX3ZzX2RlbF9zZXJ2aWNlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIGJvb2wgY2xlYW51cCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjcwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTcxLS8qIFRha2VuIGZyb20gcnQ2X2ZpbGxfbm9kZSgpIGluIG5ldC9pcHY2L3JvdXRlLmMsIGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9ODY4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX3JzX2hhc2hrZXkoaW50IGFmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy04NzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6ODc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTg3Ni1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQwMj1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNDA3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE0MDg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTQwOS1cdGlmICh1ZGVzdC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0xNzA5PWlwX3ZzX2FkZF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyX2tlcm4gKnUsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE3NDYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MTc0NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ4LVx0aWYgKHUtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTkxOD1pcF92c19lZGl0X3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuICp1KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE5NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMTk1Mi1cdGlmICh1LVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI5NzU9c3RhdGljIGludCBpcF92c19pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yOTk0LVx0XHRpZiAoIXN2Yy1cdTAwM2Vmd21hcmspIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyOTk1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5OTYtXHRcdFx0aWYgKHN2Yy1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzAyMy1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXHUwMDI2c3ZjLVx1MDAzZWRlc3RpbmF0aW9ucywgbl9saXN0KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzAyNDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zMDI1LVx0XHRcdGlmIChkZXN0LVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00MTU3PXN0YXRpYyBib29sIGlwX3ZzX2lzX2FmX3ZhbGlkKGludCBhZilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2MC1cdFx0cmV0dXJuIHRydWU7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00MTYyLVx0aWYgKGFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBpcHY2X21vZF9lbmFibGVkKCkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0MzA9c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHN0YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDQ1LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDQ2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDctXHRpZiAoYy1cdTAwM2VtY2FzdF9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz00NTE3PXN0YXRpYyBpbnQgaXBfdnNfZ2VubF9uZXdfZGFlbW9uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1NDQtXHRcdGlmIChhKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDU0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NTQ2LVx0XHRcdGludCBhZGRyX3R5cGU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzI9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcF92c19kc3Rfbm90aWZpZXIgPSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTE3My1cdC5ub3RpZmllcl9jYWxsID0gaXBfdnNfZHN0X2V2ZW50LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUxNzQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTE3NS1cdC5wcmlvcml0eSA9IEFERFJDT05GX05PVElGWV9QUklPUklUWSAmIzQzOyA1LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jPTcwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX2RoX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMtNzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYzo3NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jLTc1LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz00MTg9c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ2My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0NjQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDY1LVx0XHRcdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBwcm90byA9PSAmIzM5OzImIzM5Oykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9MTQ4PWlwX3ZzX2xibGNfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTE1MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM6MTUyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYy0xNTMtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmM9MzExPWlwX3ZzX2xibGNyX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmM6MzE1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE2LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jPTg4PWlwX3ZzX21oX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmMtOTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbWguYzo5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTk1LVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTIxND1pcF92c190Y3B1ZHBfZGVidWdfcGFja2V0X3Y0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjQzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6MjQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjQ1LXN0YXRpYyB2b2lkXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjc5PWlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoaW50IGFmLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI4My17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyODQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0yODUtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05Mj1zY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjk5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xMDAtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTQ2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE0OC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZWZyYWdvZmZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xMDU9dGNwX2Zhc3RfY3N1bV91cGRhdGUoaW50IGFmLCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMDkte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMTEtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEyNj10Y3BfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTEzMC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTEzMi1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE1NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNTYtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAwLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMDE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAyLVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTIyNT10Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTIzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjM0LVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlZnJhZ29mZnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI4My1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Mjg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI4NS1cdFx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz05Mz11ZHBfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTk3LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo5ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy05OS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MTE1PXVkcF9wYXJ0aWFsX2NzdW1fdXBkYXRlKGludCBhZiwgc3RydWN0IHVkcGhkciAqdWhkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTE5LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTIxLVx0aWYgKGFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0xMzY9dWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNDMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE0NS1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZWZyYWdvZmZzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xOTMtXHRcdHNrYi1cdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsIDApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjE5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xOTUtXHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjI2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIyNzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yMjgtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGlwaC1cdTAwM2VmcmFnb2Zmcylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjc3LVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyNzg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjc5LVx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmM9MTQyPXZvaWQgaXBfdnNfc2NoZWR1bGVyX2VycihzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBjb25zdCBjaGFyICptc2cpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMtMTQ5LVx0XHRcdCAgICAgc2NoZWRfbmFtZSwgc3ZjLVx1MDAzZWZ3bWFyaywgc3ZjLVx1MDAzZWZ3bWFyaywgbXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jOjE1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jLTE1MS1cdH0gZWxzZSBpZiAoc3ZjLVx1MDAzZWFmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmM9ODM9aXBfdnNfc2hfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYy04Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zaC5jOjg4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODktXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NjktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjcxLVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzMyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg4PWlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cdGlmIChhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgzLVx0aWYgKHMtXHUwMDNldjYudHlwZSBcdTAwMjYgU1RZUEVfRl9JTkVUNikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDg1LVx0XHRhZiA9IEFGX0lORVQ2O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE4MS1cdFx0XHRcdCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjExODI6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExODMtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjk3PXN0YXRpYyB2b2lkIHNldF9tY2FzdF9sb29wKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIGxvb3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzAwLVx0aW5ldF9hc3NpZ25fYml0KE1DX0xPT1AsIHNrLCBsb29wKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMwMi1cdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZmFtaWx5KSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMxMj1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfdHRsKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIHR0bClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMTgtXHRXUklURV9PTkNFKGluZXQtXHUwMDNlbWNfdHRsLCB0dGwpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzE5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzNy1cdFdSSVRFX09OQ0UoaW5ldC1cdTAwM2VwbXR1ZGlzYywgdmFsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMzODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzOS1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTI9c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cdC8qICBpbmV0LVx1MDAzZW1jX2FkZHIgID0gMDsgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2My1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzODI9am9pbl9tY2FzdF9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMy1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTUyMD1zdGF0aWMgaW50IG1ha2VfcmVjZWl2ZV9zb2NrKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgaWQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUwLVx0Lyogam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NTItXHRpZiAoaXB2cy1cdTAwM2ViY2ZnLm1jYXN0X2FmID09IEFGX0lORVQ2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTMzPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpkb19vdXRwdXRfcm91dGU0KHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRhZGRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTYwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNjE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2Mi1zdGF0aWMgaW5saW5lIGludCBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTY4PXN0YXRpYyBpbmxpbmUgYm9vbCBjcm9zc2VzX2xvY2FsX3JvdXRlX2JvdW5kYXJ5KGludCBza2JfYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNzctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE3ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc5LVx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmVfbXR1X2lzX2FkZXF1YXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MjIyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yMjMtXHRpZiAoc2tiX2FmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0yNTk9c3RhdGljIGlubGluZSBib29sIGRlY3JlbWVudF90dGwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjI2NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjY2LVx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MzE2PV9faXBfdnNfZ2V0X291dF9ydChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IHNrYl9hZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6NDQ3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDgtc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9NzM2PWlwX3ZzX2J5cGFzc194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc1Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6NzU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTgtaW50XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03ODc9aXBfdnNfbmF0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODY4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo4Njk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3MC1pbnRcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTk2MT1pcF92c19wcmVwYXJlX3R1bm5lbGVkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2tiX2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtOTY4LVx0X191OCBvbGRfZHNmaWVsZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTY5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05NzAtXHRzdHJ1Y3QgaXB2NmhkciAqb2xkX2lwdjZoID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTk4NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTg1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODYtXHRpZiAoc2tiX2FmID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMTQ3PWlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTEyODktXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjEyOTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTEyOTEtaW50XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNDM5PWlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTQ2Ni1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTQ2NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDIwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBJUFZTIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgdGhlIGtleSBvbmVzIHRvIGZvY3VzIG9uLiBMZXQgbWUganVzdCBjb25maXJtIHdoZXJlIGBJUF9WU19JUFY2YCBpcyBkZWZpbmVkLCBhaCB5ZXMsIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIEFuZCwganVzdCB0byBiZSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLCB5ZXAsIHN0aWxsIHRoZXJlLCBhbGwgZ29vZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgTkFULiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIGZvciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gaW4gSVBWUz8gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoZSBgTkFUYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19OQVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTQwCgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzIGZvciBJUFZTIE5BVCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIElQVlMgTkFUIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBJUFZTIE5BVCBpcyBpbmhlcmVudGx5IGJ1aWx0LWluIHdoZW4gSVBWUyBpcyBlbmFibGVkLiBHb29kLiBOb3csIGxldCYjMzk7cyBhbmFseXplIHRoZSByZWxldmFudCBjb2RlLgoKSSBzZWUgdGhhdCBzZXZlcmFsIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoZXNlIGFyZSBhbGwgY29yZSBJUFZTIGZ1bmN0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpJbml0aWFsbHksIEkgdGhvdWdodCB0byBwcmlvcml0aXplOiBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX291dF9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGFuZCBgdWRwX2NzdW1fY2hlY2tgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgY3N1bSBjaGVja3MgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgc28gSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoZXkmIzM5O3JlIGNhbGxlZC4gQWgsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGV0Yy4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KCkkmIzM5O20gbm93IHRoaW5raW5nIEkgc2hvdWxkIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHRoZSBoYW5kbGVycywgd2hpY2ggYXJlIHRoZSBpbnRlcmVzdGluZyBwb2ludHMgdG8gYXR0YWNrLiBUaGUgaGFuZGxlcnMgaW5jbHVkZTogYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgYHRjcF9zbmF0X2hhbmRsZXJgLCBgdGNwX2RuYXRfaGFuZGxlcmAsIGB1ZHBfc25hdF9oYW5kbGVyYCwgYW5kIGB1ZHBfZG5hdF9oYW5kbGVyYC4KCkFscmlnaHQsIGJhY2sgdG8gdGhvc2UgaW5pdGlhbCBjb3JlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggY29ycmVjdGx5LiBgaXBfdnNfaW5faWNtcGAgaXMgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgaXBfdnNfaW5faG9va2AgYW5kIGBpcF92c19mb3J3YXJkX2ljbXBgLiBMaWtld2lzZSwgYGlwX3ZzX291dF9pY21wYCBpcyBzdGF0aWMsIGNhbGxlZCBvbmx5IGZyb20gYGlwX3ZzX291dF9ob29rYC4gT2theSwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLgoKU28sIHRoZSB1cGRhdGVkIHByaW9yaXR5IGZvciBmdXp6aW5nIHNob3VsZCBiZTogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBhbmQgYHVkcF9kbmF0X2hhbmRsZXJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHRoZXNlIGZ1bmN0aW9uIG5hbWVzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIChpcF92c19pbl9ob29rfGlwX3ZzX291dF9ob29rfGlwX3ZzX2ZvcndhcmRfaWNtcHxpcF92c19pY21wX3htaXR8aXBfdnNfaWNtcF94bWl0X3Y2fHNjdHBfc25hdF9oYW5kbGVyfHNjdHBfZG5hdF9oYW5kbGVyfHRjcF9zbmF0X2hhbmRsZXJ8dGNwX2RuYXRfaGFuZGxlcnx1ZHBfc25hdF9oYW5kbGVyfHVkcF9kbmF0X2hhbmRsZXIpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDEzCgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZWZpbmluZyB0aGUgQXBwcm9hY2gqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbuKApiBpdCYjMzk7cyBwcm92aW5nIGEgYml0IHRvbyByZXN0cmljdGl2ZSBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gSSBjYW4gc2VlIEkmIzM5O20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpdHMgcHJlY2lzaW9uLCB3aGVuIGEgc2ltcGxlciBzb2x1dGlvbiBtaWdodCBiZSBtb3JlIGVmZmVjdGl2ZSBhbmQgbGVzcyBwcm9uZSB0byBlZGdlLWNhc2UgZXJyb3JzLiBJdCYjMzk7cyB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgcmUtZXZhbHVhdGUuIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IHdpdGggYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gZm9yY2UgYSBwZXJmZWN0IG1hdGNoIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHdpbGwgZGlyZWN0bHkgc2VhcmNoIGZvciB0aGUgY29yZSBlbGVtZW50OiB0aGUgbmFtZXMgdGhlbXNlbHZlcy4gVGhpcyB3aWxsIHN0cmVhbWxpbmUgdGhlIHByb2Nlc3MgYW5kIGhvcGVmdWxseSBkZWxpdmVyIHRoZSBkYXRhIHdpdGggbGVzcyBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19pbl9ob29rfGlwX3ZzX291dF9ob29rfGlwX3ZzX2ZvcndhcmRfaWNtcHxpcF92c19pY21wX3htaXR8aXBfdnNfaWNtcF94bWl0X3Y2fHNjdHBfc25hdF9oYW5kbGVyfHNjdHBfZG5hdF9oYW5kbGVyfHRjcF9zbmF0X2hhbmRsZXJ8dGNwX2RuYXRfaGFuZGxlcnx1ZHBfc25hdF9oYW5kbGVyfHVkcF9kbmF0X2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9Njg9RVhQT1JUX1NZTUJPTChpcF92c19uZXdfY29ubl9vdXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzEtI2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3MjpcdElORElSRUNUX0NBTExfMihmLCB0Y3Bfc25hdF9oYW5kbGVyLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzMtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NDojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB0Y3Bfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVURQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzctI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDE9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNTAyOmlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTUwMy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzUyPWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzMtXHRcdG9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5NzQ6XHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzUtXHRcdFx0XHQgIFx1MDAyNmNpcGgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTk4Nz1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDg4Olx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg5LVx0XHRcdFx0ICAgICBcdTAwMjZjaXBoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMDY9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTA3OmlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTA4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIyOTk9c3RhdGljIHVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAwOmlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAxLVx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzMS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzMjpcdFx0Lmhvb2tcdFx0PSBpcF92c19vdXRfaG9vayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzMy1cdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0MC1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM0MTpcdFx0Lmhvb2tcdFx0PSBpcF92c19pbl9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQyLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ3LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzQ4Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ5LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzU0LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzU1Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX2luX2hvb2ssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNTYtXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNjItXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNjM6XHRcdC5ob29rXHRcdD0gaXBfdnNfZm9yd2FyZF9pY21wLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY0LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY5LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzcwOlx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzcxLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4MC1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM4MTpcdFx0Lmhvb2tcdFx0PSBpcF92c19vdXRfaG9vayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4Mi1cdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4OS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5MDpcdFx0Lmhvb2tcdFx0PSBpcF92c19pbl9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzkxLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk2LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzk3Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk4LVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDAzLVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDA0Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX2luX2hvb2ssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MDUtXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTEtXHR7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MTI6XHRcdC5ob29rXHRcdD0gaXBfdnNfZm9yd2FyZF9pY21wLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDEzLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDE4LVx0e1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDE5Olx0XHQuaG9va1x0XHQ9IGlwX3ZzX291dF9ob29rLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDIwLVx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05MT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjkyOnNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTkzLVx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz0xMzk9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDA6c2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTQxLVx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz01Njk9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHAgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy01ODItXHQuY29ubl9vdXRfZ2V0XHQ9IGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6NTgzOlx0LnNuYXRfaGFuZGxlclx0PSBzY3RwX3NuYXRfaGFuZGxlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6NTg0Olx0LmRuYXRfaGFuZGxlclx0PSBzY3RwX2RuYXRfaGFuZGxlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtNTg1LVx0LnN0YXRlX25hbWVcdD0gc2N0cF9zdGF0ZV9uYW1lLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xNDY9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTQ3OnRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNDgtXHRcdCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIyNTp0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjI2LVx0XHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9Njg0PXN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF90Y3AgPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTY5Ny1cdC5jb25uX291dF9nZXQgPVx0XHRpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk4Olx0LnNuYXRfaGFuZGxlciA9XHRcdHRjcF9zbmF0X2hhbmRsZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk5Olx0LmRuYXRfaGFuZGxlciA9XHRcdHRjcF9kbmF0X2hhbmRsZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtNzAwLVx0LnN0YXRlX25hbWUgPVx0XHR0Y3Bfc3RhdGVfbmFtZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MTM1PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjEzNjp1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTM3LVx0XHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyMTk6dWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTIyMC1cdFx0IHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTQ0OD1zdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgaXBfdnNfcHJvdG9jb2xfdWRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy00NTktXHQuY29ubl9vdXRfZ2V0ID1cdFx0aXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjQ2MDpcdC5zbmF0X2hhbmRsZXIgPVx0XHR1ZHBfc25hdF9oYW5kbGVyLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjQ2MTpcdC5kbmF0X2hhbmRsZXIgPVx0XHR1ZHBfZG5hdF9oYW5kbGVyLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTQ2Mi1cdC5zdGF0ZV90cmFuc2l0aW9uID1cdHVkcF9zdGF0ZV90cmFuc2l0aW9uLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTUwMz1pbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTUwNDppcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNTA1LVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1ODk9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTA6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5MS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIElDTVAgYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcgaW4gdGhlIElQVlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBJUFZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYSBmZXcga2V5IGVudHJ5IHBvaW50czogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBhbmQgdGhlIE5BVCBoYW5kbGVycyBmb3IgdmFyaW91cyBwcm90b2NvbHMgbGlrZSBTQ1RQLCBUQ1AsIGFuZCBVRFAuIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYC4KCkJ1dCB0aGVuLCBjb25zaWRlcmluZyB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgaG9va3MgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfb3V0X2hvb2tgIGFyZSBjYWxsZWQgZm9yICpldmVyeSogcGFja2V0LiBUaGV5JiMzOTtyZSBvbiB0aGUgaG90IHBhdGgsIG1ha2luZyB0aGVtIGEgbGVzcyB0YXJnZXRlZCBhcHByb2FjaCBmb3IgdGhlc2Ugc3BlY2lmaWMgY2hhbmdlcyByZWxhdGVkIHRvIElDTVAuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3R1YWxseSBtb3JlIGZvY3VzZWQgb24gaGFuZGxpbmcgSUNNUCBwYWNrZXRzIHdpdGhpbiB0aG9zZSBob29rcywgc3BlY2lmaWNhbGx5IGluIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYC4KClNpbmNlIHRoZXNlIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBJIGNhbiYjMzk7dCBkaXJlY3RseSBsaXN0IHRoZW0gKnVubGVzcyogdGhleSYjMzk7cmUgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlIChrYWxsc3ltcykuIEJ1dCBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zLCBhc3N1bWluZyB0aGV5IGFyZSBpbiBrYWxsc3ltcy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBmaW5lIHRvIGxpc3QuIFRodXMsIEkmIzM5O2xsIHByaW9yaXRpemUgZnV6emluZyBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYW5kIGBpcF92c19vdXRfaWNtcF92NmAgYmVjYXVzZSB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgSUNNUCBoYW5kbGluZy4gVGhhdCYjMzk7cyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBmdXp6aW5nIHRoZSBob29rcyB0aGVtc2VsdmVzLgoKSSBjb25maXJtZWQgdGhlc2UgYXJlIGluZGVlZCBqdXN0IGBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXAoLi4uKWAgYW5kIGBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKC4uLilgLCBzbyB0aGV5IGFyZSAqbm90KiBpbmxpbmUgYW5kICp3aWxsKiBiZSBpbiBrYWxsc3ltcy4KClNvLCB0aGUgZnV6emluZyBsaXN0IHdpbGwgYmU6CgpgaXBfdnNfaW5faWNtcGAKYGlwX3ZzX291dF9pY21wYApgaXBfdnNfaW5faWNtcF92NmAKYGlwX3ZzX291dF9pY21wX3Y2YApgaXBfdnNfZm9yd2FyZF9pY21wYApgaXBfdnNfaWNtcF94bWl0YApgaXBfdnNfaWNtcF94bWl0X3Y2YApgc2N0cF9zbmF0X2hhbmRsZXJgCmBzY3RwX2RuYXRfaGFuZGxlcmAKYHRjcF9zbmF0X2hhbmRsZXJgCmB0Y3BfZG5hdF9oYW5kbGVyYApgdWRwX3NuYXRfaGFuZGxlcmAKYHVkcF9kbmF0X2hhbmRsZXJgCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbiBgSVBfVlNfUFJPVE9fVENQYCBjb25maWc/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBmb3IgdGhlIEZsYWc6IEEgQnJpZWYgRGlhZ25vc3RpYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGRlZmluZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY29uc3RhbnQsIGFuZCB3aXRob3V0IGl0LCBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSB3b24mIzM5O3Qgd29yayBhcyBleHBlY3RlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIHdoZXRoZXIgaXQgYmUgZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIG1ldHJpY3MsIG9yIGRldmVsb3Bpbmcgc29tZSBuZXcgcmVsYXRlZCBmZWF0dXJlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaW4gcGxhY2UuIFNvLCBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgaXMgYSBnb29kIGZpcnN0IHN0ZXAgdG8gYXZvaWQgc3Bpbm5pbmcgbXkgd2hlZWxzIGxhdGVyLiBJdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBvZiBjaGVja2luZyB0aGF0IHlvdXIgdG9vbHMgYXJlIGFjdHVhbGx5IHByZXNlbnQgYmVmb3JlIHN0YXJ0aW5nIHdvcmsgb24gYSBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBzb21lIHJlbGF0ZWQgY29uc3RhbnRzIGVhcmxpZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZWNhbGwgZW5jb3VudGVyaW5nIGBJUF9WU19QUk9UT19BSGAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBpbiB0aGUgcHJldmlvdXMgY29kZSBJIHdhcyBhbmFseXppbmcuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhlaXIgcHJlc2VuY2UgYW5kIGNvbnRleHQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBSZWdleCBDaGVjayAmYW1wOyBDb250ZXh0dWFsIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBzeW50YXgsIHRoaW5raW5nIGl0IHdhcyBwcm9iYWJseSBhIHNpbXBsZSByZWdleCBtYXRjaCwgbGlrZWx5IHN0YXJ0aW5nIHdpdGggYF5jb25maWcgYC4gVGhhdCBmZWVscyByaWdodCBnaXZlbiB0aGUgY29udGV4dC4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29kZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSBiZWNhdXNlLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBJUF9WU19QUk9UT2Agc3ltYm9sIGlzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBhZnRlciwgYW5kIGl0JiMzOTtzIGEgdmVyeSBjb21tb24gcGF0dGVybiB0byB1c2UgS2NvbmZpZyBmaWxlcyB0byBjb25maWd1cmUgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXCYjMzQ7SVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcdElQX1ZTX1BST1RPX1RDUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXHRib29sIFwmIzM0O1RDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcdElQX1ZTX1BST1RPX1VEUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODYtXHRib29sIFwmIzM0O1VEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo5MTpjb25maWdcdElQX1ZTX1BST1RPX0FIX0VTUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XHRkZWZfYm9vbCBJUF9WU19QUk9UT19FU1AgfHwgSVBfVlNfUFJPVE9fQUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkzLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXHRJUF9WU19QUk9UT19FU1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk1LVx0Ym9vbCBcJiMzNDtFU1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTAwOmNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NDQKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgSVBWUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGlzIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgZGVmaW5pdGVseSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgdG8gZW5hYmxlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIHRvIGdldCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB3ZSBuZWVkIHRvIGNvbnNpZGVyLgoKTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgSVBWUyBmaWxlczogYGlwX3ZzX2FwcC5jYCwgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBgaXBfdnNfcHJvdG9fdWRwLmNgLCBhbmQgYGlwX3ZzX3htaXQuY2AuIFRoZXNlIGFyZSBhbGwgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9WU2AsIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZmlsZXMgZGVwZW5kIG9uIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgY29uZmlncy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIElQVlMgbG9naWMsIHBhcnRpY3VsYXJseSBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gYmVpbmcgaW50cm9kdWNlZCwgYW5kIGl0JiMzOTtzIHBsYXlpbmcgd2l0aCBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyAqcmVhY2hhYmxlKiBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSDigJMgcGVyZmVjdCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19uYXRfaWNtcF92NmAuCgpTbywgaW4gc3VtbWFyeSwgSSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIGNoYW5nZXM6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfZm9yd2FyZF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7c2N0cF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7c2N0cF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX3NuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dWRwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQVlMgbG9naWMgZm9yIGhhbmRsaW5nIGNoZWNrc3VtcyBhbmQgTkFUIGZvciBJQ01QLCBUQ1AsIFVEUCwgYW5kIFNDVFAgcGFja2V0cy4gSXQgaW50cm9kdWNlcyBuZXcgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBhbmQgYWx0ZXJzIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3NjdHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3NjdHBfZG5hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9zbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7dGNwX2RuYXRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt1ZHBfc25hdF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3VkcF9kbmF0X2hhbmRsZXImIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuMTk3OTMyNDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzMDkyNjUzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJzY3RwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwic2N0cF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVBWUyBsb2dpYyBmb3IgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCBhbHRlcnMgcGFja2V0IG1hbmdsaW5nIG9mZnNldHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuMTk3OTM5NzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQwMDMwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjQzNDNiMDgxMGQ5NmYzOWY1ZDBmN2NjMzZjY2IxYTZmMGJmY2MxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDA0OjM4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLmM2ODRhNDZjZTE1YTU0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuQEAgLTI1LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFx0XFx0XFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gI2VuZGlmXFxuQEAgLTE5NzIsOCArMTk3NCw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIHVuc2lnbmVkIGludCB3bGVuLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xOTg2LDggKzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuQEAgLTIwNTksMTUgKzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gfVxcbiBcXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xcbi1cXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcXG4ge1xcbiBcXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XFxuQEAgLTIwOTMsNiArMjA5NiwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbiBcXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXFxuK3tcXG4rXFx0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXFxuK1xcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qIExPQ0FMX09VVCA/ICovXFxuK1xcdGlmICghc2tiLVxcdTAwM2VkZXYgfHwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xcbitcXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0aWYgKCEoZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSktXFx1MDAzZXJ0NmlfZmxhZ3MgXFx1MDAyNiBSVEZfTE9DQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cXHUwMDNlcnRfZmxhZ3MgXFx1MDAyNiBSVENGX0xPQ0FMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKipcXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXFxuK3tcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xcbit9XFxuK1xcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXFxuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVxcdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVxcdTAwM2VsZW4pO1xcbitcXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIGlwdnNoLVxcdTAwM2VsZW4pO1xcbiBcXG4gXFx0LypcXG4gXFx0ICpcXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXFxuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uMjFkYjZhZjIyMGViMDkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtODY3LDcgKzg2Nyw3IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cXG4gXFxuICNlbmRpZlxcbiBcXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbitzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbiB7XFxuIFxcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xcbiB9XFxuQEAgLTkyNCwxMyArOTI0LDEyIEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuICAqIC0gaW5vdXQ6IDE9aW4tXFx1MDAzZW91dCwgMD1vdXQtXFx1MDAzZWluXFxuICAqL1xcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBoZHIgKmlwaFxcdCA9IGlwX2hkcihza2IpO1xcbi1cXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXFx1MDAzZWlobCo0O1xcbi1cXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpY21wX29mZnNldCk7XFxuK1xcdHN0cnVjdCBpY21waGRyICppY21waFxcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0b2ZmKTtcXG4gXFx0c3RydWN0IGlwaGRyICpjaXBoXFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xcbitcXHR1bnNpZ25lZCBpbnQgY29mZiA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xcbiBcXG4gXFx0aWYgKGlub3V0KSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuQEAgLTk1Nyw0OCArOTU2LDQ1IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXFx0ID0gaXB2Nl9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNcXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cXG4gXFx0aW50IHByb3RvY29sO1xcbiBcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xcbi1cXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcXG4tXFx0dW5zaWduZWQgc2hvcnQgZnJhZ29mZnM7XFxuK1xcdHN0cnVjdCBpcHY2aGRyICpjaWg7XFxuIFxcbi1cXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4tXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaWNtcF9vZmZzZXQpO1xcbi1cXHRvZmZzID0gaWNtcF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcXG4tXFx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xcbitcXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuK1xcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBjaXBoLVxcdTAwM2VvZmYpO1xcbiBcXG4tXFx0cHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZnMsIC0xLCBcXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xcbitcXHRwcm90b2NvbCA9IGNpcGgtXFx1MDAzZXByb3RvY29sO1xcbiBcXG4gXFx0aWYgKGlub3V0KSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbi1cXHRcXHRjaXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2V2YWRkci5pbjY7XFxuK1xcdFxcdGNpaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpcGgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXFxuLVxcdGlmICghZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XFxuLVxcdFxcdFxcdCAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkge1xcbi1cXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4rXFx0aWYgKCFjaXBoLVxcdTAwM2VmcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHByb3RvY29sID09IElQUFJPVE9fVENQICB8fCBwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgIHByb3RvY29sID09IElQUFJPVE9fU0NUUCkpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDI3LDM4IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApXFxuK1xcdFxcdGN0b2ZmICs9IDIgKiBzaXplb2YoX191MTYpO1xcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi1cXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7XFxuK1xcdFxcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XFxuIFxcbiBcXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVxcdTAwM2VpcHZzLCBhZiwgc2tiLCBob29rbnVtKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTEwOTAsOSArMTA4Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgKlxcdEN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLlxcbiAgKi9cXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKVxcbitcXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdFxcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gXFx0c3RydWN0IGljbXBoZHJcXHRfaWNtcGgsICppYztcXG4gXFx0c3RydWN0IGlwaGRyXFx0X2NpcGgsICpjaWg7XFx0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXFxuIFxcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xcbkBAIC0xMTA3LDE3ICsxMTAzLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxcbitcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHR9XFxuIFxcbi1cXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4tXFx0b2Zmc2V0ID0gaWhsID0gaXBoLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRpaGwgPSBpcHZzaC1cXHUwMDNlbGVuO1xcbitcXHRvZmZzZXQgPSBpcHZzaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwdnNoLVxcdTAwM2VzYWRkci5pcCwgXFx1MDAyNmlwdnNoLVxcdTAwM2VkYWRkci5pcCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbkBAIC0xMTM2LDcgKzExMzQsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKGNpaCA9PSBOVUxMKVxcbitcXHRpZiAoIShjaWggXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2VpaGwgXFx1MDAzZT0gNSkpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbiBcXG4gXFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTExNTksOSArMTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghY3ApXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbi1cXHRzbmV0LmlwID0gaXBoLVxcdTAwM2VzYWRkcjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNpaC1cXHUwMDNlcHJvdG9jb2wsIGNwLFxcbi1cXHRcXHRcXHRcXHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xcbitcXHRzbmV0LmlwID0gaXB2c2gtXFx1MDAzZXNhZGRyLmlwO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcXHUwMDI2c25ldCwgY3AsIHBwLCBcXHUwMDI2Y2lwaCwgaWhsLFxcbitcXHRcXHRcXHRcXHQgICAgaG9va251bSk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xMTc0LDcgKzExNzIsNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XFxuIFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xcbi1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXG4gXFx0KnJlbGF0ZWQgPSAxO1xcbiBcXHRpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC1cXHUwMDNlbGVuLCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuQEAgLTEyMTcsOSArMTIxNCw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0MSw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUwLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NzUsMTcgKzE3NzEsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XFxuIFxcdFxcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXFxuIFxcdFxcdFxcdHJldHVybiBORl9TVE9MRU47XFxuK1xcdFxcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwaC1cXHUwMDNlbGVuO1xcbitcXHRvZmZzZXQgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4gXFx0aWYgKGljID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiBORl9EUk9QO1xcbiBcXG4gXFx0SVBfVlNfREJHKDEyLCBcXFwiSW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXFx1MDAzZSVwSTRcXFxcblxcXCIsXFxuIFxcdFxcdCAgaWMtXFx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcXG4tXFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbitcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkci5pcCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbkBAIC0xODk4LDEwICsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTcyLDcgKzE5NzEsOCBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpaC1cXHUwMDNlcHJvdG9jb2wgfHxcXG4gXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sKVxcbiBcXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXFx1MDAyNmNpcGgpO1xcbitcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjA2NCw2ICsyMDY0LDE4IEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG5AQCAtMjA3Myw3ICsyMDg1LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXFxuIFxcdFxcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cXG4gXFxuLVxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXFx1MDAyNmNpcGgpO1xcbitcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTY1LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyODgsNiArMjMwMSw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjMxMSw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMyMyw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi5jMjM0MDFjNzg5ZGUzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDggKzE1MDIsOSBAQCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gICovXFxuIGludFxcbiBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuK1xcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuK1xcdFxcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRhYmxlXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuIFxcdGludCByYztcXG5AQCAtMTUxNSw3ICsxNTE2LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM0LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY1LDEzICsxNTY2LDEzIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcbkBAIC0xNTg3LDggKzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuIFxcdGludCByYztcXG5AQCAtMTYwMCw3ICsxNjAyLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xcbitcXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cmMgPSBORl9BQ0NFUFQ7XFxuIFxcdFxcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xcbkBAIC0xNjE3LDcgKzE2MTksNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XFxuIFxcdFxcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcXG4gXFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXFx1MDAzZWlwdnMsIGNwLVxcdTAwM2VhZiwgc2tiLCBjcC1cXHUwMDNlZGVzdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNwLVxcdTAwM2VkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNwLVxcdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xcbiBcXHRpZiAobG9jYWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHRydCA9IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpO1xcbkBAIC0xNjQ5LDEzICsxNjUxLDEzIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODozMS43MDI0NjcwOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDgwNDcyMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInNjdHBfc25hdF9oYW5kbGVyXCIsXG4gICAgXCJzY3RwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiNDM0M2IwODEwZDk2ZjM5ZjVkMGY3Y2MzNmNjYjFhNmYwYmZjYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDozODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uYzY4NGE0NmNlMTVhNTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCArMTk3NCw5IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICB1bnNpZ25lZCBpbnQgd2xlbiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4rXHRcdCAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xOTg2LDggKzE5ODksOSBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgKzIwNjMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4rXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5NiwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxuK3tcbitcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuK1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIExPQ0FMX09VVCA/ICovXG4rXHRpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbitcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuK1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbit7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuK31cbitcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXHUwMDNlbGVuKTtcbitcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cdTAwM2VsZW4pO1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjIxZGI2YWYyMjBlYjA5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg2Nyw3ICs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4ge1xuIFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIDApKTtcbiB9XG5AQCAtOTI0LDEzICs5MjQsMTIgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbiAgKiAtIGlub3V0OiAxPWluLVx1MDAzZW91dCwgMD1vdXQtXHUwMDNlaW5cbiAgKi9cbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4tXHRcdFx0XHRcdFx0ICAgICAgaWNtcF9vZmZzZXQpO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xuK1x0dW5zaWduZWQgaW50IGNvZmYgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NTcsNDggKzk1Niw0NSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSAwO1xuLVx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGljbXBfb2Zmc2V0KTtcbitcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCB0b2ZmKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcIik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBpcHY2aGRyICppcGhcdCA9IGlwdjZfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG9mZnNcdCA9IDA7IC8qIGhlYWRlciBvZmZzZXQqL1xuIFx0aW50IHByb3RvY29sO1xuIFx0c3RydWN0IGljbXA2aGRyICppY21waDtcbi1cdHN0cnVjdCBpcHY2aGRyICpjaXBoO1xuLVx0dW5zaWduZWQgc2hvcnQgZnJhZ29mZnM7XG4rXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaWNtcF9vZmZzZXQpO1xuLVx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XG4tXHRjaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XG4rXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbitcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlb2ZmKTtcbiBcbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4rXHRwcm90b2NvbCA9IGNpcGgtXHUwMDNlcHJvdG9jb2w7XG4gXG4gXHRpZiAoaW5vdXQpIHtcbiBcdFx0aXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuLVx0XHRjaXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuK1x0XHRjaWgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4tXHRcdGNpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4rXHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xuK1x0aWYgKCFjaXBoLVx1MDAzZWZyYWdvZmZzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbitcdCAgICAgcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSkge1xuK1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgKyBjaXBoLVx1MDAzZWxlbik7XG4gXG4gXHRcdElQX1ZTX0RCRygxMSwgXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgKzEwMDcsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIGljbXBfb2Zmc2V0LFxuK1x0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdG9mZixcbiBcdFx0XHRcdFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xuLVx0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VoZWFkICsgaWNtcF9vZmZzZXQ7XG4rXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsgdG9mZjtcbiBcdHNrYi1cdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7XG4gXG4gXHRpZiAoaW5vdXQpXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlwiKTtcbiB9XG4gI2VuZGlmXG5AQCAtMTAzMywzNiArMTAyNywzOCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4rXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGlobCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBob29rbnVtKVxuK1x0XHRcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbitcdGludCBpcHJvdG8gPSBhZiA9PSBBRl9JTkVUNiA/IElQUFJPVE9fSUNNUFY2IDogSVBQUk9UT19JQ01QO1xuIFx0dW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QO1xuK1x0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cdTAwM2VsZW47XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApXG4rXHRcdGN0b2ZmICs9IDIgKiBzaXplb2YoX191MTYpO1xuK1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIFx0aWYgKGFmID09IEFGX0lORVQ2KVxuLVx0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7XG4rXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZik7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgKzEwODYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgKzExMDMsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcHZzaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiT3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXB2c2gtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwdnNoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTExMzYsNyArMTEzNCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4gXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNTksOSArMTE1Nyw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuK1x0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuK1x0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4rXHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyArMTE3Miw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XG4gXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFxuIFx0KnJlbGF0ZWQgPSAxO1xuIFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXHUwMDNlbGVuLCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbkBAIC0xMjE3LDkgKzEyMTQsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFx1MDAyNnNuZXQsIGNpcGgucHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuK1x0XHRcdFx0ICAgIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE1NDUsNyArMTU0MSw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XG4gI2VuZGlmXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuLVx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLCBob29rbnVtKTtcbitcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbitcdFx0XHRcdFx0XHQgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0xNzUzLDkgKzE3NTAsOCBAQCBzdGF0aWMgaW50IGlwdnNfZ3JlX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqL1xuIHN0YXRpYyBpbnRcbiBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4tXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NzUsMTcgKzE3NzEsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4rXHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuK1x0b2Zmc2V0ID0gaXBoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCIsXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbitcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xODk4LDEwICsxODk2LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwiLFxuLVx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NzIsNyArMTk3MSw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbiBcdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIG9mZnNldCwgaG9va251bSxcbitcdFx0XHRcdCAgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDY0LDYgKzIwNjQsMTggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdHZlcmRpY3QgPSBORl9EUk9QO1xuK1xuK1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4rXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgQUZfSU5FVDYpKSB7XG4rXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbitcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXG5cIixcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbkBAIC0yMDczLDcgKzIwODUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXG4gXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbiBcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4rXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXG4rXHRcdFx0XHQgICAgIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjE1Miw3ICsyMTY1LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjg4LDYgKzIzMDEsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMoc3RhdGUtXHUwMDNlbmV0KTtcbitcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbiBcdGludCByO1xuIFxuIFx0LyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqL1xuQEAgLTIyOTcsMTAgKzIzMTEsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1x0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIFx0fSBlbHNlIHtcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuLVxuIFx0XHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiBcbiBcdFx0aWYgKGlwaGRyLnByb3RvY29sICE9IElQUFJPVE9fSUNNUFY2KVxuQEAgLTIzMTAsNyArMjMyMyw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICNlbmRpZlxuIFx0fVxuIFxuLVx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbitcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgKzExLDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcbitcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMDksNyArMTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xMjEsNyArMTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlc291cmNlICE9IGNwLVx1MDAzZXZwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbitcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XG4rXHRzY3RwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2VkZXN0ICE9IGNwLVx1MDAzZWRwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE4NywxOSArMTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbitcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuK1x0dW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuK1x0XHRyZXR1cm4gMTtcbiBcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmYpO1xuIFx0Y21wID0gc2gtXHUwMDNlY2hlY2tzdW07XG4gXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XG4gXG4gXHRpZiAodmFsICE9IGNtcCkge1xuIFx0XHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cbi1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbitcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTI5LDcgKzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHRjcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XG4rXHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHRjcGhvZmY7XG4gXHR0Y3BoLVx1MDAzZXNvdXJjZSA9IGNwLVx1MDAzZXZwb3J0O1xuIFxuIFx0LyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi9cbkBAIC0yNDQsNyArMjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4rXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgKzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2VkZXN0ID0gY3AtXHUwMDNlZHBvcnQ7XG4gXG4gXHQvKlxuQEAgLTMwMiw0MSArMzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuK1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdGJyZWFrO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbi1cbiBcdHJldHVybiAxO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbmluZGV4IDU4ZjllMjU1OTI3ZTJlLi5mMzI3ODU2ODI0MDJkZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5AQCAtMjUsNyArMjUsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xuK1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyArMTU1LDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXG4rXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB1ZHBob2ZmO1xuK1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggKzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4gXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XG4gXG4tXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbitcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0aWYgKCF1aC1cdTAwM2VjaGVjaylcbitcdFx0cmV0dXJuIDE7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcbitcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbitcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uYzIzNDAxYzc4OWRlMzIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiw4ICsxNTAyLDkgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0YWJsZVx0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbiBcdGludCByYztcbkBAIC0xNTE1LDcgKzE1MTYsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICsxNTM0LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydChjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LCBjcC1cdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcbi1cdFx0XHRcdCAgIE5VTEwsIGlwaCk7XG4rXHRcdFx0XHQgICBOVUxMLCBjaXBoKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xuQEAgLTE1NjUsMTMgKzE1NjYsMTMgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdH1cbiBcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbkBAIC0xNTg3LDggKzE1ODgsOSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IHdsZW4sIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuQEAgLTE2MDAsNyArMTYwMiw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE2MTcsNyArMTYxOSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmNwLVx1MDAzZWRhZGRyLmluNiwgTlVMTCwgaXB2c2gsIDAsIHJ0X21vZGUpO1xuK1x0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7XG5AQCAtMTY0OSwxMyArMTY1MSwxMyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0fVxuIFxuIFx0LyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqL1xuLVx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxuK1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuK1x0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzg6MzEuNzAyNDY4Mzk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg3ODQ1NTE3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tzdW0gVmFsaWRhdGlvbiBDaGFuZ2VzIGluIElQVlM6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIElQVlMgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCB3b3JrLCBkZWZpbml0ZWx5IHdpdGhpbiByZWFjaCBvZiB0aGUga2VybmVsLiBJdOKAmXMgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBmdW5jdGlvbnMgbGlrZSBgaXBfdnNfY2hlY2tzdW1fbmVlZGVkYCBhbmQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AuIEZ1cnRoZXJtb3JlLCBpdCdzIG1vZGlmeWluZyBhIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzIOKAkyBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAgYW5kIHRoZSB2YXJpb3VzIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBmb3Igc2N0cCwgdGNwIGFuZCB1ZHAuIEl0IGFsc28gdG91Y2hlcyBgaXBfdnNfaWNtcF94bWl0YCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuXG5cbktub3dpbmcgSVBWUyBpcyBhIGxvYWQgYmFsYW5jZXIgdGhhdCBzaXRzIG9uIHRvcCBvZiBuZXRmaWx0ZXIsIHRoaXMgaXMgY2xlYXJseSBmdW5jdGlvbmFsIGNvZGUgYW5kIEkgdGhpbmsgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoZWNrc3VtcyBoZXJlLCB0aGF0IGFsd2F5cyB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfSVBfVlNgIG9idmlvdXNseSBlbmFibGVzIHRoZSBjb3JlIElQVlMgZnVuY3Rpb25hbGl0eS4gV2XigJl2ZSBnb3QgYENPTkZJR19JUF9WU19JUFY2YCBmb3IgSVB2NiBzdXBwb3J0IGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgIGZvciBTQ1RQLiBUQ1AgYW5kIFVEUCBhcmUgcHJldHR5IG11Y2ggYmFrZWQgaW4gaWYgSVBWUyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSeKAmW0ganVzdCB3b25kZXJpbmcgYWJvdXQgTkFUIHN1cHBvcnQuIElzIHRoZXJlIGEgc2VwYXJhdGUgYENPTkZJR19JUF9WU19OQVRgIG9yIGlzIGl0IGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIElQVlMgaXMgZW5hYmxlZC4gSeKAmWxsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBtb3JlIGNsb3NlbHkgb24gdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1MC40ODcwMjIxODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NTI2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1MC44NTE1NTUwNzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5NTYzNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIElQVlMuIEknbSB0aGlua2luZywgYnkgZXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSwgSSBjYW4gZ2V0IGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhYmxlIGZlYXR1cmVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRvIGxldmVyYWdlIGl0IHdpdGhpbiBteSBjdXJyZW50IHdvcmssIG9yIHBsYW4gZnVydGhlciBkZXZlbG9wbWVudC90cm91Ymxlc2hvb3RpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IElQVlMgbW9kdWxlcywgZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBzY2hlZHVsaW5nIGFsZ29yaXRobXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgaXMgdGhlIGZpcnN0LCBhbmQgYXJndWFibHkgbW9zdCBpbXBvcnRhbnQsIHN0ZXAuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbiBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozODo1My45ODExMjAyMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxNzQyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU0LjAzNzMwMTY2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzEwMzYyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgSW50ZXJuYWxzIGZvciBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIElQdjYgYW5kIFNDVFAgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgYGdyZXBgIGZvciBgSVBfVlNfSVBWNmAgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQgd2lsbCBxdWlja2x5IGJyaW5nIHVwIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IElQdjYgdmVyc3VzIFNDVFAgdHJhZmZpYyBpcyBoYW5kbGVkIGJ5IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBTQ1RQIGhhbmRsaW5nIGhhcyB0aGUgc2FtZSBsZXZlbCBvZiBncmFudWxhciBjb250cm9sIGFzIFRDUCBvciBVRFAsIGNvbnNpZGVyaW5nIHRoZSBtdWx0aS1ob21pbmcgYXNwZWN0IG9mIFNDVFAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IGhvdyBhc3NvY2lhdGlvbiBpZGVudGlmaWVycyBhcmUgbWFuYWdlZCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBmbG93IGRhdGEuIFRoaXMgZ3JlcCBpcyBhIGdvb2QgaW5pdGlhbCBzY2FuIHRvIHVuZGVyc3RhbmQgdGhlIGJhc2ljIGFyY2hpdGVjdHVyZSBhbmQgcXVpY2tseSBsb2NhdGUgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQxNCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU4LjA2ODM0MDMzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgxODU5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0lQVjZ8Y29uZmlnIElQX1ZTX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM4OjU4LjEyNjE2NTQ0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDUwODU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdG8gdGhlIGNoYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYElQX1ZTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBSYXRoZXIgdGhhbiBtZXRpY3Vsb3VzbHkgc2lmdGluZyB0aHJvdWdoIHRoZSBzb3VyY2UsIGxldCdzIGxldmVyYWdlIHRoZSBLY29uZmlnIHN5c3RlbS4gQSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2ggc2VlbXMgbW9zdCBlZmZpY2llbnQgcmlnaHQgbm93LiBJJ2xsIGp1c3QgZ3JlcCBmb3IgdGhlIHN0cmluZyBgY29uZmlnIElQX1ZTYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgYWJvdXQgYW4gZXhhY3QgbWF0Y2ggaW5pdGlhbGx5OyBhIGJyb2FkZXIgc2VhcmNoIHdpbGwgaG9wZWZ1bGx5IHF1aWNrbHkgcmV2ZWFsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGZpbGUuIEknbGwgZmlsdGVyIG91dCB0aGUgaXJyZWxldmFudCByZXN1bHRzIGxhdGVyIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowMS4wNzEyNTM0NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODI0Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowMS4xMjgwODE4ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxOTUzNzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBJUFZTLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmVzIGRlZmluZWQgd2l0aGluIHRoaXMgS2NvbmZpZyBpcyBjcnVjaWFsIGZvciBhbnkgSVBWUy1yZWxhdGVkIHByb2plY3QsIGJlIGl0IG9wdGltaXphdGlvbiwgZGVidWdnaW5nLCBvciBldmVuIGp1c3QgYnVpbGRpbmcgYSBjdXN0b20ga2VybmVsLiBJIG5lZWQgdG8gc2VlIHdoYXQga25vYnMgd2UgaGF2ZSB0byB0dW5lIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGJlaGF2aW9yLiBUaGlzIEtjb25maWcgZmlsZSBob2xkcyB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgSVBWUyBjb25maWd1cmF0aW9uIGVjb3N5c3RlbSwgc28gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGVhY2ggc3ltYm9sLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MDMuOTQ3NjIxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDc1MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTEwMD1jb25maWdcXHRJUF9WU19QUk9UT19BSFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXFx0Ym9vbCBcXFwiU0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTQ3PWNvbmZpZ1xcdElQX1ZTX1dMQ1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE1Nzpjb25maWcgIElQX1ZTX0ZPXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVxcdFxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE2Nzpjb25maWcgIElQX1ZTX09WRlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2OC1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgb3ZlcmZsb3cgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTE3OD1jb25maWdcXHRJUF9WU19MQkxDXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTEtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTkyOmNvbmZpZyAgSVBfVlNfTEJMQ1JcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzUxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1Mjpjb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTowNC4xNDUxMDE3MzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMzEyMTYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRlYnVnZ2luZyBhIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBJUF9WU19JUFY2YC4gTm93LCB3aGVyZSBpbiB0aGUgd29ybGQgaXMgdGhhdCBjb25zdGFudCBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIG1hY3JvIG9yIHZhcmlhYmxlIGlzIGRlY2xhcmVkLiBJdCBjb3VsZCBiZSBpbiBhIGhlYWRlciBmaWxlLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgZXZlbiBkeW5hbWljYWxseSBnZW5lcmF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB2YWx1ZSB0byBjb21wcmVoZW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNlY3Rpb24gb2YgdGhlIHByb2dyYW0uIElzIGl0IGEgZmxhZywgYSBudW1lcmljYWwgY29uc3RhbnQ/IFRoaXMgaGFzIGJpZyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFY2IGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgdGhlIGFwcHJvcHJpYXRlIElQdjYgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkLiBJZiBJIGNhbid0IGZpbmQgaXQsIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gdHJhY2sgZG93biB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjA2Ljk0ODIyNTcxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NTcyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTU0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNTYtLyogV2UgbmVlZCBhbiBhZGRyc3RybGVuIHRoYXQgd29ya3Mgd2l0aCBvciB3aXRob3V0IHY2ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo1NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTU4LSNkZWZpbmUgSVBfVlNfQUREUlNUUkxFTiBJTkVUNl9BRERSU1RSTEVOXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE2Nj1zdGF0aWMgdTMyIGlwX3ZzX2Nvbm5faGFzaGtleShzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgYWYsIHVuc2lnbmVkIGludCBwcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTcyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTczOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTc0LVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz05Mjc9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2JpbmRfeG1pdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTkzNC1cXHRjYXNlIElQX1ZTX0NPTk5fRl9UVU5ORUw6XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo5MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy05MzYtXFx0XFx0aWYgKGNwLVxcdTAwM2VkYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjk1NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTk1OC1zdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYmluZF94bWl0X3Y2KHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA2Nj12b2lkIGlwX3ZzX3RyeV9iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMDk5LVxcdFxcdGNwLVxcdTAwM2VwYWNrZXRfeG1pdCA9IE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMTAwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwMS1cXHRcXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzUzPWlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQ0Mi1cXHQvKiBCaW5kIGl0cyBwYWNrZXQgdHJhbnNtaXR0ZXIgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0NDM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDQ0LVxcdGlmIChwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTU4Mz1zdGF0aWMgaW50IGlwX3ZzX2Nvbm5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2MDUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjA2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTYwNy1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTYxMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2MTQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjE1LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE2NTg9c3RhdGljIGludCBpcF92c19jb25uX3N5bmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE2NjctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNjY4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY2OS1cXHRcXHRpZiAoY3AtXFx1MDAzZWRhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTY3NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE2NzY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNjc3LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NDU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy00Ni0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwMy1cXHRcXHRyZXR1cm4gXFxcIklDTVBcXFwiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1LVxcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI4ND11MzIgaXBfdnNfcmh0X2hhc2hfbGluZm8oc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yODgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyODk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yOTAtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz00MzE9aXBfdnNfc2NoZWRfcGVyc2lzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy00NTUtXFx0LyogTWFzayBzYWRkciB3aXRoIHRoZSBuZXRtYXNrIHRvIGFkanVzdCB0ZW1wbGF0ZSBncmFudWxhcml0eSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NDU2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNDU3LVxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NTAte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzUyLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NzYzPWludCBpcF92c19sZWF2ZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MzgtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4Mzk6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NDAtXFx0aWYgKHN2Yy1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk4PXN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNS1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjkwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTkwNy1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9OTI2PXZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTY5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTcwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTcxLXZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTAyOD1zdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA1NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEwNTY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMDU3LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTA4OD1zdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMTY0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTE2NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExNjYtc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTMwMj1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfbmV3X2Nvbm5fb3V0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEzMjktXFx0XFx0LyogYXBwbHkgbmV0bWFzayB0aGUgc2FtZSB3YXkgaW5ncmVzcy1zaWRlIGRvZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEzMzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMzMxLVxcdFxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNDMxPWhhbmRsZV9yZXNwb25zZShpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTQ0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE0NTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNDUxLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTUwMj1pcF92c19vdXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE1MjktXFx0aXBfdnNfZmlsbF9pcGhfc2tiKGFmLCBza2IsIGZhbHNlLCBcXHUwMDI2aXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE1MzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTMxLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTU2LVxcdC8qIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNTU3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTU1OC1cXHRpZiAoYWYgPT0gQUZfSU5FVClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYxNS1cXHRcXHRcXHRcXHRcXHRcXHRpcGgubGVuKSkpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYxNy1cXHRcXHRcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Mj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTg2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4Ny1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMDc9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNTItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTUzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE1NC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjMwMD1pcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMxNC1cXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzE2LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNzYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzc3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM3OC1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczZbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyNz1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQzNC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDM2LVxcdFxcdG9wcyA9IGlwX3ZzX29wczY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0NTY9dm9pZCBpcF92c191bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgYWYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NjItXFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDYzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ2NC1cXHRcXHRvcHMgPSBpcF92c19vcHM2O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTY3PXN0YXRpYyB2b2lkIF9faXBfdnNfZGVsX3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgYm9vbCBjbGVhbnVwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTcxLS8qIFRha2VuIGZyb20gcnQ2X2ZpbGxfbm9kZSgpIGluIG5ldC9pcHY2L3JvdXRlLmMsIGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz04Njg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfdnNfcnNfaGFzaGtleShpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtODc0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo4NzU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTg3Ni1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MTQwMj1pcF92c19uZXdfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4gKnVkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MDctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjE0MDg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTE0MDktXFx0aWYgKHVkZXN0LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE3MDk9aXBfdnNfYWRkX3NlcnZpY2Uoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxNzQ3OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xNzQ4LVxcdGlmICh1LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTE5MTg9aXBfdnNfZWRpdF9zZXJ2aWNlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiAqdSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoxOTUxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0xOTUyLVxcdGlmICh1LVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTI5NzU9c3RhdGljIGludCBpcF92c19pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTI5OTQtXFx0XFx0aWYgKCFzdmMtXFx1MDAzZWZ3bWFyaykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzoyOTk1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0yOTk2LVxcdFxcdFxcdGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTMwMjMtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVzdCwgXFx1MDAyNnN2Yy1cXHUwMDNlZGVzdGluYXRpb25zLCBuX2xpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzAyNDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzAyNS1cXHRcXHRcXHRpZiAoZGVzdC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDE1Nz1zdGF0aWMgYm9vbCBpcF92c19pc19hZl92YWxpZChpbnQgYWYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDE2Mi1cXHRpZiAoYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXB2Nl9tb2RfZW5hYmxlZCgpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0MzA9c3RhdGljIGludCBpcF92c19nZW5sX2ZpbGxfZGFlbW9uKHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHN0YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0NDY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ0NDctXFx0aWYgKGMtXFx1MDAzZW1jYXN0X2FmID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDUxNz1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ1NDQtXFx0XFx0aWYgKGEpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDU0NTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDU0Ni1cXHRcXHRcXHRpbnQgYWRkcl90eXBlO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTUxNzI9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcF92c19kc3Rfbm90aWZpZXIgPSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxNzMtXFx0Lm5vdGlmaWVyX2NhbGwgPSBpcF92c19kc3RfZXZlbnQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUxNzQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUxNzUtXFx0LnByaW9yaXR5ID0gQUREUkNPTkZfTk9USUZZX1BSSU9SSVRZICsgNSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19kaC5jPTcwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3ZzX2RoX2hhc2hrZXkoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYzo3NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYy03NS1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NDE4PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2luKHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ2My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDY0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00NjUtXFx0XFx0XFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiBwcm90byA9PSAnMicpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9MTQ4PWlwX3ZzX2xibGNfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMtMTUxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM6MTUyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMtMTUzLVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTMxMT1pcF92c19sYmxjcl9oYXNoa2V5KGludCBhZiwgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMtMzE0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jOjMxNTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYy0zMTYtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX21oLmM9ODg9aXBfdnNfbWhfaGFzaGtleShpbnQgYWYsIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jOjk0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19taC5jLTk1LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jPTIxND1pcF92c190Y3B1ZHBfZGVidWdfcGFja2V0X3Y0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYy0yNDMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM6MjQ0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jLTI0NS1zdGF0aWMgdm9pZFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmM9Mjc5PWlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoaW50IGFmLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjgzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYzoyODQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMtMjg1LVxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo5OTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTEwMC1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDgtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiBpcGgtXFx1MDAzZWZyYWdvZmZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEwNT10Y3BfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTA5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMTEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTEyNj10Y3BfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTMxOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xMzItXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoxNTU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE1Ni1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAwLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjAyLVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MjI1PXRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yMzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjIzMzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMjM0LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2VmcmFnb2ZmcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yODMtXFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Mjg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yODUtXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz05Mz11ZHBfZmFzdF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtOTcte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo5ODojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtOTktXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTExNT11ZHBfcGFydGlhbF9jc3VtX3VwZGF0ZShpbnQgYWYsIHN0cnVjdCB1ZHBoZHIgKnVoZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTE5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTIwOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xMjEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTQzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNDQ6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE0NS1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2IGlwaC1cXHUwMDNlZnJhZ29mZnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTkzLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjE5NDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTk1LVxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yMjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIyNzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjI4LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2VmcmFnb2ZmcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNzctXFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZiwgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6Mjc4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0yNzktXFx0XFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jPTE0Mj12b2lkIGlwX3ZzX3NjaGVkdWxlcl9lcnIoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgY29uc3QgY2hhciAqbXNnKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMtMTQ5LVxcdFxcdFxcdCAgICAgc2NoZWRfbmFtZSwgc3ZjLVxcdTAwM2Vmd21hcmssIHN2Yy1cXHUwMDNlZndtYXJrLCBtc2cpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jOjE1MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2NoZWQuYy0xNTEtXFx0fSBlbHNlIGlmIChzdmMtXFx1MDAzZWFmID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYz04Mz1pcF92c19zaF9oYXNoa2V5KGludCBhZiwgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmM6ODg6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMtODktXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MDojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3MS1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODg9aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzkyLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc5MzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5NC1cXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwNjk9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODMtXFx0aWYgKHMtXFx1MDAzZXY2LnR5cGUgXFx1MDAyNiBTVFlQRV9GX0lORVQ2KSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg0OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4NS1cXHRcXHRhZiA9IEFGX0lORVQ2O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTgxLVxcdFxcdFxcdFxcdCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTgyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE4My1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyOTc9c3RhdGljIHZvaWQgc2V0X21jYXN0X2xvb3Aoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgbG9vcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMwMC1cXHRpbmV0X2Fzc2lnbl9iaXQoTUNfTE9PUCwgc2ssIGxvb3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMwMTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDItXFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5KSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzEyPXN0YXRpYyB2b2lkIHNldF9tY2FzdF90dGwoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgdHRsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzE4LVxcdFdSSVRFX09OQ0UoaW5ldC1cXHUwMDNlbWNfdHRsLCB0dGwpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMxOTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjAtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzM3LVxcdFdSSVRFX09OQ0UoaW5ldC1cXHUwMDNlcG10dWRpc2MsIHZhbCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzM4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzOS1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzUyPXN0YXRpYyBpbnQgc2V0X21jYXN0X2lmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cXHQvKiAgaW5ldC1cXHUwMDNlbWNfYWRkciAgPSAwOyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTM4Mj1qb2luX21jYXN0X2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluX2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MDEtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDAyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwMy1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTIwPXN0YXRpYyBpbnQgbWFrZV9yZWNlaXZlX3NvY2soc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU1MC1cXHQvKiBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NTE6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUyLVxcdGlmIChpcHZzLVxcdTAwM2ViY2ZnLm1jYXN0X2FmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMzM9c3RhdGljIHN0cnVjdCBydGFibGUgKmRvX291dHB1dF9yb3V0ZTQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZGFkZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE2MTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE2Mi1zdGF0aWMgaW5saW5lIGludCBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNjg9c3RhdGljIGlubGluZSBib29sIGNyb3NzZXNfbG9jYWxfcm91dGVfYm91bmRhcnkoaW50IHNrYl9hZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTc4OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTc5LVxcdGlmIChza2JfYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjE3PXN0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmVfbXR1X2lzX2FkZXF1YXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yMjEte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MjIyOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMjIzLVxcdGlmIChza2JfYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBkZWNyZW1lbnRfdHRsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoyNjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0yNjYtXFx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0zMTY9X19pcF92c19nZXRfb3V0X3J0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc2tiX2FmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo0NDc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy00NDgtc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03MzY9aXBfdnNfYnlwYXNzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo3NTc6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03NTgtaW50XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg2OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg2OTojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3MC1pbnRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9OTYxPWlwX3ZzX3ByZXBhcmVfdHVubmVsZWRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGludCBza2JfYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTk2OC1cXHRfX3U4IG9sZF9kc2ZpZWxkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6OTY5OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtOTcwLVxcdHN0cnVjdCBpcHY2aGRyICpvbGRfaXB2NmggPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo5ODU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy05ODYtXFx0aWYgKHNrYl9hZiA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xMTQ3PWlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTI4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjEyOTA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xMjkxLWludFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNDM5PWlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNDY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTQ2NzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MDcuMDA4MTg3NTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODA3NDAwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQVlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZXNlIElQVlMgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBJUF9WU19JUFY2YCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSB0aGUga2V5IG9uZXMgdG8gZm9jdXMgb24uIExldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgYElQX1ZTX0lQVjZgIGlzIGRlZmluZWQsIGFoIHllcywgaXQncyByaWdodCB0aGVyZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBBbmQsIGp1c3QgdG8gYmUgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLCB5ZXAsIHN0aWxsIHRoZXJlLCBhbGwgZ29vZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgTkFULiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIGZvciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gaW4gSVBWUz8gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhlIGBOQVRgIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjExLjE4ODkzMTc5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5MDg2MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjExLjI1NTg0Nzc1OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTA2Mjc3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIElQVlMgTkFUKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIElQVlMgTkFUIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBJUFZTIE5BVCBpcyBpbmhlcmVudGx5IGJ1aWx0LWluIHdoZW4gSVBWUyBpcyBlbmFibGVkLiBHb29kLiBOb3csIGxldCdzIGFuYWx5emUgdGhlIHJlbGV2YW50IGNvZGUuXG5cbkkgc2VlIHRoYXQgc2V2ZXJhbCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGAsIGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgLCBgaXBfdnNfaWNtcF94bWl0YCwgYW5kIGBpcF92c19pY21wX3htaXRfdjZgLiBUaGVzZSBhcmUgYWxsIGNvcmUgSVBWUyBmdW5jdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IHRvIHByaW9yaXRpemU6IGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9jc3VtX2NoZWNrYCwgYHRjcF9jc3VtX2NoZWNrYCwgYW5kIGB1ZHBfY3N1bV9jaGVja2AuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBjc3VtIGNoZWNrcyBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3J0ZWQsIHNvIEkgbmVlZCB0byBzZWUgKndoZXJlKiB0aGV5J3JlIGNhbGxlZC4gQWgsIHRoZXkncmUgY2FsbGVkIGZyb20gYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgZXRjLiBUaGF0IGNoYW5nZXMgdGhpbmdzLlxuXG5JJ20gbm93IHRoaW5raW5nIEkgc2hvdWxkIGJlIHByaW1hcmlseSBmb2N1c2VkIG9uIHRoZSBoYW5kbGVycywgd2hpY2ggYXJlIHRoZSBpbnRlcmVzdGluZyBwb2ludHMgdG8gYXR0YWNrLiBUaGUgaGFuZGxlcnMgaW5jbHVkZTogYHNjdHBfc25hdF9oYW5kbGVyYCwgYHNjdHBfZG5hdF9oYW5kbGVyYCwgYHRjcF9zbmF0X2hhbmRsZXJgLCBgdGNwX2RuYXRfaGFuZGxlcmAsIGB1ZHBfc25hdF9oYW5kbGVyYCwgYW5kIGB1ZHBfZG5hdF9oYW5kbGVyYC5cblxuQWxyaWdodCwgYmFjayB0byB0aG9zZSBpbml0aWFsIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBjb3JyZWN0bHkuIGBpcF92c19pbl9pY21wYCBpcyBzdGF0aWMuIEl0J3MgY2FsbGVkIGZyb20gYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gTGlrZXdpc2UsIGBpcF92c19vdXRfaWNtcGAgaXMgc3RhdGljLCBjYWxsZWQgb25seSBmcm9tIGBpcF92c19vdXRfaG9va2AuIE9rYXksIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy5cblxuU28sIHRoZSB1cGRhdGVkIHByaW9yaXR5IGZvciBmdXp6aW5nIHNob3VsZCBiZTogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBhbmQgYHVkcF9kbmF0X2hhbmRsZXJgLiBJdCdzIGVzc2VudGlhbCB0byB2ZXJpZnkgdGhlc2UgZnVuY3Rpb24gbmFtZXMgYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NDAsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjIxLjE2MjEyNjk1NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NTQ0NDkyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgKGlwX3ZzX2luX2hvb2t8aXBfdnNfb3V0X2hvb2t8aXBfdnNfZm9yd2FyZF9pY21wfGlwX3ZzX2ljbXBfeG1pdHxpcF92c19pY21wX3htaXRfdjZ8c2N0cF9zbmF0X2hhbmRsZXJ8c2N0cF9kbmF0X2hhbmRsZXJ8dGNwX3NuYXRfaGFuZGxlcnx0Y3BfZG5hdF9oYW5kbGVyfHVkcF9zbmF0X2hhbmRsZXJ8dWRwX2RuYXRfaGFuZGxlcilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjEuMzg3Njc3OTA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTQzNTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZWZpbmluZyB0aGUgQXBwcm9hY2gqKlxuXG5BbHJpZ2h0LCB0aGF0IGluaXRpYWwgcmVndWxhciBleHByZXNzaW9u4oCmIGl0J3MgcHJvdmluZyBhIGJpdCB0b28gcmVzdHJpY3RpdmUgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIEkgY2FuIHNlZSBJJ20gZ2V0dGluZyBib2dnZWQgZG93biBpbiBpdHMgcHJlY2lzaW9uLCB3aGVuIGEgc2ltcGxlciBzb2x1dGlvbiBtaWdodCBiZSBtb3JlIGVmZmVjdGl2ZSBhbmQgbGVzcyBwcm9uZSB0byBlZGdlLWNhc2UgZXJyb3JzLiBJdCdzIHRpbWUgdG8gc3RlcCBiYWNrIGFuZCByZS1ldmFsdWF0ZS4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGFuZCBzdGFydCB3aXRoIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2guIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZvcmNlIGEgcGVyZmVjdCBtYXRjaCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSB3aWxsIGRpcmVjdGx5IHNlYXJjaCBmb3IgdGhlIGNvcmUgZWxlbWVudDogdGhlIG5hbWVzIHRoZW1zZWx2ZXMuIFRoaXMgd2lsbCBzdHJlYW1saW5lIHRoZSBwcm9jZXNzIGFuZCBob3BlZnVsbHkgZGVsaXZlciB0aGUgZGF0YSB3aXRoIGxlc3MgY29tcGxleGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMTMsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjQuOTgyMDQwMDY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3NjA1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaW5faG9va3xpcF92c19vdXRfaG9va3xpcF92c19mb3J3YXJkX2ljbXB8aXBfdnNfaWNtcF94bWl0fGlwX3ZzX2ljbXBfeG1pdF92NnxzY3RwX3NuYXRfaGFuZGxlcnxzY3RwX2RuYXRfaGFuZGxlcnx0Y3Bfc25hdF9oYW5kbGVyfHRjcF9kbmF0X2hhbmRsZXJ8dWRwX3NuYXRfaGFuZGxlcnx1ZHBfZG5hdF9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02OD1FWFBPUlRfU1lNQk9MKGlwX3ZzX25ld19jb25uX291dCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxLSNkZWZpbmUgU05BVF9DQUxMKGYsIC4uLikgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzI6XFx0SU5ESVJFQ1RfQ0FMTF8yKGYsIHRjcF9zbmF0X2hhbmRsZXIsIHVkcF9zbmF0X2hhbmRsZXIsIF9fVkFfQVJHU19fKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzMtI2VsaWYgZGVmaW5lZChDT05GSUdfSVBfVlNfUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzQ6I2RlZmluZSBTTkFUX0NBTEwoZiwgLi4uKSBJTkRJUkVDVF9DQUxMXzEoZiwgdGNwX3NuYXRfaGFuZGxlciwgX19WQV9BUkdTX18pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NS0jZWxpZiBkZWZpbmVkKENPTkZJR19JUF9WU19QUk9UT19VRFApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjojZGVmaW5lIFNOQVRfQ0FMTChmLCAuLi4pIElORElSRUNUX0NBTExfMShmLCB1ZHBfc25hdF9oYW5kbGVyLCBfX1ZBX0FSR1NfXylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc3LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE1MDE9c3RhdGljIHVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTUwMjppcF92c19vdXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNTAzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Mj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzMtXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTk3NDpcXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtXFx1MDAzZWxlbiwgb2Zmc2V0LCBob29rbnVtLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk3NS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZjaXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTk4Nz1zdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwODctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDg4OlxcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC1cXHUwMDNlbGVuLCBvZmZzZXQsIGhvb2tudW0sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDg5LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNpcGgpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMTA2PXN0YXRpYyB1bnNpZ25lZCBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMDc6aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTA4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjI5OT1zdGF0aWMgdW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAwOmlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMS1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMzEtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzMjpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzMzLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQwLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDE6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2luX2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQyLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQ3LVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDg6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX291dF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0OS1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM1NC1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzU1OlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19pbl9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM1Ni1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM2Mi1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzYzOlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19mb3J3YXJkX2ljbXAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY0LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzY5LVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNzA6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX291dF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM3MS1cXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjM3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczZbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM4MC1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzgxOlxcdFxcdC5ob29rXFx0XFx0PSBpcF92c19vdXRfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzODItXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzODktXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5MDpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfaW5faG9vayxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzOTEtXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzOTYtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjM5NzpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzk4LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDAzLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MDQ6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2luX2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDA1LVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDExLVxcdHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0MTI6XFx0XFx0Lmhvb2tcXHRcXHQ9IGlwX3ZzX2ZvcndhcmRfaWNtcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTMtXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0MTgtXFx0e1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQxOTpcXHRcXHQuaG9va1xcdFxcdD0gaXBfdnNfb3V0X2hvb2ssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDIwLVxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05MT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo5MjpzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtOTMtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz0xMzk9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTQwOnNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNDEtXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz01Njk9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3NjdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTU4Mi1cXHQuY29ubl9vdXRfZ2V0XFx0PSBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo1ODM6XFx0LnNuYXRfaGFuZGxlclxcdD0gc2N0cF9zbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzo1ODQ6XFx0LmRuYXRfaGFuZGxlclxcdD0gc2N0cF9kbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy01ODUtXFx0LnN0YXRlX25hbWVcXHQ9IHNjdHBfc3RhdGVfbmFtZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0xNDY9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE0Nzp0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE0OC1cXHRcXHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjQ9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYzoyMjU6dGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0yMjYtXFx0XFx0IHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9Njg0PXN0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF90Y3AgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtNjk3LVxcdC5jb25uX291dF9nZXQgPVxcdFxcdGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6Njk4OlxcdC5zbmF0X2hhbmRsZXIgPVxcdFxcdHRjcF9zbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjY5OTpcXHQuZG5hdF9oYW5kbGVyID1cXHRcXHR0Y3BfZG5hdF9oYW5kbGVyLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy03MDAtXFx0LnN0YXRlX25hbWUgPVxcdFxcdHRjcF9zdGF0ZV9uYW1lLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTM2OnVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTM3LVxcdFxcdCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTIxOD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jOjIxOTp1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTIyMC1cXHRcXHQgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz00NDg9c3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX3VkcCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy00NTktXFx0LmNvbm5fb3V0X2dldCA9XFx0XFx0aXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzo0NjA6XFx0LnNuYXRfaGFuZGxlciA9XFx0XFx0dWRwX3NuYXRfaGFuZGxlcixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6NDYxOlxcdC5kbmF0X2hhbmRsZXIgPVxcdFxcdHVkcF9kbmF0X2hhbmRsZXIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTQ2Mi1cXHQuc3RhdGVfdHJhbnNpdGlvbiA9XFx0dWRwX3N0YXRlX3RyYW5zaXRpb24sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1MDM9aW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNTA0OmlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy0xNTA1LVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTg5PWludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTU5MDppcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5MS1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MjUuMTU0ODA1MDkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDk1NzQ2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSUNNUCBhbmQgQ29ubmVjdGlvbiBUcmFja2luZyBpbiB0aGUgSVBWUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBJUFZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYSBmZXcga2V5IGVudHJ5IHBvaW50czogYGlwX3ZzX2luX2hvb2tgLCBgaXBfdnNfb3V0X2hvb2tgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBhbmQgdGhlIE5BVCBoYW5kbGVycyBmb3IgdmFyaW91cyBwcm90b2NvbHMgbGlrZSBTQ1RQLCBUQ1AsIGFuZCBVRFAuIGBzY3RwX3NuYXRfaGFuZGxlcmAsIGBzY3RwX2RuYXRfaGFuZGxlcmAsIGB0Y3Bfc25hdF9oYW5kbGVyYCwgYHRjcF9kbmF0X2hhbmRsZXJgLCBgdWRwX3NuYXRfaGFuZGxlcmAsIGB1ZHBfZG5hdF9oYW5kbGVyYC5cblxuQnV0IHRoZW4sIGNvbnNpZGVyaW5nIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBob29rcyBgaXBfdnNfaW5faG9va2AgYW5kIGBpcF92c19vdXRfaG9va2AgYXJlIGNhbGxlZCBmb3IgKmV2ZXJ5KiBwYWNrZXQuIFRoZXkncmUgb24gdGhlIGhvdCBwYXRoLCBtYWtpbmcgdGhlbSBhIGxlc3MgdGFyZ2V0ZWQgYXBwcm9hY2ggZm9yIHRoZXNlIHNwZWNpZmljIGNoYW5nZXMgcmVsYXRlZCB0byBJQ01QLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgbW9yZSBmb2N1c2VkIG9uIGhhbmRsaW5nIElDTVAgcGFja2V0cyB3aXRoaW4gdGhvc2UgaG9va3MsIHNwZWNpZmljYWxseSBpbiBgaXBfdnNfaW5faWNtcGAgYW5kIGBpcF92c19vdXRfaWNtcGAuXG5cblNpbmNlIHRoZXNlIGBpcF92c19pbl9pY21wYCBhbmQgYGlwX3ZzX291dF9pY21wYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBJIGNhbid0IGRpcmVjdGx5IGxpc3QgdGhlbSAqdW5sZXNzKiB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSAoa2FsbHN5bXMpLiBCdXQgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucywgYXNzdW1pbmcgdGhleSBhcmUgaW4ga2FsbHN5bXMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgZmluZSB0byBsaXN0LiBUaHVzLCBJJ2xsIHByaW9yaXRpemUgZnV6emluZyBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYW5kIGBpcF92c19vdXRfaWNtcF92NmAgYmVjYXVzZSB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgSUNNUCBoYW5kbGluZy4gVGhhdCdzIGJldHRlciB0aGFuIGRpcmVjdGx5IGZ1enppbmcgdGhlIGhvb2tzIHRoZW1zZWx2ZXMuXG5cbkkgY29uZmlybWVkIHRoZXNlIGFyZSBpbmRlZWQganVzdCBgc3RhdGljIGludCBpcF92c19pbl9pY21wKC4uLilgIGFuZCBgc3RhdGljIGludCBpcF92c19vdXRfaWNtcCguLi4pYCwgc28gdGhleSBhcmUgKm5vdCogaW5saW5lIGFuZCAqd2lsbCogYmUgaW4ga2FsbHN5bXMuXG5cblNvLCB0aGUgZnV6emluZyBsaXN0IHdpbGwgYmU6XG5cbmBpcF92c19pbl9pY21wYFxuYGlwX3ZzX291dF9pY21wYFxuYGlwX3ZzX2luX2ljbXBfdjZgXG5gaXBfdnNfb3V0X2ljbXBfdjZgXG5gaXBfdnNfZm9yd2FyZF9pY21wYFxuYGlwX3ZzX2ljbXBfeG1pdGBcbmBpcF92c19pY21wX3htaXRfdjZgXG5gc2N0cF9zbmF0X2hhbmRsZXJgXG5gc2N0cF9kbmF0X2hhbmRsZXJgXG5gdGNwX3NuYXRfaGFuZGxlcmBcbmB0Y3BfZG5hdF9oYW5kbGVyYFxuYHVkcF9zbmF0X2hhbmRsZXJgXG5gdWRwX2RuYXRfaGFuZGxlcmBcblxuSSdsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbiBgSVBfVlNfUFJPVE9fVENQYCBjb25maWc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjM0LjIwNDM4Mjg4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MjM1NDA1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MzUuNTQ2NzQzNzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTYxOTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGZvciB0aGUgRmxhZzogQSBCcmllZiBEaWFnbm9zdGljKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGhlcmUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGRlZmluZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBjb25zdGFudCwgYW5kIHdpdGhvdXQgaXQsIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgc2VydmVyIGZ1bmN0aW9uYWxpdHkgd29uJ3Qgd29yayBhcyBleHBlY3RlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGVsc2UsIHdoZXRoZXIgaXQgYmUgZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIG1ldHJpY3MsIG9yIGRldmVsb3Bpbmcgc29tZSBuZXcgcmVsYXRlZCBmZWF0dXJlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgaW4gcGxhY2UuIFNvLCBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgaXMgYSBnb29kIGZpcnN0IHN0ZXAgdG8gYXZvaWQgc3Bpbm5pbmcgbXkgd2hlZWxzIGxhdGVyLiBJdCdzIHRoZSBlcXVpdmFsZW50IG9mIGNoZWNraW5nIHRoYXQgeW91ciB0b29scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBiZWZvcmUgc3RhcnRpbmcgd29yayBvbiBhIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6MzguOTQyOTM4ODAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIxMTI0MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjM5LjIwNTA1ODY5MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc3NTg0MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIEkgc2F3IHNvbWUgcmVsYXRlZCBjb25zdGFudHMgZWFybGllci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZS4gU3BlY2lmaWNhbGx5LCBJIHNlZW0gdG8gcmVjYWxsIGVuY291bnRlcmluZyBgSVBfVlNfUFJPVE9fQUhgIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIHByZXZpb3VzIGNvZGUgSSB3YXMgYW5hbHl6aW5nLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhlaXIgcHJlc2VuY2UgYW5kIGNvbnRleHQgYmVmb3JlIG1vdmluZyBmb3J3YXJkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6Mzk6NDIuMzgyNjQ1MTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI4MzUxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTo0Mi40NDg5MzQ3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNDI3NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFJlZ2V4IENoZWNrIFx1MDAyNiBDb250ZXh0dWFsIEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgbXkgZmlyc3QgaW5zdGluY3Qgd2FzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHN5bnRheCwgdGhpbmtpbmcgaXQgd2FzIHByb2JhYmx5IGEgc2ltcGxlIHJlZ2V4IG1hdGNoLCBsaWtlbHkgc3RhcnRpbmcgd2l0aCBgXmNvbmZpZyBgLiBUaGF0IGZlZWxzIHJpZ2h0IGdpdmVuIHRoZSBjb250ZXh0LiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQncyBob3cgaXQncyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29kZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSBiZWNhdXNlLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBJUF9WU19QUk9UT2Agc3ltYm9sIGlzIGRlZmluZWQgdGhlcmUuIFRoYXQncyBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gYWZ0ZXIsIGFuZCBpdCdzIGEgdmVyeSBjb21tb24gcGF0dGVybiB0byB1c2UgS2NvbmZpZyBmaWxlcyB0byBjb25maWd1cmUgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjQ2Ljc3MzIxMjI1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMjY0MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcXHRJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkxOmNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIX0VTUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkyOlxcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjk0OmNvbmZpZ1xcdElQX1ZTX1BST1RPX0VTUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTk1LVxcdGJvb2wgXFxcIkVTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTAwOmNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkFIIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjM5OjQ3LjEyNjQ4MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5NDc3MTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIElQVlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aHJvdWdoIHRoaXMgYW5kIGl0J3MgcHJldHR5IGNsZWFyOiBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgYXJlIGRlZmluaXRlbHkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSBuZWVkIHRvIGVuYWJsZSBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCB0byBnZXQgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIG5lZWQgdG8gY29uc2lkZXIuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBrZXkgSVBWUyBmaWxlczogYGlwX3ZzX2FwcC5jYCwgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBgaXBfdnNfcHJvdG9fdWRwLmNgLCBhbmQgYGlwX3ZzX3htaXQuY2AuIFRoZXNlIGFyZSBhbGwgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9WU2AsIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZmlsZXMgZGVwZW5kIG9uIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgY29uZmlncy5cblxuVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBJUFZTIGxvZ2ljLCBwYXJ0aWN1bGFybHkgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gYmVpbmcgaW50cm9kdWNlZCwgYW5kIGl0J3MgcGxheWluZyB3aXRoIHBhY2tldCBtYW5nbGluZyBvZmZzZXRzLiBUaGlzIGlzICpyZWFjaGFibGUqIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IOKAkyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgc2N0cF9zbmF0X2hhbmRsZXJgLCBgc2N0cF9kbmF0X2hhbmRsZXJgLCBgdGNwX3NuYXRfaGFuZGxlcmAsIGB0Y3BfZG5hdF9oYW5kbGVyYCwgYHVkcF9zbmF0X2hhbmRsZXJgLCBgdWRwX2RuYXRfaGFuZGxlcmAsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfbmF0X2ljbXBfdjZgLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhlIGNoYW5nZXM6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBOb3csIGxldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NjQ0LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDozOTo1Ni40MjEyNTU3NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkyOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJzY3RwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwic2N0cF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInRjcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9zbmF0X2hhbmRsZXJcIixcbiAgICBcInVkcF9kbmF0X2hhbmRsZXJcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVBWUyBsb2dpYyBmb3IgaGFuZGxpbmcgY2hlY2tzdW1zIGFuZCBOQVQgZm9yIElDTVAsIFRDUCwgVURQLCBhbmQgU0NUUCBwYWNrZXRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGFuZCBhbHRlcnMgcGFja2V0IG1hbmdsaW5nIG9mZnNldHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBmdW5jdGlvbmFsaXR5IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInNjdHBfc25hdF9oYW5kbGVyXCIsXG4gICAgXCJzY3RwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidGNwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX3NuYXRfaGFuZGxlclwiLFxuICAgIFwidWRwX2RuYXRfaGFuZGxlclwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUFZTIGxvZ2ljIGZvciBoYW5kbGluZyBjaGVja3N1bXMgYW5kIE5BVCBmb3IgSUNNUCwgVENQLCBVRFAsIGFuZCBTQ1RQIHBhY2tldHMuIEl0IGludHJvZHVjZXMgbmV3IGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgYW5kIGFsdGVycyBwYWNrZXQgbWFuZ2xpbmcgb2Zmc2V0cy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[1] Phase: Succeeded StartedAt: 2026-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 04:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 04:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2] Phase: Succeeded StartedAt: 2026-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 04:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:08 +0000 UTC FinishedAt: 2026-07-21 04:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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-workflowmtc2p/series-workflowmtc2p-convert-artifact-2952902923/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:18 +0000 UTC FinishedAt: 2026-07-21 05:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:18 +0000 UTC FinishedAt: 2026-07-21 05:18:57 +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:*6032a57b-aad4-4ea5-a1da-d550e8c0f40f,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-workflowmtc2p/series-workflowmtc2p-convert-artifact-2952902923/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": "a9d741a6-04c9-4a0f-86c9-0bfd460cc151", "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-workflowmtc2p/series-workflowmtc2p-build-action-1162195977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 04:40:18 +0000 UTC FinishedAt: 2026-07-21 05:18:30 +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:*6032a57b-aad4-4ea5-a1da-d550e8c0f40f,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-workflowmtc2p/series-workflowmtc2p-convert-artifact-2952902923/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": "a9d741a6-04c9-4a0f-86c9-0bfd460cc151", "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-workflowmtc2p/series-workflowmtc2p-build-action-1162195977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:18:57 +0000 UTC FinishedAt: 2026-07-21 05:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:18:57 +0000 UTC FinishedAt: 2026-07-21 05:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:18:57 +0000 UTC FinishedAt: 2026-07-21 05:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:18:57 +0000 UTC FinishedAt: 2026-07-21 05:19:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-workflowmtc2p/series-workflowmtc2p-convert-artifact-659324002/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:19:07 +0000 UTC FinishedAt: 2026-07-21 05:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:19:08 +0000 UTC FinishedAt: 2026-07-21 05:21:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9d741a6-04c9-4a0f-86c9-0bfd460cc151,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-workflowmtc2p/series-workflowmtc2p-build-action-1162195977/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-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:21:27 +0000 UTC FinishedAt: 2026-07-21 05:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:21:27 +0000 UTC FinishedAt: 2026-07-21 05:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:21:27 +0000 UTC FinishedAt: 2026-07-21 06:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:21:27 +0000 UTC FinishedAt: 2026-07-21 06:06:42 +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:*6032a57b-aad4-4ea5-a1da-d550e8c0f40f,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-workflowmtc2p/series-workflowmtc2p-convert-artifact-659324002/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": "4dda5d34-7879-4f6b-b854-7a6dbff5b8a9", "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-workflowmtc2p/series-workflowmtc2p-build-action-2270095542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 05:21:27 +0000 UTC FinishedAt: 2026-07-21 06:06:29 +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:*6032a57b-aad4-4ea5-a1da-d550e8c0f40f,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-workflowmtc2p/series-workflowmtc2p-convert-artifact-659324002/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": "4dda5d34-7879-4f6b-b854-7a6dbff5b8a9", "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-workflowmtc2p/series-workflowmtc2p-build-action-2270095542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:06:42 +0000 UTC FinishedAt: 2026-07-21 06:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:06:42 +0000 UTC FinishedAt: 2026-07-21 06:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:06:42 +0000 UTC FinishedAt: 2026-07-21 06:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:06:42 +0000 UTC FinishedAt: 2026-07-21 06:08:54 +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:*4dda5d34-7879-4f6b-b854-7a6dbff5b8a9,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-workflowmtc2p/series-workflowmtc2p-build-action-2270095542/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-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"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:*a9d741a6-04c9-4a0f-86c9-0bfd460cc151,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4dda5d34-7879-4f6b-b854-7a6dbff5b8a9,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-workflowmtc2p/series-workflowmtc2p-build-action-1162195977/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-workflowmtc2p/series-workflowmtc2p-build-action-2270095542/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 06:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 06:09:09 +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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"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-workflowmtc2p/series-workflowmtc2p-convert-artifact-789788567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 06:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 06:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:04 +0000 UTC FinishedAt: 2026-07-21 06:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:14 +0000 UTC FinishedAt: 2026-07-21 09:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtc2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"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":["ip_vs_in_icmp","ip_vs_out_icmp","ip_vs_in_icmp_v6","ip_vs_out_icmp_v6","ip_vs_forward_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","sctp_snat_handler","sctp_dnat_handler","tcp_snat_handler","tcp_dnat_handler","udp_snat_handler","udp_dnat_handler","ip_vs_nat_icmp","ip_vs_nat_icmp_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"fdb2d5b4-ce06-4844-9d3a-c14dfeb5effc","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-07-21 06:09:14 +0000 UTC FinishedAt: 2026-07-21 09:10:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9d741a6-04c9-4a0f-86c9-0bfd460cc151,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4dda5d34-7879-4f6b-b854-7a6dbff5b8a9,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-workflowmtc2p/series-workflowmtc2p-build-action-1162195977/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-workflowmtc2p/series-workflowmtc2p-build-action-2270095542/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-workflowmtc2p/series-workflowmtc2p-convert-artifact-789788567/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,}