Name: series-workflowvkqb4 Phase: Succeeded StartedAt: 2026-08-01 19:45:43 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[0] Phase: Succeeded StartedAt: 2026-08-01 19:45:43 +0000 UTC FinishedAt: 2026-08-01 20:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 19:45:43 +0000 UTC FinishedAt: 2026-08-01 20:14:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CT_PROTO_SCTP", "NETFILTER_NETLINK_LOG", "NF_CT_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CT_PROTO_SCTP", "NETFILTER_NETLINK_LOG", "NF_CT_NETLINK" ], "series_id": "cb9efcc2-86a9-4afb-a0c2-42be38346301" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_sctp_packet", "nf_conntrack_tcp_packet", "nf_ct_l4proto_log_invalid" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfTE9HJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2YTFmZjEwMTFjODZiYzZiYTc4ZDdjOWU5OGJlMWE2ZjgwYjMzYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjEwOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXG5pbmRleCBhZDk2ODk2NTE2YjZmLi45NDM5NTk2ZjM0ZTZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuQEAgLTgzLDYgJiM0Mzs4MywxMiBAQCB2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4mIzQzO1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG4mIzQzO1x0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuIFx0dmFmLmZtdCA9IGZtdDtcbiBcdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXG5pbmRleCA3ZTEwZmE2NWNiZGQzLi5kZDkwZjFkZjlkNTVmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbkBAIC0zMzksNyAmIzQzOzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0dV9pbnQzMl90IG9mZnNldCwgY291bnQ7XG4gXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0dW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9O1xuJiM0MztcdGJvb2wgbG9nX2ludmFsaWQgPSBmYWxzZTtcbiBcdGJvb2wgaWdub3JlID0gZmFsc2U7XG4mIzQzO1x0dTggaW52YWxpZF90eXBlID0gMDtcbiBcbiBcdGlmIChzY3RwX2Vycm9yKHNrYiwgZGF0YW9mZiwgc3RhdGUpKVxuIFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbkBAIC00NTEsMTAgJiM0Mzs0NTMsOCBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0LyogSW52YWxpZCAqL1xuIFx0XHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xuLVx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4tXHRcdFx0XHRcdFx0ICBcJiMzNDtJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgIG9sZF9zdGF0ZSwgZGlyLCBzY2gtXHUwMDNldHlwZSk7XG4tXG4mIzQzO1x0XHRcdGxvZ19pbnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0aW52YWxpZF90eXBlID0gc2NoLVx1MDAzZXR5cGU7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXG5AQCAtNTI5LDYgJiM0Mzs1MjksMTAgQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChsb2dfaW52YWxpZClcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O0ludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBvbGRfc3RhdGUsIGRpciwgaW52YWxpZF90eXBlKTtcbiBvdXQ6XG4gXHRyZXR1cm4gLU5GX0FDQ0VQVDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uOTMyNzJhYWZkMjg5YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4MSBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuIFx0fVxuIH1cbiBcbi1fX3ByaW50Zig2LCA3KVxuLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4tXHRcdFx0XHRcdFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbi1cdFx0XHRcdFx0XHRjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4mIzQzO1x0TkZfVENQX0xPR19OT05FLFxuJiM0MztcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXG4mIzQzO1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxuJiM0MztcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4mIzQzO1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuJiM0MztcdFx0ICAgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdGxvZy1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4gdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi1cdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuJiM0MztcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiB7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFx1MDAyNmN0LVx1MDAzZXByb3RvLnRjcDtcbiBcdHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9IFx1MDAyNnN0YXRlLVx1MDAzZXNlZW5bZGlyXTtcbkBAIC02NDAsMzEgJiM0Mzs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRcdFx0c2VuZGVyLVx1MDAzZXRkX2VuZCA9IGVuZDtcbiBcdFx0XHRzZW5kZXItXHUwMDNlZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDtcbiBcbi1cdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCYjMzQ7LCBvdmVyc2hvdCk7XG4mIzQzO1x0XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHQgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgJiM0MzsgMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxuJiM0MztcdFx0XHRcdCAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgJiM0MzsgMSk7XG4gXHR9XG4gXG4gXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSkpXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O0FDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcJiMzNDssXG4tXHRcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKTtcbiBcbiBcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xuIFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIHx8XG4gXHRcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFpbl9yZWN2X3dpbilcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRcdFx0XHRcdCAgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX0FDS19VTkRFUixcbiYjNDM7XHRcdFx0XHRcdCAgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MTksMTEgJiM0Mzs3NjEsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0XHRcdFx0IGludCBpbmRleCxcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbiYjNDM7c3RhdGljIGJvb2wgX19jb2xkXG4mIzQzO25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleClcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xuQEAgLTczMiw3ICYjNDM7NzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSB8fFxuIFx0ICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogV2UgZG9uJiMzOTt0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRFxuIFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAmIzM5O2p1c3QgYmVjYXVzZSYjMzk7IGNvbm50cmFjayBkZWVtZWQgYSBGSU4vUlNUXG5AQCAtNzQ3LDcgJiM0Mzs3ODYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGNhc2UgVENQX0ZJTl9TRVQ6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXHUwMDI2XHUwMDI2XG5AQCAtNzU1LDcgJiM0Mzs3OTQsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdCAgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XG4gXHRcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNjIDEyMCAqIEhaKVxuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4gXHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xuQEAgLTc2NCwxNiAmIzQzOzgwMywxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuLVxuIFx0XHRcdFdSSVRFX09OQ0UoY3QtXHUwMDNldGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDtcbiBcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xuQEAgLTk3MCw3ICYjNDM7MTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRzdHJ1Y3QgbmZfdGNwX25ldCAqdG4gPSBuZl90Y3BfcGVybmV0KG5ldCk7XG4gXHRlbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0cztcbiYjNDM7XHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbiYjNDM7XHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGxvZyA9IHt9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICYjNDM7MTI5MiwxOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0fVxuIFxuIFx0cmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCxcbi1cdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgc3RhdGUpO1xuJiM0MztcdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgXHUwMDI2bG9nKTtcbiBcdHN3aXRjaCAocmVzKSB7XG4gXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4mIzQzO1x0XHRsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbiYjNDM7XHRcdGlmIChsb3dlcmVkX3RpbWVvdXQpXG4mIzQzO1x0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDS1wmIzM0Oyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY29ubnRyYWNrX3NjdHBfcGFja2V0JiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVx1MDAzZWxvY2spIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlciBvZiBwYWNrZXQgcHJvY2Vzc2luZy4gRnV6emluZyB0aGlzIGNoYW5nZSBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmVycmVkIGxvZ2dpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGNvbm50cmFjaywgU0NUUCBjb25udHJhY2ssIG5ldGxpbmsgbG9nZ2luZywgYW5kIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSAod2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgYXR0cmlidXRlIGR1bXBpbmcgZGVhZGxvY2sgbWVudGlvbmVkIGluIHRoZSBwYXRjaCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmExZmYxMDExYzg2YmM2YmE3OGQ3YzllOThiZTFhNmY4MGIzM2M1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMDoxMDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCmluZGV4IGFkOTY4OTY1MTZiNmYuLjk0Mzk1OTZmMzRlNmEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYwpAQCAtODMsNiAmIzQzOzgzLDEyIEBAIHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChsaWtlbHkobmV0LSZndDtjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpCiAJCXJldHVybjsKIAomIzQzOwkvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0bwomIzQzOwkgKiB0YWtlIGN0LSZndDtsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkCiYjNDM7CSAqIGNvbm50cmFjayBsb2dzIG11c3Qgb25seSBiZSBlbWl0dGVkIGFmdGVyIGRyb3BwaW5nIGN0LSZndDtsb2NrLgomIzQzOwkgKi8KJiM0MzsJbG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoJmFtcDtjdC0mZ3Q7bG9jayk7CiYjNDM7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAl2YWYuZm10ID0gZm10OwogCXZhZi52YSA9ICZhbXA7YXJnczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA3ZTEwZmE2NWNiZGQzLi5kZDkwZjFkZjlkNTVmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0zMzksNyAmIzQzOzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCXVfaW50MzJfdCBvZmZzZXQsIGNvdW50OwogCXVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJdW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9OwomIzQzOwlib29sIGxvZ19pbnZhbGlkID0gZmFsc2U7CiAJYm9vbCBpZ25vcmUgPSBmYWxzZTsKJiM0MzsJdTggaW52YWxpZF90eXBlID0gMDsKIAogCWlmIChzY3RwX2Vycm9yKHNrYiwgZGF0YW9mZiwgc3RhdGUpKQogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKQEAgLTQ1MSwxMCAmIzQzOzQ1Myw4IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCiAJCS8qIEludmFsaWQgKi8KIAkJaWYgKG5ld19zdGF0ZSA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHsKLQkJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCi0JCQkJCQkgICYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWQmIzM0OywKLQkJCQkJCSAgb2xkX3N0YXRlLCBkaXIsIHNjaC0mZ3Q7dHlwZSk7Ci0KJiM0MzsJCQlsb2dfaW52YWxpZCA9IHRydWU7CiYjNDM7CQkJaW52YWxpZF90eXBlID0gc2NoLSZndDt0eXBlOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKQEAgLTUyOSw2ICYjNDM7NTI5LDEwIEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwlpZiAobG9nX2ludmFsaWQpCiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O0ludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkJiMzNDssCiYjNDM7CQkJCQkgIG9sZF9zdGF0ZSwgZGlyLCBpbnZhbGlkX3R5cGUpOwogb3V0OgogCXJldHVybiAtTkZfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBjZWVlZDNkN2ZlNTIwLi45MzI3MmFhZmQyODliIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNDgwLDM3ICYjNDM7NDgwLDgxIEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiAJfQogfQogCi1fX3ByaW50Zig2LCA3KQotc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkJCWNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKLQkJCQkJCWNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciwKLQkJCQkJCWVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCi0JCQkJCQljb25zdCBjaGFyICpmbXQsIC4uLikKJiM0MztlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHsKJiM0MzsJTkZfVENQX0xPR19OT05FLAomIzQzOwlORl9UQ1BfTE9HX09WRVJTSE9ULAomIzQzOwlORl9UQ1BfTE9HX1NFUV9PVkVSLAomIzQzOwlORl9UQ1BfTE9HX0FDS19PVkVSLAomIzQzOwlORl9UQ1BfTE9HX1NFUV9VTkRFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfVU5ERVIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHsKJiM0MzsJZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlOwomIzQzOwl1MzIgdmFsdWU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uCiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiYjNDM7CQkgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZywKJiM0MzsJCSAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCwKJiM0MzsJCSAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLAomIzQzOwkJICAgICB1MzIgdmFsdWUpCiB7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKLQlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKLQl2YV9saXN0IGFyZ3M7CiAJYm9vbCBiZV9saWJlcmFsOwogCiAJYmVfbGliZXJhbCA9IHNlbmRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi0mZ3Q7dGNwX2JlX2xpYmVyYWw7CiAJaWYgKGJlX2xpYmVyYWwpCiAJCXJldHVybiBORkNUX1RDUF9BQ0NFUFQ7CiAKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbG9nLSZndDt0eXBlID0gdHlwZTsKJiM0MzsJbG9nLSZndDt2YWx1ZSA9IHZhbHVlOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobG9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19OT05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uCiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsCi0JICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpCiYjNDM7CSAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKIHsKIAlzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9ICZhbXA7Y3QtJmd0O3Byb3RvLnRjcDsKIAlzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmYW1wO3N0YXRlLSZndDtzZWVuW2Rpcl07CkBAIC02NDAsMzEgJiM0Mzs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJCQlzZW5kZXItJmd0O3RkX2VuZCA9IGVuZDsKIAkJCXNlbmRlci0mZ3Q7ZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDsKIAotCQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0Oywgb3ZlcnNob3QpOwomIzQzOwkJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpOwogCQl9CiAKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsCi0JCQkJCSAgJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcikmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX21heGVuZCAmIzQzOyAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCSAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwogCX0KIAogCWlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELAotCQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKIAogCS8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqLwogCWluX3JlY3Zfd2luID0gIXJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gfHwKIAkJICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWluX3JlY3Zfd2luKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZCkmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJCSAgIE5GX1RDUF9MT0dfU0VRX1VOREVSLAomIzQzOwkJCQkJICAgc2VuZGVyLSZndDt0ZF9lbmQgLSByZWNlaXZlci0mZ3Q7dGRfbWF4d2luIC0gMSk7CiAJaWYgKCFhZnRlcihzYWNrLCByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSkKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJICAmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZCkmIzM0OywKLQkJCQkJICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJCSAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzOwkJCQkJICAgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7CiAKIAkvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqLwogCWlmICghdGNwaC0mZ3Q7c3luKQpAQCAtNzE5LDExICYjNDM7NzYxLDggQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJcmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDsKIH0KIAotc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCSBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAotCQkJCQkgaW50IGluZGV4LAotCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzO3N0YXRpYyBib29sIF9fY29sZAomIzQzO25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleCkKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzOwogCWNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjsKQEAgLTczMiw3ICYjNDM7NzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAlpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cykpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCS8qIFdlIGRvbiYjMzk7dCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRUQKIAkgKiBzdGF0ZSBmb3IgbG9uZyB0aW1lICYjMzk7anVzdCBiZWNhdXNlJiMzOTsgY29ubnRyYWNrIGRlZW1lZCBhIEZJTi9SU1QKQEAgLTc0Nyw3ICYjNDM7Nzg2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJY2FzZSBUQ1BfRklOX1NFVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChjdC0mZ3Q7cHJvdG8udGNwLmxhc3RfZGlyICE9IGRpciAmYW1wOyZhbXA7CkBAIC03NTUsNyAmIzQzOzc5NCw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCSAgICAgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkgewogCQlleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7CiAJCWlmIChleHBpcmVzICZsdDsgMTIwICogSFopCi0JCQlyZXR1cm47CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCiAJCXRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKIAkJdGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7CkBAIC03NjQsMTYgJiM0Mzs4MDMsMTUgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAkJdGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7CiAJCWlmIChleHBpcmVzICZndDsgdGltZW91dCkgewotCQkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLAotCQkJCQkgICYjMzQ7cGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldSYjMzQ7LAotCQkJCQkgIGluZGV4LCBkaXIsIGN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCwgdGltZW91dCk7Ci0KIAkJCVdSSVRFX09OQ0UoY3QtJmd0O3RpbWVvdXQsIHRpbWVvdXQgJiM0MzsgbmZjdF90aW1lX3N0YW1wKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0gZWxzZSB7CiAJCWN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4OwogCQljdC0mZ3Q7cHJvdG8udGNwLmxhc3RfZGlyID0gZGlyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKiB0YWJsZSBvZiB2YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAtIFBVU0gsIEVDRSBhbmQgQ1dSIGFyZSBhbHdheXMgdmFsaWQgKi8KQEAgLTk3MCw3ICYjNDM7MTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZXQpOwogCWVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0czsKJiM0MzsJYm9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTsKIAllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzOwomIzQzOwlzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGxvZyA9IHt9OwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CiAJc3RydWN0IHRjcGhkciBfdGNwaDsKQEAgLTEyNTIsMTQgJiM0MzsxMjkyLDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJfQogCiAJcmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCwKLQkJCSAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7CiYjNDM7CQkJICAgIHNrYiwgZGF0YW9mZiwgdGgsICZhbXA7bG9nKTsKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgTkZDVF9UQ1BfSUdOT1JFOgogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2cpOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCWNhc2UgTkZDVF9UQ1BfSU5WQUxJRDoKLQkJbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTsKJiM0MzsJCWxvd2VyZWRfdGltZW91dCA9IG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwkJbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmYW1wO2xvZyk7CiYjNDM7CQlpZiAobG93ZXJlZF90aW1lb3V0KQomIzQzOwkJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLJiMzNDspOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0FDQ0VQVDoKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgbWVudGlvbmluZyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsgYW5kICYjMzQ7dW5kZXIgcmV2aWV3LiYjMzQ7ICBSaWdodCBhd2F5LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IG9yaWdpbmF0ZWQgZnJvbSBmdXp6aW5nIGVmZm9ydHMuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGlzIGlzIGFib3V0IGxvY2sgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgY3QtJmd0O2xvY2tgLiAgV2UmIzM5O3ZlIGdvdCBhbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY2FsbCBiZWluZyBtb3ZlZCBhcm91bmQuIFRoZSBwYXRjaCBhZGRzIGBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZCgmYW1wO2N0LSZndDtsb2NrKTtgIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgYWxvbmcgd2l0aCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmVhc29uaW5nLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgb3IgZGVhZGxvY2suICBJdCBsb29rcyBsaWtlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgY3QtJmd0O2xvY2tgLCBhbmQgYmVjYXVzZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY291bGQgcG90ZW50aWFsbHkgY2FsbCBgbmZuZXRsaW5rX2xvZ2AsIGl0IGNvdWxkIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHJlLWFjcXVpcmUgdGhlIHNhbWUgbG9jaywgbGVhZGluZyB0byBhIGRlYWRsb2NrLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCB0byBkZWZlciB0aGUgY2FsbCB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdW50aWwgYWZ0ZXIgYHNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spYC4gIEluIFRDUCwgdGhleSBhcmUgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgZm9yIHRoYXQuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGJ1ZyBmaXggYWRkcmVzc2luZyBhIGxvY2sgaW52ZXJzaW9uL2RlYWRsb2NrLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGZpeCBhbmQsIGNyaXRpY2FsbHksIGVuc3VyZSBubyBuZXcgcHJvYmxlbXMgYXJlIGludHJvZHVjZWQuICBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb2YgYGN0YC4gQWx0aG91Z2ggaXQgc2VlbXMgYGN0YCBpcyBzYWZlIHRvIHVzZSBoZXJlLgoKQSBxdWljayBzYW5pdHkgY2hlY2s6IHNpbmNlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB0YWtlcyBgY3RgIGFzIGFuIGFyZ3VtZW50LCBhbmQgdGhlIGNhbGxlciBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSwgdGhhdCBzaG91bGQgYmUgc2FmZS4gSG93ZXZlciwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNwZWNpZmljLiAgV2hpY2ggZnVuY3Rpb25zIGFyZSBub3cgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZz8gYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGB0Y3BfaW5fd2luZG93YCwgYW5kIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGNvbWUgaW1tZWRpYXRlbHkgdG8gbWluZC4gVGhleSYjMzk7cmUgYWxsIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjaGFuZ2VzLgoKRmluYWxseSwgY29uZmlndXJhdGlvbi4gIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBlZmZlY3RpdmUuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tfUFJPVE9TYCBhcmUgZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcgVENQIGFuZCBTQ1RQLiAgQWx0aG91Z2ggaW4gbmV3ZXIga2VybmVscyBTQ1RQIGNvbm50cmFjayBtYXkgYmUgYnVpbHQgaW50byBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGF1ZGllbmNlIGlzIGFub3RoZXIgZXhwZXJ0OgoKKipOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmc6IFNDVFAgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBJIGtub3cgd2UgYWJzb2x1dGVseSBuZWVkIGBORl9DT05OVFJBQ0tgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwuIE5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wsIG9yIFNDVFAuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBgTkZfQ1RfUFJPVE9fU0NUUGAgdG8gcHJvcGVybHkgaGFuZGxlIGNvbm5lY3Rpb25zIHVzaW5nIHRoYXQgcHJvdG9jb2wuIExldCBtZSBqdXN0IHBhdXNlIGZvciBhIHNlY29uZCwgaG9sZCBvbi4uLiBpdCYjMzk7cyBqdXN0IGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlIGNoZWNrIGlmIHRoZSBgTkZfQ1RfUFJPVE9fU0NUUGAgbW9kdWxlIGlzIGV2ZW4gYXZhaWxhYmxlIGluIHRoaXMga2VybmVsIHZlcnNpb24sIG9yIGlmIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIE9rYXksIGxldCBtZSB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTk4PWNvbmZpZyBORl9DVF9QUk9UT19HUkVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjAwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIwMTpjb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMi1cdGJvb2wgJiMzOTtTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgaXMgaW5kZWVkIGEgdmFsaWQgcHJvdG9jb2wgaWRlbnRpZmllci4gR29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFsc28gbWVudGlvbnMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIE5hdHVyYWxseSwgZm9yIHRoaXMgbG9nZ2luZyB0byBhY3R1YWxseSAqaGFwcGVuKiwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2xvZ19pbnZhbGlkYCBtdXN0IGJlIGVuYWJsZWQgdmlhIHN5c2N0bC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci4KCk5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxvY2tkZXAgaXNzdWUsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIENoYW5naW5nIGxvY2tpbmcgb3JkZXIgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFRoZXkmIzM5O3JlIHVubG9ja2luZyAqYmVmb3JlKiBsb2dnaW5nIGluIHRoaXMgaW5zdGFuY2UsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gdG8gYXZvaWQgaG9sZGluZyBsb2NrcyBsb25nZXIgdGhhbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gQnV04oCmIGRvZXMgdGhpcyBhbHNvIGFmZmVjdCB0aGUgKmNvbnRyb2wgZmxvdyogb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nPyAKClllcywgaXQgbG9va3MgbGlrZSBpdC4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBub3cgcmV0dXJucyAqYWZ0ZXIqIHVubG9ja2luZyBhbmQgbG9nZ2luZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIHJlb3JkZXJpbmcgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgbG9jayByZW9yZGVyaW5nLCBjb21iaW5lZCB3aXRoIHRoZSBjaGFuZ2VkIHJldHVybiBwb2ludCwgbWFrZXMgbWUgdGhpbmsgdGhhdCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgY3JvcCB1cC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuCgpJIHNob3VsZCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXkmIzM5O3JlIHN0YXRpYyBvciBleHBvcnRlZC9nbG9iYWwuIFRoYXQgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk4OS1cdGNhc2UgSVBQUk9UT19TQ1RQOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE5OTA6XHRcdHJldHVybiBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTkxLVx0XHRcdFx0XHRcdGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0yOTU9c3RhdGljIGJvb2wgc2N0cF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjYtLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC1ORl9BQ0NFUFQgZm9yIGludmFsaWQuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MzI3OmludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTMyOC1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBGdW5jdGlvbiBTY29wZSBhbmQgVmlzaWJpbGl0eSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHNjb3BlLiBUaGVzZSBhcmUgKmdsb2JhbCogZnVuY3Rpb25zLCBvciBhdCBsZWFzdCwgbm9uLXN0YXRpYyBvbmVzIHRoYXQgaGF2ZSB2aXNpYmlsaXR5IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhY2Nlc3NpYmxlIGZyb20gZGlmZmVyZW50IGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGhhcyBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBkZXNpZ246IEkgbmVlZCB0byBiZSAqdmVyeSogbWluZGZ1bCBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIElmIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8gbWFrZSBwdWJsaWMsIEkgbmVlZCB0byBjb25zaWRlciBuYW1pbmcgY29udmVudGlvbnMuIEl0IGFsc28gdGVsbHMgbWUgYSBsaXR0bGUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZTsgaWYgdGhleSBhcmUgYmVpbmcgdXNlZCBhY3Jvc3MgZmlsZXMsIHRoaXMgd2lsbCBoYXZlIGFuIGVmZmVjdCBvbiB2ZXJzaW9uaW5nIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGF0IEkgc2hvdWxkIGJlIGRvaW5nIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHRlc3RlZCwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtaWdodCBhZmZlY3Qgb3RoZXIgY29kZSBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcdFx0cmV0dXJuIG5mX2Nvbm50cmFja190Y3BfcGFja2V0KGN0LCBza2IsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cdFx0XHRcdFx0ICAgICAgIGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk5MD1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwMC0vKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMDAxOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDAyLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqTmF2aWdhdGluZyBDb25udHJhY2sgU3RydWN0dXJlcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIFJpZ2h0LCB0aGUgZW50aXRpZXMgdW5kZXIgY29uc2lkZXJhdGlvbiBhcmUgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBkeW5hbWljIGJlaGF2aW9yIGludm9sdmVkIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSG1tLCBidXQgaGFuZyBvbiwgSSBzZWUgdGhhdCBib3RoIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGFuZCBgdGNwX2luX3dpbmRvd2AgYXJlIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyEgT2theSwgc28gdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzb21ld2hhdC4gTXkgcHJpbWFyeSB0YXJnZXRzIG5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGFyZSBkZWZpbml0ZWx5IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGZ1cnRoZXIuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkmIzM5O2xsIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXJlIGVuYWJsZWQuIEFuZCBvZiBjb3Vyc2UsIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcmUgbGlrZWx5IGFsc28gcmVsZXZhbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhdHRlciBjYXJlZnVsbHkgYXMgaXQgbWlnaHQgb3BlbiB1cCBzb21lIGFkZGl0aW9uYWwgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkLiBDaGVja2luZyB0aGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NPTk5UUkFDS2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSA4MiwgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiByZXNpZGVzLiBJIGtub3cgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgYGRlcGVuZHMgb25gIGZvcm1hdDsgaG9wZWZ1bGx5LCBpdCYjMzk7cyBub3QgYnVyaWVkIHRvbyBkZWVwIGluIGFuIGBpZmAgYmxvY2suIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciB1bmRlcmx5aW5nIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgcmVxdWlyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgcG9zc2libHkgb3B0aW1pemluZyB0aGUgbmV0ZmlsdGVyIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA3NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgODA6XHRcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cbiAgODE6XHRcbiAgODI6XHRjb25maWcgTkZfQ09OTlRSQUNLXG4gIDgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4gIDg0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgODU6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxuICA4NjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxuICA4NzpcdFx0aGVscFxuICA4ODpcdFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxuICA4OTpcdFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxuICA5MDpcdFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxuICA5MTpcdFxuICA5MjpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXG4gIDkzOlx0XHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XG4gIDk0Olx0XHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQmIzM5OyBiZWxvdykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBORVRGSUxURVIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoaXMgZGVwZW5kZW5jeSBkb2VzbiYjMzk7dCBzZWVtIHRvIGhpbmdlIG9uIGFueXRoaW5nICpleGNlcHQqIGBORVRGSUxURVJgIGl0c2VsZiBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbi4gTm8gY29tcGxleCBuZXN0ZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYE5GX0NUX1BST1RPX1NDVFBgIGFyb3VuZCBsaW5lIDIwMS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UsIGFuZCBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgbHVya2luZy4gVGltZSB0byBleGFtaW5lIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbiAxOTY6XHRcdGJvb2xcbiAxOTc6XHRcbiAxOTg6XHRjb25maWcgTkZfQ1RfUFJPVE9fR1JFXG4gMTk5Olx0XHRib29sXG4gMjAwOlx0XG4gMjAxOlx0Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbiAyMDI6XHRcdGJvb2wgJiMzOTtTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMjAzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIwNDpcdFx0ZGVmYXVsdCB5XG4gMjA1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBsYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb25cbiAyMDg6XHRcdCAgdHJhY2tpbmcgY29kZSB3aWxsIGJlIGFibGUgdG8gZG8gc3RhdGUgdHJhY2tpbmcgb24gU0NUUCBjb25uZWN0aW9ucy5cbiAyMDk6XHRcbiAyMTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMTE6XHRcbiAyMTI6XHRjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxuIDIxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKgoKT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWVhbnMgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGF0IGZpcnN0LiBBbmQgc2luY2Ugd2UmIzM5O3JlIGhlcmUsIGxldCYjMzk7cyBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9QUk9UT19TQ1RQYCBhcyB3ZWxsLiBXYWl0IGEgbWludXRlLCBgTkZfQ09OTlRSQUNLYCBpcyBhIHRyaXN0YXRlLCBzbyBhIHN0cmFpZ2h0ICYjMzQ7eSYjMzQ7IHNob3VsZCBiZSBmaW5lLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXRzZWxmIGlzIHNldCB0byAmIzM0O3kmIzM0Oy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIHNob3VsZCB0YWtlIGEgbG9vayBhdC4gQWgsIGBORl9DT05OVFJBQ0tfRVZFTlRTYCBsb29rZWQgbGlrZSBpdCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBsb2dnaW5nLCBidXQgbm8sIHRoZSBsb2dnaW5nIGlzIGFjdHVhbGx5IGhhbmRsZWQgYnkgYG5mbmV0bGlua19sb2dgLCB3aGljaCBtZWFucyB3ZSBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGZvciB0aGF0LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MTAwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0xMDEtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3NC1cdFx0ICAgICBjb3VudCAhPSAwKSB8fCAhc2NoLVx1MDAzZWxlbmd0aCkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3Ni1cdFx0XHRcdFx0XHQgIFwmIzM0OyVzIGZhaWxlZC4gY2h1bmsgbnVtICVkLCB0eXBlICVkLCBsZW4gJWQgZmxhZyAlZFxcblwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MzI3PWludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzUtXHQgICAgc2gtXHUwMDNldnRhZyAhPSBjdC1cdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjM3NjpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzctXHRcdFx0XHRcdCAgXCYjMzQ7dmVyaWZpY2F0aW9uIHRhZyBjaGVjayBmYWlsZWQgJXggdnMgJXggZm9yIGRpciAlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTMyLVx0aWYgKGxvZ19pbnZhbGlkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjUzMzpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzQtXHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyMy1cdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUyNDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyNS1cdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI4LVx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI5Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMwLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzMtXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MzQ6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzUtXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzgtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTM5Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQwLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0My1cdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDQ6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDUtXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1NC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTU1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1Ni1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3Ny1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTc4Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3OS1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5NS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExOTY6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7Y2hhbGxlbmdlLWFjayBpZ25vcmVkXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTctXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJiMzOTt0IGNoYW5nZSBzdGF0ZSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDAtXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDE6XHRcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtpbnZhbGlkIHJzdFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQyLVx0XHRcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNS1cdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMDY6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDctXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgU3ltYm9sKioKCkhtbSwgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIENvdWxkIGl0cyBleGlzdGVuY2Ugb3IgYmVoYXZpb3IgYmUgY29uZGl0aW9uYWw/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkPyBJIHNob3VsZCBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGF0IGNvZGUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA3My4gVGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdFx0cmV0dXJuO1xuICA2MTpcdFxuICA2MjpcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgNjM6XHRcdHZhZi5mbXQgPSBmbXQ7XG4gIDY0Olx0XHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuICA2NTpcdFxuICA2NjpcdFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVx1MDAzZXBmLCAwLCBza2IsIHN0YXRlLVx1MDAzZWluLCBzdGF0ZS1cdTAwM2VvdXQsXG4gIDY3Olx0XHRcdCAgICAgIE5VTEwsIFwmIzM0O25mX2N0X3Byb3RvXyVkOiAlcFYgXCYjMzQ7LCBwcm90b251bSwgXHUwMDI2dmFmKTtcbiAgNjg6XHRcdHZhX2VuZChhcmdzKTtcbiAgNjk6XHR9XG4gIDcwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDcxOlx0XG4gIDcyOlx0X19wcmludGYoNCwgNSlcbiAgNzM6XHR2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNzQ6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuICA3NTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDc2Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuICA3OTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuICA4MDpcdFx0dmFfbGlzdCBhcmdzO1xuICA4MTpcdFxuICA4MjpcdFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcbiAgODM6XHRcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiAgODQ6XHRcdFx0cmV0dXJuO1xuICA4NTpcdFxuICA4NjpcdFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cbiAgODc6XHRcdCAqIHRha2UgY3QtXHUwMDNlbG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZFxuICA4ODpcdFx0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbiAgODk6XHRcdCAqL1xuICA5MDpcdFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gIDkxOlx0XG4gIDkyOlx0XHR2YV9zdGFydChhcmdzLCBmbXQpO1xuICA5MzpcdFx0dmFmLmZtdCA9IGZtdDtcbiAgOTQ6XHRcdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG4gIDk1Olx0XG4gIDk2Olx0XHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXG4gIDk3Olx0XHRcdFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuICA5ODpcdFx0dmFfZW5kKGFyZ3MpO1xuICA5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTmV0ZmlsdGVyIHBhdGNoLiBJdCYjMzk7cyB1c2luZyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAsIHdoaWNoLCBJIGtub3csIHVsdGltYXRlbHkgY2FsbHMgYG5mX2xvZ19wYWNrZXRgLiBSaWdodCwgYG5mX2xvZ19wYWNrZXRgIGlzIGRlZmluZWQgaW4gYG5mX2xvZy5jYCwgd2hpY2ggZ2V0cyBidWlsdCBpZiBgTkVURklMVEVSYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZSBmb3IgZXZlcnl0aGluZy4gTm93LCBhIHNsaWdodCB3cmlua2xlIOKAkyBgbmZfbG9nX3BhY2tldGAgbWlnaHQgbmVlZCBhIGxvZ2dlciByZWdpc3RlcmVkLCBidXQgdGhlIGNvZGUgdXNpbmcgaXQgaXMgKmFsd2F5cyogY29tcGlsZWQgaWYgYE5GX0NPTk5UUkFDS2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIHRoaXMgY2hhbmdlIHNlZW0gdG8gYmUgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9QUk9UT19TQ1RQYC4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkZfQ09OTlRSQUNLYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCBzZWxlY3RzIGBORl9ERUZSQUdfSVBWNGAgYW5kIGBORl9ERUZSQUdfSVBWNmAsIHdoaWNoIGlzIGV4cGVjdGVkLCBhbmQgaXQmIzM5O3MgYSB0cmlzdGF0ZSwgc28ganVzdCBgTkZfQ09OTlRSQUNLYCBpcyBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG5mX2Nvbm50cmFja19wcm90by5jYCwgYG5mX2Nvbm50cmFja19wcm90b19zY3RwLmNgLCBhbmQgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEhtbSwgSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgZmV3IGZ1bmN0aW9uczogYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCwgYHRjcF9pbl93aW5kb3dgLCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuCgpBaCwgSSBzZWUgdGhlIGlzc3VlIG5vdy4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBsb2NrZGVwIGlzc3VlLiBJdCYjMzk7cyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHVudGlsIGFmdGVyIGBjdC0mZ3Q7bG9ja2AgaXMgcmVsZWFzZWQuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGlzLiBEZWZpbml0ZWx5IG5lZWRzIGZ1enppbmc7IGRlZmVycmluZyB0aGUgbG9nZ2luZyBjb3VsZCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciByYWNlcy4KCkkmIzM5O2xsIGtlZXAgYSBzaGFycCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBiZWNhdXNlIHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORl9DT05OVFJBQ0tgIGRvZXNuJiMzOTt0IHJlcXVpcmUgYE5GX0NPTk5UUkFDS19QUk9UT1NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgaXQgZG9lc24mIzM5O3QgLSBpdCBpbmNsdWRlcyBUQ1AuIFNDVFAgZG9lcyByZXF1aXJlIGBORl9DVF9QUk9UT19TQ1RQYC4gQW5kIGxldCYjMzk7cyBkb3VibGUgY2hlY2ssIGlzIGBORl9DVF9QUk9UT19UQ1BgIGV2ZW4gYSB0aGluZz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfUFJPVE9fVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkga25vdyBUQ1AgaXMgKmluaGVyZW50bHkqIHBhcnQgb2YgYE5GX0NPTk5UUkFDS2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHVzaW5nIGl0IGluIHByYWN0aWNlLiBEb2VzIGBORl9DT05OVFJBQ0tgIHJlcXVpcmUsIHNheSwgYElQX05GX0lQVEFCTEVTYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBJIGtub3cgY29ubnRyYWNrIGNhbiBiZSB1c2VkIHdpdGggaXB0YWJsZXMsIG5mdGFibGVzLCBvciBldmVuIHN0YW5kLWFsb25lIGlmIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBTeXprYWxsZXIgaXMgYSBrZXkgaGVyZTsgaXQmIzM5O3MgcHJvdmVuIGNhcGFibGUgb2YgdHJpZ2dlcmluZyBjb25udHJhY2sgYmVoYXZpb3JzLiBJIHJlY2FsbCBpdCBkb2VzIHRoaXMgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgZW5hYmxlZCwgb2Z0ZW4gd2l0aCBzaW1wbGUgcnVsZXMsIG9yIGV2ZW4ganVzdCBieSBzZW5kaW5nIHBhY2tldHMgd2hlbiBob29rcyBhcmUgaW4gcGxhY2UuCgpXYWl0LCBpdCYjMzk7cyBjb21pbmcgYmFjayB0byBtZSwgdGhvc2UgY29ubnRyYWNrIGhvb2tzIGFyZSBzb21ldGltZXMgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LCBvciB3aGVuIHJ1bGVzIGFyZSBhZGRlZC4gU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gaGFzIHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgTmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkuCgpTbywgdGFraW5nIHN0b2NrLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQsIGltcG9ydGFudGx5IGZvciB0aGlzIGNhc2UsIGBORl9DVF9QUk9UT19TQ1RQYC4KCkhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZnVsPyBGb3IgdHJpZ2dlcmluZyBsb2dnaW5nLCBgTkVURklMVEVSX05FVExJTktfTE9HYCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBQZXJoYXBzIGl0IGNhbiBoZWxwIG1lIHRyaWdnZXIgYG5mX2xvZ19wYWNrZXRgIHNwZWNpZmljYWxseSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBMb2dnaW5nIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBsb2dnaW5nIHBhdGgsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSW5pdGlhbGx5LCBJIHdhcyBjb25jZXJuZWQgdGhhdCB3aXRob3V0IGBORVRGSUxURVJfTkVUTElOS19MT0dgIGVuYWJsZWQsIHRoZSBgbmZfbG9nX3BhY2tldGAgZnVuY3Rpb24gbWlnaHQgc2ltcGx5IGRvIG5vdGhpbmcgb3IgcmV2ZXJ0IHRvIGEgZmFsbGJhY2sgbWVjaGFuaXNtLCBtYWtpbmcgdGhlIGVudGlyZSBleGVyY2lzZSBwb2ludGxlc3MuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBgbmZfbG9nX3BhY2tldGAgZGVwZW5kcyBvbiBhIHJlZ2lzdGVyZWQgbG9nZ2VyLiBJZiBubyBsb2dnZXIgaXMgcHJlc2VudCwgaXQgd2lsbCBpbmRlZWQgZG8gbm90aGluZyBhbmQgc2ltcGx5IHJldHVybi4KClRvIHRydWx5IGV4ZXJjaXNlIHRoZSBjb2RlIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgSSBuZWVkIGBuZXQtJmd0O2N0LnN5c2N0bF9sb2dfaW52YWxpZGAgdG8gYmUgbm9uLXplcm8uIEdvb2QgbmV3cywgU3l6a2FsbGVyIGNhbiBtYW5pcHVsYXRlIHN5c2N0bHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGJlaGF2ZSBzZW5zaWJseSBpZiB0aGVyZSYjMzk7cyBubyBsb2dnZXIgcmVnaXN0ZXJlZD8gWWVzLCBpdCBjYWxscyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG5mX2xvZ19wYWNrZXRgLiBFdmVuIHdpdGggdGhlIGxvZ2dlciBjaGVjayBpbiBgbmZfbG9nX3BhY2tldGAsIHRoZSBsb2NrZGVwIGFzc2VydCBhbmQgZGVmZXJyZWQgbG9nZ2luZyBsb2dpYyB3aXRoaW4gdGhlIGNhbGwgcGF0aCB3b3VsZCBzdGlsbCBleGVjdXRlIQoKU28sIHRoZSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGlzbiYjMzk7dCBhYnNvbHV0ZSB0byBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBIb3dldmVyLCBhZGRpbmcgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2Agc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG5ldCB0byBlbnN1cmUgdGhlIGVudGlyZSBsb2dnaW5nIHBhdGggaXMgdHJhdmVyc2VkIGR1cmluZyB0ZXN0aW5nLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBpdCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaDoKCiogICBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YAoqICAgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YAoKVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIHJlbGF0ZWQgdG8gU0NUUCBhbmQgVENQIHJlc3BlY3RpdmVseS4gV2hpbGUgbm90ICYjMzQ7aG90IHBhdGhzJiMzNDsgaW4gdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzZW5zZSAobGlrZSBgaXBfcmN2YCksIHRoZXkgKmFyZSogaG90IHBhdGhzIGZvciBjb25udHJhY2ssIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgYXJlIHRoZSB2ZXJ5IGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgbWFraW5nIHRoZW0gdGhlIGNvcnJlY3QgZm9jdXMuCgpPaCwgYW5kIHRoZXJlJiMzOTtzIGFsc28gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBJdCYjMzk7cyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uIGluIHRoZSByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTcyPV9fcHJpbnRmKDQsIDUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTktfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzoxMDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTEwMS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc2Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3Ny1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzItXHRpZiAobG9nX2ludmFsaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NTMzOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUzNC1cdFx0XHRcdFx0ICBcJiMzNDtJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz01MTc9c3RhdGljIHZvaWQgbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTIzLVx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI1LVx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjgtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mjk6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzAtXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMy1cdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNS1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzOC1cdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mzk6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDAtXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQzLVx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU0NDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0NS1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTEwMDE9aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU0LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNTU6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU2LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1wmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc3LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNzg6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc5LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1wmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTk1LVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE5NjpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5Ny1cdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBEb24mIzM5O3QgY2hhbmdlIHN0YXRlICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0MC1cdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTI0MTpcdFx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2ludmFsaWQgcnN0XCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXHRcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzA1LVx0XHRpZiAobG93ZXJlZF90aW1lb3V0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTMwNjpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNy1cdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgYW5kIE5ldGZpbHRlciBMb2dnaW5nKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGluZGVlZCBleHBvcnRlZCDigJMgZ29vZCwgdGhhdCBjb25maXJtcyBhIGtleSBwb2ludC4gTXkgZm9jdXMsIHRoZXJlZm9yZSwgaXMgbm93IG5hcnJvd2VkIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLgoKTm93LCByZWdhcmRpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgSSBoYXZlIGEgcHJlbGltaW5hcnkgbGlzdDogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX1BST1RPX1NDVFBgLCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZzsgdGhlIGNvbW1lbnQgZXhwbGljaXRseSBtZW50aW9ucyBgbmZuZXRsaW5rX2xvZ2AgYW5kIGl0cyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcsIHNvIEkgd2FudCB0byBjb25maXJtIHRoYXQgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBIb2xkIG9uLCBgbmZuZXRsaW5rX2xvZ2AgbG9va3MgdG8gYmUgYSBtb2R1bGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IEkgaGF2ZSB0aGUgZXhhY3QgY29uZmlnIG5hbWUsIHJhdGhlciB0aGFuIGFzc3VtaW5nIGl0IGlzIGFzIHdyaXR0ZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENvbm50cmFjayBhbmQgTG9nZ2luZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgY29ycmVjdC4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORl9DT05OVFJBQ0tfRVZFTlRTYC4gQWx0aG91Z2ggaXQmIzM5O3Mgbm90ICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIHRoZSBsb2dnaW5nIGl0c2VsZiwgSSB3b25kZXIgaWYgaXQgcGxheXMgYSByb2xlIGluIHRoZSBhdHRyaWJ1dGUgZHVtcGluZyB0aGF0IHRoZSBjb21tZW50IG1lbnRpb25zLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgbm90ZXMsICYjMzQ7bmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gdGFrZSBjdC0mZ3Q7bG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSYjMzQ7LgoKQXR0cmlidXRlIGR1bXBpbmcsIGFzIEkgdW5kZXJzdGFuZCBpdCwgb2NjdXJzIHdoZW4gYG5mbmV0bGlua19sb2dgIGxvZ3MgYSBwYWNrZXQgYW5kIGluY2x1ZGVzIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gU28sIG15IGxpbmUgb2YgdGhvdWdodCBpczogZG9lcyBgbmZuZXRsaW5rX2xvZ2AgbmVlZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5zdXJlIHRoYXQgaXQgaW5jbHVkZXMgY29ubnRyYWNrIGluZm9ybWF0aW9uPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3RvX25sYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzM9dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy04Ni1cdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjg3Olx0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg4LVx0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzODk6c3RhdGljIGludCB0Y3BfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzOTAtXHRcdFx0IHN0cnVjdCBuZl9jb25uICpjdCwgYm9vbCBkZXN0cm95KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTE2NjA9Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcCA9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ1RfTkVUTElOSylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjE2Njg6XHQudG9fbmxhdHRyXHRcdD0gdGNwX3RvX25sYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NjktXHQuZnJvbV9ubGF0dHJcdFx0PSBubGF0dHJfdG9fdGNwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0NUX05FVExJTksgRGVwZW5kZW5jeSBEaXNjb3ZlcnkqKgoKUmlnaHQsIHNvIEkgc2VlIHRoaXMgY29kZSByZXF1aXJpbmcgYHRjcF90b19ubGF0dHJgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBhcyBsaWtlbHkgYmVpbmcgdGllZCB0byBOZXRsaW5rIGludGVncmF0aW9uLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX05GX0NUX05FVExJTktgIGhlcmUmIzM0Oy4gTWFrZXMgc2Vuc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIE5ldGxpbmsgaW50ZXJmYWNlIGhhcyBhbHdheXMgYmVlbiBjcnVjaWFsIGZvciBleHBvcnRpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0JiMzOTtzIHNldC4gTG9va3MgbGlrZSBJIHNob3VsZCBnbyBtYWtlIHN1cmUgYE5GX0NUX05FVExJTktgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRoZSBvYnZpb3VzIHN1c3BlY3QsIGFuZCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdXJwcmlzZXMgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DVF9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNTU9Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNjY6Y29uZmlnIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzczOmNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZSAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM4NTpjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgYSBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBub3cuIGBORl9DVF9ORVRMSU5LYCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlIHRvIHRyaWdnZXIgdGhlIGRlYWRsb2NrIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIAoKTGV0JiMzOTtzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEkgc2VlOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAsIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCwgb2YgY291cnNlLCB0aGUga2V5IG9uZSwgYE5GX0NUX05FVExJTktgLgoKRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBsb29rcyByb2NrIHNvbGlkOyBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgYWxsIHRoZSBjb3JyZWN0IHBpZWNlcyBpbiBwbGFjZS4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBpZiBgTkZfQ1RfTkVUTElOS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBtYXkgbmVlZCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFx0ICBvbiBob3cgcmVzdHJpY3RpdmUgeW91ciBydWxlc2V0IGlzLlxuIDM2MTpcdFx0ICBJZiB5b3UgYXJlIHVzaW5nIGEgdGZ0cCBjbGllbnQgYmVoaW5kIC1qIFNOQVQgb3IgLWogTUFTUVVFUkFESU5HXG4gMzYyOlx0XHQgIHlvdSB3aWxsIG5lZWQgdGhpcy5cbiAzNjM6XHRcbiAzNjQ6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMzY1Olx0XG4gMzY2Olx0Y29uZmlnIE5GX0NUX05FVExJTktcbiAzNjc6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4gMzY4Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNjk6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuIDM3NDpcdFx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4gMzc1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMzc3Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19USU1FT1VUXG4gMzc4Olx0XHRoZWxwXG4gMzc5Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjYwCgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBGaXggZm9yIENvbm50cmFjayBQYWNrZXQgTG9nZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIGxvY2tpbmcgaW4gdGhlIGNvbm50cmFjayBtb2R1bGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IGRlZmVycmluZyB0aGUgbG9nZ2luZyBhY3Rpb24gdW50aWwgKmFmdGVyKiB0aGUgY29ubnRyYWNrIGxvY2sgKGBjdC0mZ3Q7bG9ja2ApIGlzIHJlbGVhc2VkLiBUaGlzIG1lYW5zIGEgc2hpZnQgaW4gZXhlY3V0aW9uIG9yZGVyLCB3aGljaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgbmV3IHByb2JsZW1zLCBldmVuIGlmIGl0IGZpeGVzIHRoZSBkZWFkbG9jay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy4KCkxldCBtZSBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIHRoaXMgYmVoYXZpb3I6IEZpcnN0LCBgTkVURklMVEVSYCwgb2J2aW91c2x5LCBmb2xsb3dlZCBieSBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRoZSBmb3VuZGF0aW9uIGZvciBldmVyeXRoaW5nIGhlcmUuIFdlIG5lZWQgYE5GX0NUX1BST1RPX1NDVFBgIHRvIGRlYWwgd2l0aCBTQ1RQIHNwZWNpZmljYWxseS4gIFRoZW4sIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCBgTkZfQ1RfTkVUTElOS2AuCgpNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHN5bWJvbHMgdG8gZXZhbHVhdGU6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0IGxhc3Qgb25lIGlzIHRoZSBvbmUgSSBuZWVkIHRvIHNwZWNpZmljYWxseSBkb3VibGUtY2hlY2sgdGhlIG5hbWUgb2YuIFl1cCwgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGl0IGlzLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgb3RoZXIgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgY2FuZGlkYXRlcyBhcmUgYWxsIHN0YXRpYywgdGhlcmVmb3JlIGlubGluZWQgb3Igbm90IHZpc2libGUuIEZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyB0byBiZSB0aGUgcmlnaHQgYXBwcm9hY2guCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGNvdmVycyBldmVyeXRoaW5nIHJlbGV2YW50IGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCB0byBmdXp6IHRoaXMgY2hhbmdlIGVmZmVjdGl2ZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfTE9HJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfUFJPVE9fU0NUUCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja19zY3RwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2RlcCBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBieSBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBTQ1RQIGFuZCBUQ1AgY29ubnRyYWNrIHBhY2tldHMgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBsb2NrIChjdC1cdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NDIuMjI1MjExMDU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzE2OTkyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX1BST1RPX1NDVFBcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0xPR1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja19zY3RwX3BhY2tldFwiLFxuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIixcbiAgICBcIm5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXFx1MDAzZWxvY2spIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlciBvZiBwYWNrZXQgcHJvY2Vzc2luZy4gRnV6emluZyB0aGlzIGNoYW5nZSBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmVycmVkIGxvZ2dpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGNvbm50cmFjaywgU0NUUCBjb25udHJhY2ssIG5ldGxpbmsgbG9nZ2luZywgYW5kIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSAod2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgYXR0cmlidXRlIGR1bXBpbmcgZGVhZGxvY2sgbWVudGlvbmVkIGluIHRoZSBwYXRjaCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEwOjQyLjIyNTIxOTkwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNDU1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZhMWZmMTAxMWM4NmJjNmJhNzhkN2M5ZTk4YmUxYTZmODBiMzNjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjEwOjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXFxuaW5kZXggYWQ5Njg5NjUxNmI2Zi4uOTQzOTU5NmYzNGU2YSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xcbkBAIC04Myw2ICs4MywxMiBAQCB2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGxpa2VseShuZXQtXFx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cXG4rXFx0ICogdGFrZSBjdC1cXHUwMDNlbG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZFxcbitcXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHR2YV9zdGFydChhcmdzLCBmbXQpO1xcbiBcXHR2YWYuZm10ID0gZm10O1xcbiBcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXFxuaW5kZXggN2UxMGZhNjVjYmRkMy4uZGQ5MGYxZGY5ZDU1ZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcXG5AQCAtMzM5LDcgKzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHR1X2ludDMyX3Qgb2Zmc2V0LCBjb3VudDtcXG4gXFx0dW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9O1xcbitcXHRib29sIGxvZ19pbnZhbGlkID0gZmFsc2U7XFxuIFxcdGJvb2wgaWdub3JlID0gZmFsc2U7XFxuK1xcdHU4IGludmFsaWRfdHlwZSA9IDA7XFxuIFxcbiBcXHRpZiAoc2N0cF9lcnJvcihza2IsIGRhdGFvZmYsIHN0YXRlKSlcXG4gXFx0XFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XFxuQEAgLTQ1MSwxMCArNDUzLDggQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRcXHQvKiBJbnZhbGlkICovXFxuIFxcdFxcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XFxuLVxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBvbGRfc3RhdGUsIGRpciwgc2NoLVxcdTAwM2V0eXBlKTtcXG4tXFxuK1xcdFxcdFxcdGxvZ19pbnZhbGlkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0aW52YWxpZF90eXBlID0gc2NoLVxcdTAwM2V0eXBlO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTUyOSw2ICs1MjksMTAgQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAobG9nX2ludmFsaWQpXFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBvbGRfc3RhdGUsIGRpciwgaW52YWxpZF90eXBlKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuaW5kZXggY2VlZWQzZDdmZTUyMC4uOTMyNzJhYWZkMjg5YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuQEAgLTQ4MCwzNyArNDgwLDgxIEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuIFxcdH1cXG4gfVxcbiBcXG4tX19wcmludGYoNiwgNylcXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXFxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xcbitcXHRORl9UQ1BfTE9HX05PTkUsXFxuK1xcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcXG4rfTtcXG4rXFxuK3N0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cge1xcbitcXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XFxuK1xcdHUzMiB2YWx1ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4rXFx0XFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXFxuK1xcdFxcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4rXFx0XFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdCAgICAgdTMyIHZhbHVlKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuLVxcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xcbi1cXHR2YV9saXN0IGFyZ3M7XFxuIFxcdGJvb2wgYmVfbGliZXJhbDtcXG4gXFxuIFxcdGJlX2xpYmVyYWwgPSBzZW5kZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cXHUwMDNldGNwX2JlX2xpYmVyYWw7XFxuIFxcdGlmIChiZV9saWJlcmFsKVxcbiBcXHRcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiBcXG4tXFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4tXFx0dmFmLmZtdCA9IGZtdDtcXG4tXFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuLVxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4tXFx0dmFfZW5kKGFyZ3MpO1xcbi1cXG4rXFx0bG9nLVxcdTAwM2V0eXBlID0gdHlwZTtcXG4rXFx0bG9nLVxcdTAwM2V2YWx1ZSA9IHZhbHVlO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4re1xcbitcXHRzd2l0Y2ggKGxvZy1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gXFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcXG4tXFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK1xcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFxcdTAwMjZjdC1cXHUwMDNlcHJvdG8udGNwO1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXNlZW5bZGlyXTtcXG5AQCAtNjQwLDMxICs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuIFxcdFxcdFxcdHNlbmRlci1cXHUwMDNldGRfZW5kID0gZW5kO1xcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XFxuIFxcbi1cXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLCBvdmVyc2hvdCk7XFxuK1xcdFxcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgKyAxKTtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xcbiBcXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIHx8XFxuIFxcdFxcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghaW5fcmVjdl93aW4pXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVxcdTAwM2V0ZF9tYXh3aW4gLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbitcXHRcXHRcXHRcXHRcXHQgICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4gXFxuIFxcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXFxuIFxcdGlmICghdGNwaC1cXHUwMDNlc3luKVxcbkBAIC03MTksMTEgKzc2MSw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK3N0YXRpYyBib29sIF9fY29sZFxcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xcbkBAIC03MzIsNyArNzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpIHx8XFxuIFxcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcXG4gXFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxcbkBAIC03NDcsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGNhc2UgVENQX0ZJTl9TRVQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTc1NSw3ICs3OTQsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0ICAgICBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XFxuIFxcdFxcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcXG4gXFx0XFx0aWYgKGV4cGlyZXMgXFx1MDAzYyAxMjAgKiBIWilcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuIFxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbkBAIC03NjQsMTYgKzgwMywxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbi1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xcbiBcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xcbkBAIC05NzAsNyArMTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmV0KTtcXG4gXFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0cztcXG4rXFx0Ym9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTtcXG4gXFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcXG4rXFx0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBsb2cgPSB7fTtcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGg7XFxuIFxcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XFxuQEAgLTEyNTIsMTQgKzEyOTIsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0fVxcbiBcXG4gXFx0cmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCxcXG4tXFx0XFx0XFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcXG4rXFx0XFx0XFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFxcdTAwMjZsb2cpO1xcbiBcXHRzd2l0Y2ggKHJlcykge1xcbiBcXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9nKTtcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxcbi1cXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xcbitcXHRcXHRsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcdTAwMjZsb2cpO1xcbitcXHRcXHRpZiAobG93ZXJlZF90aW1lb3V0KVxcbitcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwibG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbiBcXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEwOjQyLjc2MDc5NDAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMDE4MTM5OTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9QUk9UT19TQ1RQXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRcIixcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVxcdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmExZmYxMDExYzg2YmM2YmE3OGQ3YzllOThiZTFhNmY4MGIzM2M1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDoxMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXG5pbmRleCBhZDk2ODk2NTE2YjZmLi45NDM5NTk2ZjM0ZTZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuQEAgLTgzLDYgKzgzLDEyIEBAIHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGxpa2VseShuZXQtXHUwMDNlY3Quc3lzY3RsX2xvZ19pbnZhbGlkID09IDApKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0b1xuK1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG4rXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cdTAwM2Vsb2NrLlxuK1x0ICovXG4rXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbitcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gXHR2YWYuZm10ID0gZm10O1xuIFx0dmFmLnZhID0gXHUwMDI2YXJncztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbmluZGV4IDdlMTBmYTY1Y2JkZDMuLmRkOTBmMWRmOWQ1NWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuY1xuQEAgLTMzOSw3ICszMzksOSBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdHVfaW50MzJfdCBvZmZzZXQsIGNvdW50O1xuIFx0dW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdHVuc2lnbmVkIGxvbmcgbWFwWzI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSB7IDAgfTtcbitcdGJvb2wgbG9nX2ludmFsaWQgPSBmYWxzZTtcbiBcdGJvb2wgaWdub3JlID0gZmFsc2U7XG4rXHR1OCBpbnZhbGlkX3R5cGUgPSAwO1xuIFxuIFx0aWYgKHNjdHBfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBzdGF0ZSkpXG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuQEAgLTQ1MSwxMCArNDUzLDggQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRcdC8qIEludmFsaWQgKi9cbiBcdFx0aWYgKG5ld19zdGF0ZSA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuLVx0XHRcdFx0XHRcdCAgXCJJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwiLFxuLVx0XHRcdFx0XHRcdCAgb2xkX3N0YXRlLCBkaXIsIHNjaC1cdTAwM2V0eXBlKTtcbi1cbitcdFx0XHRsb2dfaW52YWxpZCA9IHRydWU7XG4rXHRcdFx0aW52YWxpZF90eXBlID0gc2NoLVx1MDAzZXR5cGU7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXG5AQCAtNTI5LDYgKzUyOSwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRpZiAobG9nX2ludmFsaWQpXG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwiLFxuK1x0XHRcdFx0XHQgIG9sZF9zdGF0ZSwgZGlyLCBpbnZhbGlkX3R5cGUpO1xuIG91dDpcbiBcdHJldHVybiAtTkZfQUNDRVBUO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi45MzI3MmFhZmQyODliIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsODEgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4rXHRORl9UQ1BfTE9HX05PTkUsXG4rXHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuK1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbitcdE5GX1RDUF9MT0dfQUNLX09WRVIsXG4rXHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4rXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4rXHR1MzIgdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXG4rXHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbitcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4rXHRcdCAgICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuK3tcbitcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRcdFx0c2VuZGVyLVx1MDAzZXRkX2VuZCA9IGVuZDtcbiBcdFx0XHRzZW5kZXItXHUwMDNlZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDtcbiBcbi1cdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIiwgb3ZlcnNob3QpO1xuK1x0XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgIE5GX1RDUF9MT0dfT1ZFUlNIT1QsIG92ZXJzaG90KTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbitcdFx0XHRcdCAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItXHUwMDNldGRfZW5kICsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwiLFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuK1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdFx0XHRcdFx0ICAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFhZnRlcihzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4rXHRcdFx0XHRcdCAgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MTksMTEgKzc2MSw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHRcdCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuLVx0XHRcdFx0XHQgaW50IGluZGV4LFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuK3N0YXRpYyBib29sIF9fY29sZFxuK25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleClcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xuQEAgLTczMiw3ICs3NzEsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdGlmICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpIHx8XG4gXHQgICAgdGVzdF9iaXQoSVBTX0ZJWEVEX1RJTUVPVVRfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRFxuIFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxuQEAgLTc0Nyw3ICs3ODYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGNhc2UgVENQX0ZJTl9TRVQ6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAoY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyICE9IGRpciBcdTAwMjZcdTAwMjZcbkBAIC03NTUsNyArNzk0LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHQgICAgIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkge1xuIFx0XHRleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzYyAxMjAgKiBIWilcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4gXHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xuQEAgLTc2NCwxNiArODAzLDE1IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0XHR0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNlIHRpbWVvdXQpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsXG4tXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuLVxuIFx0XHRcdFdSSVRFX09OQ0UoY3QtXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcbiBcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLyogdGFibGUgb2YgdmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgLSBQVVNILCBFQ0UgYW5kIENXUiBhcmUgYWx3YXlzIHZhbGlkICovXG5AQCAtOTcwLDcgKzEwMDgsOSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0c3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZXQpO1xuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4rXHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGg7XG4gXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xuQEAgLTEyNTIsMTQgKzEyOTIsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbitcdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgXHUwMDI2bG9nKTtcbiBcdHN3aXRjaCAocmVzKSB7XG4gXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcbi1cdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcbitcdFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbitcdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbitcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1wiKTtcbiBcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcbiBcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMDo0Mi43NjA3OTgwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc4NDU3Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIFRoZSBjb21taXQgbWVzc2FnZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtZW50aW9uaW5nIFwic3l6LWNsdXN0ZXJcIiBhbmQgXCJ1bmRlciByZXZpZXcuXCIgIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyB0aGlzIGxpa2VseSBvcmlnaW5hdGVkIGZyb20gZnV6emluZyBlZmZvcnRzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgaXMgYWJvdXQgbG9jayBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGBjdC1cdTAwM2Vsb2NrYC4gIFdlJ3ZlIGdvdCBhbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY2FsbCBiZWluZyBtb3ZlZCBhcm91bmQuIFRoZSBwYXRjaCBhZGRzIGBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtgIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgYWxvbmcgd2l0aCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmVhc29uaW5nLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgb3IgZGVhZGxvY2suICBJdCBsb29rcyBsaWtlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgY3QtXHUwMDNlbG9ja2AsIGFuZCBiZWNhdXNlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGBuZm5ldGxpbmtfbG9nYCwgaXQgY291bGQgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gcmUtYWNxdWlyZSB0aGUgc2FtZSBsb2NrLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCB0byBkZWZlciB0aGUgY2FsbCB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdW50aWwgYWZ0ZXIgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spYC4gIEluIFRDUCwgdGhleSBhcmUgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgZm9yIHRoYXQuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHkuIEl0J3MgYSBidWcgZml4IGFkZHJlc3NpbmcgYSBsb2NrIGludmVyc2lvbi9kZWFkbG9jay4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBmaXggYW5kLCBjcml0aWNhbGx5LCBlbnN1cmUgbm8gbmV3IHByb2JsZW1zIGFyZSBpbnRyb2R1Y2VkLiAgV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb2YgYGN0YC4gQWx0aG91Z2ggaXQgc2VlbXMgYGN0YCBpcyBzYWZlIHRvIHVzZSBoZXJlLlxuXG5BIHF1aWNrIHNhbml0eSBjaGVjazogc2luY2UgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHRha2VzIGBjdGAgYXMgYW4gYXJndW1lbnQsIGFuZCB0aGUgY2FsbGVyIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlLCB0aGF0IHNob3VsZCBiZSBzYWZlLiBIb3dldmVyLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdG8gYmUgc3VyZS5cblxuTm93LCBsZXQncyBnZXQgc3BlY2lmaWMuICBXaGljaCBmdW5jdGlvbnMgYXJlIG5vdyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nPyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCwgYHRjcF9pbl93aW5kb3dgLCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgY29tZSBpbW1lZGlhdGVseSB0byBtaW5kLiBUaGV5J3JlIGFsbCBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlcy5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBlZmZlY3RpdmUuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tfUFJPVE9TYCBhcmUgZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcgVENQIGFuZCBTQ1RQLiAgQWx0aG91Z2ggaW4gbmV3ZXIga2VybmVscyBTQ1RQIGNvbm50cmFjayBtYXkgYmUgYnVpbHQgaW50byBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTQuNTQ1Mzc1NDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzYxNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTQuNjMxNzQzNTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MTcxNjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDpcblxuKipOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmc6IFNDVFAgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgSSBrbm93IHdlIGFic29sdXRlbHkgbmVlZCBgTkZfQ09OTlRSQUNLYCBlbmFibGVkLiBUaGF0J3MgZnVuZGFtZW50YWwuIE5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wsIG9yIFNDVFAuIEknbSB0aGlua2luZyB3ZSBuZWVkIGBORl9DVF9QUk9UT19TQ1RQYCB0byBwcm9wZXJseSBoYW5kbGUgY29ubmVjdGlvbnMgdXNpbmcgdGhhdCBwcm90b2NvbC4gTGV0IG1lIGp1c3QgcGF1c2UgZm9yIGEgc2Vjb25kLCBob2xkIG9uLi4uIGl0J3MganVzdCBnb29kIHByYWN0aWNlIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgYE5GX0NUX1BST1RPX1NDVFBgIG1vZHVsZSBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbCB2ZXJzaW9uLCBvciBpZiBpdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBPa2F5LCBsZXQgbWUgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMDo1OS4yODM0NjI0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1Njg5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xOTg9Y29uZmlnIE5GX0NUX1BST1RPX0dSRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjAxOmNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMi1cXHRib29sICdTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTkuMzUxMDM3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTcyMjMyOTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgaXMgaW5kZWVkIGEgdmFsaWQgcHJvdG9jb2wgaWRlbnRpZmllci4gR29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFsc28gbWVudGlvbnMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIE5hdHVyYWxseSwgZm9yIHRoaXMgbG9nZ2luZyB0byBhY3R1YWxseSAqaGFwcGVuKiwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2xvZ19pbnZhbGlkYCBtdXN0IGJlIGVuYWJsZWQgdmlhIHN5c2N0bC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci5cblxuTm93LCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbG9ja2RlcCBpc3N1ZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIHBvdGVudGlhbCBmdW5jdGlvbmFsIGNoYW5nZS4gQ2hhbmdpbmcgbG9ja2luZyBvcmRlciBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gVGhleSdyZSB1bmxvY2tpbmcgKmJlZm9yZSogbG9nZ2luZyBpbiB0aGlzIGluc3RhbmNlLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIHRvIGF2b2lkIGhvbGRpbmcgbG9ja3MgbG9uZ2VyIHRoYW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuIEJ1dOKApiBkb2VzIHRoaXMgYWxzbyBhZmZlY3QgdGhlICpjb250cm9sIGZsb3cqIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZz8gXG5cblllcywgaXQgbG9va3MgbGlrZSBpdC4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBub3cgcmV0dXJucyAqYWZ0ZXIqIHVubG9ja2luZyBhbmQgbG9nZ2luZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIHJlb3JkZXJpbmcgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgbG9jayByZW9yZGVyaW5nLCBjb21iaW5lZCB3aXRoIHRoZSBjaGFuZ2VkIHJldHVybiBwb2ludCwgbWFrZXMgbWUgdGhpbmsgdGhhdCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgY3JvcCB1cC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuSSBzaG91bGQgZm9jdXMgb24gYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAgYW5kIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIExldCdzIGNoZWNrIGlmIHRoZXkncmUgc3RhdGljIG9yIGV4cG9ydGVkL2dsb2JhbC4gVGhhdCB3aWxsIGFmZmVjdCBob3cgSSBhcHByb2FjaCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA2LjMyMzI3MzIwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1NTU4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3NjdHBfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5ODktXFx0Y2FzZSBJUFBST1RPX1NDVFA6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE5OTA6XFx0XFx0cmV0dXJuIG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTkxLVxcdFxcdFxcdFxcdFxcdFxcdGN0aW5mbywgc3RhdGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTI5NT1zdGF0aWMgYm9vbCBzY3RwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzI2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtTkZfQUNDRVBUIGZvciBpbnZhbGlkLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozMjc6aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTMyOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA2LjQ0MjgzNDgwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ2MDczNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIFNjb3BlIGFuZCBWaXNpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHNjb3BlLiBUaGVzZSBhcmUgKmdsb2JhbCogZnVuY3Rpb25zLCBvciBhdCBsZWFzdCwgbm9uLXN0YXRpYyBvbmVzIHRoYXQgaGF2ZSB2aXNpYmlsaXR5IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhhdCBtZWFucyB0aGV5J3JlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSBkaWZmZXJlbnQgY29tcGlsYXRpb24gdW5pdHMuIFRoaXMgaGFzIGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGRlc2lnbjogSSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSWYgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2UgcHVibGljLCBJIG5lZWQgdG8gY29uc2lkZXIgbmFtaW5nIGNvbnZlbnRpb25zLiBJdCBhbHNvIHRlbGxzIG1lIGEgbGl0dGxlIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU7IGlmIHRoZXkgYXJlIGJlaW5nIHVzZWQgYWNyb3NzIGZpbGVzLCB0aGlzIHdpbGwgaGF2ZSBhbiBlZmZlY3Qgb24gdmVyc2lvbmluZyBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEknbGwgbmVlZCB0byBjb25zaWRlciB3aGF0IEkgc2hvdWxkIGJlIGRvaW5nIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHRlc3RlZCwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtaWdodCBhZmZlY3Qgb3RoZXIgY29kZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA5LjcwNzQ0NjU2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzQzOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5NzYtXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcXHRcXHRyZXR1cm4gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cXHRcXHRcXHRcXHRcXHQgICAgICAgY3RpbmZvLCBzdGF0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05OTA9c3RhdGljIHZvaWQgbmZfY3RfdGNwX3N0YXRlX3Jlc2V0KHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwMC0vKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTAwMTppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEwMDItXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA5LjgyMzE5OTY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1MzcyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyBDb25udHJhY2sgU3RydWN0dXJlcyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBSaWdodCwgdGhlIGVudGl0aWVzIHVuZGVyIGNvbnNpZGVyYXRpb24gYXJlIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXJlJ3Mgc29tZSBkeW5hbWljIGJlaGF2aW9yIGludm9sdmVkIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSG1tLCBidXQgaGFuZyBvbiwgSSBzZWUgdGhhdCBib3RoIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGFuZCBgdGNwX2luX3dpbmRvd2AgYXJlIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyEgT2theSwgc28gdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzb21ld2hhdC4gTXkgcHJpbWFyeSB0YXJnZXRzIG5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGFyZSBkZWZpbml0ZWx5IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGZ1cnRoZXIuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSdsbCB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX1BST1RPX1NDVFBgIGFyZSBlbmFibGVkLiBBbmQgb2YgY291cnNlLCBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYXJlIGxpa2VseSBhbHNvIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhdHRlciBjYXJlZnVsbHkgYXMgaXQgbWlnaHQgb3BlbiB1cCBzb21lIGFkZGl0aW9uYWwgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkLiBDaGVja2luZyB0aGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTQuODk4NTc1MTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM2MTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjE0Ljk1OTk0MTc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExNTMzMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSA4MiwgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiByZXNpZGVzLiBJIGtub3cgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgd2lsbCB1c2UgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBmb3JtYXQ7IGhvcGVmdWxseSwgaXQncyBub3QgYnVyaWVkIHRvbyBkZWVwIGluIGFuIGBpZmAgYmxvY2suIExldCdzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IGNyaXRpY2FsIHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIHVuZGVybHlpbmcga2VybmVsIGZlYXR1cmVzIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyByZXF1aXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCBwb3NzaWJseSBvcHRpbWl6aW5nIHRoZSBuZXRmaWx0ZXIgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTguMjcxNDc4MDExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDc3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA4MDpcXHRcXHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXFxuICA4MTpcXHRcXG4gIDgyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tcXG4gIDgzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbiAgODQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA4NTpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG4gIDg2OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcXG4gIDg5OlxcdFxcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcXG4gIDkwOlxcdFxcdCAgaW50byBjb25uZWN0aW9ucy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXFxuICA5MzpcXHRcXHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XFxuICA5NDpcXHRcXHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnIGJlbG93KS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTguMjcxNjU2MDYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ3MTE1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTkVURklMVEVSIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBkZXBlbmRlbmN5IGRvZXNuJ3Qgc2VlbSB0byBoaW5nZSBvbiBhbnl0aGluZyAqZXhjZXB0KiBgTkVURklMVEVSYCBpdHNlbGYgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgaW5jbHVzaW9uLiBObyBjb21wbGV4IG5lc3RlZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXJvdW5kIGxpbmUgMjAxLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLCBhbmQgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZXhhbWluZSB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjIyLjc0NjM2OTc0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxuIDE5NjpcXHRcXHRib29sXFxuIDE5NzpcXHRcXG4gMTk4OlxcdGNvbmZpZyBORl9DVF9QUk9UT19HUkVcXG4gMTk5OlxcdFxcdGJvb2xcXG4gMjAwOlxcdFxcbiAyMDE6XFx0Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4gMjAyOlxcdFxcdGJvb2wgJ1NDVFAgcHJvdG9jb2wgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0J1xcbiAyMDM6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjA0OlxcdFxcdGRlZmF1bHQgeVxcbiAyMDU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgbGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uXFxuIDIwODpcXHRcXHQgIHRyYWNraW5nIGNvZGUgd2lsbCBiZSBhYmxlIHRvIGRvIHN0YXRlIHRyYWNraW5nIG9uIFNDVFAgY29ubmVjdGlvbnMuXFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjExOlxcdFxcbiAyMTI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG4gMjEzOlxcdFxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDIxNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMToyMi43NDY0NjgzMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwMTUwNzQwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWVhbnMgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGF0IGZpcnN0LiBBbmQgc2luY2Ugd2UncmUgaGVyZSwgbGV0J3MgZW5hYmxlIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXMgd2VsbC4gV2FpdCBhIG1pbnV0ZSwgYE5GX0NPTk5UUkFDS2AgaXMgYSB0cmlzdGF0ZSwgc28gYSBzdHJhaWdodCBcInlcIiBzaG91bGQgYmUgZmluZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRGSUxURVJgIGl0c2VsZiBpcyBzZXQgdG8gXCJ5XCIuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3Mgd2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0LiBBaCwgYE5GX0NPTk5UUkFDS19FVkVOVFNgIGxvb2tlZCBsaWtlIGl0ICptaWdodCogYmUgcmVsZXZhbnQgZm9yIGxvZ2dpbmcsIGJ1dCBubywgdGhlIGxvZ2dpbmcgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSBgbmZuZXRsaW5rX2xvZ2AsIHdoaWNoIG1lYW5zIHdlIG5lZWQgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgZm9yIHRoYXQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaGFzIGFueSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MzguNzYxNTQ2Mzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk5MzE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MTAwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtMTAxLSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzUtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzY6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc3LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUzMi1cXHRpZiAobG9nX2ludmFsaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjUzMzpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzQtXFx0XFx0XFx0XFx0XFx0ICBcXFwiSW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTIzLVxcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MjQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOC1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI5OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMwLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzMtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNDpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNS1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzOC1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzOTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDMtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE1NTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNTYtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGlnbm9yZWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNzctXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTc4OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3OS1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5NS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExOTY6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImNoYWxsZW5nZS1hY2sgaWdub3JlZFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTctXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJ3QgY2hhbmdlIHN0YXRlICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQwLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTI0MTpcXHRcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwiaW52YWxpZCByc3RcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQyLVxcdFxcdFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNS1cXHRcXHRpZiAobG93ZXJlZF90aW1lb3V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMDY6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDctXFx0XFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjM4Ljg1MjU0NjI1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2MzA1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBFeHBvcnRlZCBTeW1ib2wqKlxuXG5IbW0sIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBpcyBleHBvcnRlZCwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIENvdWxkIGl0cyBleGlzdGVuY2Ugb3IgYmVoYXZpb3IgYmUgY29uZGl0aW9uYWw/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkPyBJIHNob3VsZCBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGF0IGNvZGUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA3My4gVGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6NDQuNTE4ODU1MjU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXFxuICA4NzpcXHRcXHQgKiB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXFxuICA4ODpcXHRcXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4gIDg5OlxcdFxcdCAqL1xcbiAgOTA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDkzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA5NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxcbiAgOTc6XFx0XFx0XFx0XFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbiAgOTg6XFx0XFx0dmFfZW5kKGFyZ3MpO1xcbiAgOTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMTo0NC41MTg5OTI5OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTE0MDk4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgcGF0Y2guIEl0J3MgdXNpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgSSBrbm93LCB1bHRpbWF0ZWx5IGNhbGxzIGBuZl9sb2dfcGFja2V0YC4gUmlnaHQsIGBuZl9sb2dfcGFja2V0YCBpcyBkZWZpbmVkIGluIGBuZl9sb2cuY2AsIHdoaWNoIGdldHMgYnVpbHQgaWYgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGJhc2UgZm9yIGV2ZXJ5dGhpbmcuIE5vdywgYSBzbGlnaHQgd3JpbmtsZSDigJMgYG5mX2xvZ19wYWNrZXRgIG1pZ2h0IG5lZWQgYSBsb2dnZXIgcmVnaXN0ZXJlZCwgYnV0IHRoZSBjb2RlIHVzaW5nIGl0IGlzICphbHdheXMqIGNvbXBpbGVkIGlmIGBORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBjaGFuZ2Ugc2VlbSB0byBiZSBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORl9DT05OVFJBQ0tgIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXQgc2VsZWN0cyBgTkZfREVGUkFHX0lQVjRgIGFuZCBgTkZfREVGUkFHX0lQVjZgLCB3aGljaCBpcyBleHBlY3RlZCwgYW5kIGl0J3MgYSB0cmlzdGF0ZSwgc28ganVzdCBgTkZfQ09OTlRSQUNLYCBpcyBzdWZmaWNpZW50LlxuXG5MZXQncyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgdG91Y2hpbmcgYG5mX2Nvbm50cmFja19wcm90by5jYCwgYG5mX2Nvbm50cmFja19wcm90b19zY3RwLmNgLCBhbmQgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEhtbSwgSSBzZWUgaXQncyBtb2RpZnlpbmcgYSBmZXcgZnVuY3Rpb25zOiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAsIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBgdGNwX2luX3dpbmRvd2AsIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYC5cblxuQWgsIEkgc2VlIHRoZSBpc3N1ZSBub3cuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9ja2RlcCBpc3N1ZS4gSXQncyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHVudGlsIGFmdGVyIGBjdC1cdTAwM2Vsb2NrYCBpcyByZWxlYXNlZC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlci4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcy4gRGVmaW5pdGVseSBuZWVkcyBmdXp6aW5nOyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgY291bGQgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3RoZXIgcmFjZXMuXG5cbkknbGwga2VlcCBhIHNoYXJwIGZvY3VzIG9uIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGJlY2F1c2UgdGhlIGNvcmUgbG9naWMgaXMgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORl9DT05OVFJBQ0tgIGRvZXNuJ3QgcmVxdWlyZSBgTkZfQ09OTlRSQUNLX1BST1RPU2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBpdCBkb2Vzbid0IC0gaXQgaW5jbHVkZXMgVENQLiBTQ1RQIGRvZXMgcmVxdWlyZSBgTkZfQ1RfUFJPVE9fU0NUUGAuIEFuZCBsZXQncyBkb3VibGUgY2hlY2ssIGlzIGBORl9DVF9QUk9UT19UQ1BgIGV2ZW4gYSB0aGluZz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzozMS40MzMwOTQyNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE0OTgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjMxLjU0NzI1MjIyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM1NjQyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkga25vdyBUQ1AgaXMgKmluaGVyZW50bHkqIHBhcnQgb2YgYE5GX0NPTk5UUkFDS2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHVzaW5nIGl0IGluIHByYWN0aWNlLiBEb2VzIGBORl9DT05OVFJBQ0tgIHJlcXVpcmUsIHNheSwgYElQX05GX0lQVEFCTEVTYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBJIGtub3cgY29ubnRyYWNrIGNhbiBiZSB1c2VkIHdpdGggaXB0YWJsZXMsIG5mdGFibGVzLCBvciBldmVuIHN0YW5kLWFsb25lIGlmIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBTeXprYWxsZXIgaXMgYSBrZXkgaGVyZTsgaXQncyBwcm92ZW4gY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIGNvbm50cmFjayBiZWhhdmlvcnMuIEkgcmVjYWxsIGl0IGRvZXMgdGhpcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBgTkZfQ09OTlRSQUNLYCBlbmFibGVkLCBvZnRlbiB3aXRoIHNpbXBsZSBydWxlcywgb3IgZXZlbiBqdXN0IGJ5IHNlbmRpbmcgcGFja2V0cyB3aGVuIGhvb2tzIGFyZSBpbiBwbGFjZS5cblxuV2FpdCwgaXQncyBjb21pbmcgYmFjayB0byBtZSwgdGhvc2UgY29ubnRyYWNrIGhvb2tzIGFyZSBzb21ldGltZXMgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LCBvciB3aGVuIHJ1bGVzIGFyZSBhZGRlZC4gU3l6a2FsbGVyJ3MgZG9jdW1lbnRhdGlvbiBoYXMgc3BlY2lmaWMgZGVzY3JpcHRpb25zIGZvciBOZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eS5cblxuU28sIHRha2luZyBzdG9jaywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZTogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kLCBpbXBvcnRhbnRseSBmb3IgdGhpcyBjYXNlLCBgTkZfQ1RfUFJPVE9fU0NUUGAuXG5cbkhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZnVsPyBGb3IgdHJpZ2dlcmluZyBsb2dnaW5nLCBgTkVURklMVEVSX05FVExJTktfTE9HYCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBQZXJoYXBzIGl0IGNhbiBoZWxwIG1lIHRyaWdnZXIgYG5mX2xvZ19wYWNrZXRgIHNwZWNpZmljYWxseSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjM3LjE4Mjg5NzI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MDA3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTM6MzcuMjU5NDQyNTQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMDU0MjAyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgTG9nZ2luZyBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGxvZ2dpbmcgcGF0aCwgYW5kIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSW5pdGlhbGx5LCBJIHdhcyBjb25jZXJuZWQgdGhhdCB3aXRob3V0IGBORVRGSUxURVJfTkVUTElOS19MT0dgIGVuYWJsZWQsIHRoZSBgbmZfbG9nX3BhY2tldGAgZnVuY3Rpb24gbWlnaHQgc2ltcGx5IGRvIG5vdGhpbmcgb3IgcmV2ZXJ0IHRvIGEgZmFsbGJhY2sgbWVjaGFuaXNtLCBtYWtpbmcgdGhlIGVudGlyZSBleGVyY2lzZSBwb2ludGxlc3MuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIGBuZl9sb2dfcGFja2V0YCBkZXBlbmRzIG9uIGEgcmVnaXN0ZXJlZCBsb2dnZXIuIElmIG5vIGxvZ2dlciBpcyBwcmVzZW50LCBpdCB3aWxsIGluZGVlZCBkbyBub3RoaW5nIGFuZCBzaW1wbHkgcmV0dXJuLlxuXG5UbyB0cnVseSBleGVyY2lzZSB0aGUgY29kZSBpbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAsIEkgbmVlZCBgbmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZGAgdG8gYmUgbm9uLXplcm8uIEdvb2QgbmV3cywgU3l6a2FsbGVyIGNhbiBtYW5pcHVsYXRlIHN5c2N0bHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGJlaGF2ZSBzZW5zaWJseSBpZiB0aGVyZSdzIG5vIGxvZ2dlciByZWdpc3RlcmVkPyBZZXMsIGl0IGNhbGxzIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfbG9nX3BhY2tldGAuIEV2ZW4gd2l0aCB0aGUgbG9nZ2VyIGNoZWNrIGluIGBuZl9sb2dfcGFja2V0YCwgdGhlIGxvY2tkZXAgYXNzZXJ0IGFuZCBkZWZlcnJlZCBsb2dnaW5nIGxvZ2ljIHdpdGhpbiB0aGUgY2FsbCBwYXRoIHdvdWxkIHN0aWxsIGV4ZWN1dGUhXG5cblNvLCB0aGUgZGVwZW5kZW5jeSBvbiBgTkVURklMVEVSX05FVExJTktfTE9HYCBpc24ndCBhYnNvbHV0ZSB0byBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBIb3dldmVyLCBhZGRpbmcgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2Agc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG5ldCB0byBlbnN1cmUgdGhlIGVudGlyZSBsb2dnaW5nIHBhdGggaXMgdHJhdmVyc2VkIGR1cmluZyB0ZXN0aW5nLiBJJ20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGl0IGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaDpcblxuKiAgIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgXG4qICAgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YFxuXG5UaGVzZSBhcmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgcmVsYXRlZCB0byBTQ1RQIGFuZCBUQ1AgcmVzcGVjdGl2ZWx5LiBXaGlsZSBub3QgXCJob3QgcGF0aHNcIiBpbiB0aGUgZ2VuZXJpYyBuZXR3b3JraW5nIHNlbnNlIChsaWtlIGBpcF9yY3ZgKSwgdGhleSAqYXJlKiBob3QgcGF0aHMgZm9yIGNvbm50cmFjaywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGVzZSBhcmUgdGhlIHZlcnkgZnVuY3Rpb25zIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLCBtYWtpbmcgdGhlbSB0aGUgY29ycmVjdCBmb2N1cy5cblxuT2gsIGFuZCB0aGVyZSdzIGFsc28gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBJdCdzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uLCBidXQgaXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgaXQncyBleHBvcnRlZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uIGluIHRoZSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjQ1LjM2NDg2NjA5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0MzUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTcyPV9fcHJpbnRmKDQsIDUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjEwMDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTEwMS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0xNDg9c3RhdGljIGludCBkb19iYXNpY19jaGVja3Moc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3NC1cXHRcXHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXFx1MDAzZWxlbmd0aCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzoxNzU6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIiVzIGZhaWxlZC4gY2h1bmsgbnVtICVkLCB0eXBlICVkLCBsZW4gJWQgZmxhZyAlZFxcXFxuXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdCAgICBzaC1cXHUwMDNldnRhZyAhPSBjdC1cXHUwMDNlcHJvdG8uc2N0cC52dGFnW2Rpcl0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIFxcXCJ2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzItXFx0aWYgKGxvZ19pbnZhbGlkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo1MzM6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTM0LVxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTUxNz1zdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyMy1cXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI0OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI1LVxcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjgtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUyOTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMC1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMzLVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzgtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mzk6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDAtXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQzLVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTQ0OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ1LVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwMT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1NC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNTU6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU2LVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE3ODpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNzktXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTUtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTk2OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTk3LVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0MC1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDE6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0Mi1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDUtXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzA2OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzA3LVxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzo0NS40NDUzMDcyMzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1NDk2NDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29ubnRyYWNrIGFuZCBOZXRmaWx0ZXIgTG9nZ2luZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGluZGVlZCBleHBvcnRlZCDigJMgZ29vZCwgdGhhdCBjb25maXJtcyBhIGtleSBwb2ludC4gTXkgZm9jdXMsIHRoZXJlZm9yZSwgaXMgbm93IG5hcnJvd2VkIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGhhdmUgYSBwcmVsaW1pbmFyeSBsaXN0OiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAsIGFuZCBgTkVURklMVEVSX05FVExJTktfTE9HYC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBgTkVURklMVEVSX05FVExJTktfTE9HYCBpcyB0aGUgYXBwcm9wcmlhdGUgY29uZmlnOyB0aGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGBuZm5ldGxpbmtfbG9nYCBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZywgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpcyBpbmRlZWQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEhvbGQgb24sIGBuZm5ldGxpbmtfbG9nYCBsb29rcyB0byBiZSBhIG1vZHVsZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgSSBoYXZlIHRoZSBleGFjdCBjb25maWcgbmFtZSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgaXQgaXMgYXMgd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTM6NTAuNDAwMjc0OTM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTAwMzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyOmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzo1MC40ODkyODUyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE4NTg5MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQ29ubnRyYWNrIGFuZCBMb2dnaW5nIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGNvcnJlY3QuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORl9DT05OVFJBQ0tfRVZFTlRTYC4gQWx0aG91Z2ggaXQncyBub3QgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgdGhlIGxvZ2dpbmcgaXRzZWxmLCBJIHdvbmRlciBpZiBpdCBwbGF5cyBhIHJvbGUgaW4gdGhlIGF0dHJpYnV0ZSBkdW1waW5nIHRoYXQgdGhlIGNvbW1lbnQgbWVudGlvbnMuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBub3RlcywgXCJuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4gdmlhIGhlbHBlcnMgc3VjaCBhcyB0Y3BfdG9fbmxhdHRyKClcIi5cblxuQXR0cmlidXRlIGR1bXBpbmcsIGFzIEkgdW5kZXJzdGFuZCBpdCwgb2NjdXJzIHdoZW4gYG5mbmV0bGlua19sb2dgIGxvZ3MgYSBwYWNrZXQgYW5kIGluY2x1ZGVzIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBTbywgbXkgbGluZSBvZiB0aG91Z2h0IGlzOiBkb2VzIGBuZm5ldGxpbmtfbG9nYCBuZWVkIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbnN1cmUgdGhhdCBpdCBpbmNsdWRlcyBjb25udHJhY2sgaW5mb3JtYXRpb24/IFRoYXQncyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjU1LjMwNzg3NzQxM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjQwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF90b19ubGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtODYtXFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjg3OlxcdCAqIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4gdmlhIGhlbHBlcnMgc3VjaCBhcyB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg4LVxcdCAqIGNvbm50cmFjayBsb2dzIG11c3Qgb25seSBiZSBlbWl0dGVkIGFmdGVyIGRyb3BwaW5nIGN0LVxcdTAwM2Vsb2NrLlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwMT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM4OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzg5OnN0YXRpYyBpbnQgdGNwX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM5MC1cXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm4gKmN0LCBib29sIGRlc3Ryb3kpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xNjYwPWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b190Y3AgPVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ1RfTkVUTElOSylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjY4OlxcdC50b19ubGF0dHJcXHRcXHQ9IHRjcF90b19ubGF0dHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2OS1cXHQuZnJvbV9ubGF0dHJcXHRcXHQ9IG5sYXR0cl90b190Y3AsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjU1LjQxODUyNTE2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAxNTgxMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5IERpc2NvdmVyeSoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGNvZGUgcmVxdWlyaW5nIGB0Y3BfdG9fbmxhdHRyYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGZsYWdzIHRoYXQgYXMgbGlrZWx5IGJlaW5nIHRpZWQgdG8gTmV0bGluayBpbnRlZ3JhdGlvbi4gSXQncyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaGVyZVwiLiBNYWtlcyBzZW5zZSwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgTmV0bGluayBpbnRlcmZhY2UgaGFzIGFsd2F5cyBiZWVuIGNydWNpYWwgZm9yIGV4cG9ydGluZyBjb25uZWN0aW9uIHN0YXRlLiBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgdGhlIGNvZGUgdG8gZW5zdXJlIHRoYXQncyBzZXQuIExvb2tzIGxpa2UgSSBzaG91bGQgZ28gbWFrZSBzdXJlIGBORl9DVF9ORVRMSU5LYCBpcyBlbmFibGVkLiBJdCdzIHRoZSBvYnZpb3VzIHN1c3BlY3QsIGFuZCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdXJwcmlzZXMgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTQ6MDcuNDM0MzQwNDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE0NTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxNDowNy41Mjc0OTU1ODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMTg0NTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBhIERlYWRsb2NrIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0J3MgcHJldHR5IGNsZWFyIG5vdy4gYE5GX0NUX05FVExJTktgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUgdG8gdHJpZ2dlciB0aGUgZGVhZGxvY2sgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBzZWU6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9QUk9UT19TQ1RQYCwgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgYW5kLCBvZiBjb3Vyc2UsIHRoZSBrZXkgb25lLCBgTkZfQ1RfTkVUTElOS2AuXG5cbkZyb20gYSBxdWljayBnbGFuY2UsIHRoaXMgbG9va3Mgcm9jayBzb2xpZDsgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGFsbCB0aGUgY29ycmVjdCBwaWVjZXMgaW4gcGxhY2UuIEl0J3MgdGltZSB0byBjaGVjayBpZiBgTkZfQ1RfTkVUTElOS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBtYXkgbmVlZCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTQ6MTIuOTI5MzQ0NjE4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cXG4gMzYxOlxcdFxcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xcbiAzNjI6XFx0XFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM2NTpcXHRcXG4gMzY2OlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LXFxuIDM2NzpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4gMzY4OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNjk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbiAzNzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDM3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzNzc6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAzNzg6XFx0XFx0aGVscFxcbiAzNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxNDoxMi45Mjk0NTMxMThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg0ODMxMjQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBGaXggZm9yIENvbm50cmFjayBQYWNrZXQgTG9nZ2luZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgdGhlIGxvY2tpbmcgaW4gdGhlIGNvbm50cmFjayBtb2R1bGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IGRlZmVycmluZyB0aGUgbG9nZ2luZyBhY3Rpb24gdW50aWwgKmFmdGVyKiB0aGUgY29ubnRyYWNrIGxvY2sgKGBjdC1cdTAwM2Vsb2NrYCkgaXMgcmVsZWFzZWQuIFRoaXMgbWVhbnMgYSBzaGlmdCBpbiBleGVjdXRpb24gb3JkZXIsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBuZXcgcHJvYmxlbXMsIGV2ZW4gaWYgaXQgZml4ZXMgdGhlIGRlYWRsb2NrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGJlaGF2aW9yOiBGaXJzdCwgYE5FVEZJTFRFUmAsIG9idmlvdXNseSwgZm9sbG93ZWQgYnkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9DT05OVFJBQ0tgIOKAkyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBoZXJlLiBXZSBuZWVkIGBORl9DVF9QUk9UT19TQ1RQYCB0byBkZWFsIHdpdGggU0NUUCBzcGVjaWZpY2FsbHkuICBUaGVuLCB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhlIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSwgSSdsbCBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCBgTkZfQ1RfTkVUTElOS2AuXG5cbk15IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9scyB0byBldmFsdWF0ZTogYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGFuZCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAuIFRoYXQgbGFzdCBvbmUgaXMgdGhlIG9uZSBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGRvdWJsZS1jaGVjayB0aGUgbmFtZSBvZi4gWXVwLCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXQgaXMuXG5cbkkndmUgY2hlY2tlZCB0aGUgb3RoZXIgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgY2FuZGlkYXRlcyBhcmUgYWxsIHN0YXRpYywgdGhlcmVmb3JlIGlubGluZWQgb3Igbm90IHZpc2libGUuIEZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyB0byBiZSB0aGUgcmlnaHQgYXBwcm9hY2guXG5cbkknbSBjb25maWRlbnQgdGhpcyBjb3ZlcnMgZXZlcnl0aGluZyByZWxldmFudCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZnV6eiB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjYwLCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjE0OjIyLjc3Nzc2OTU1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQyMDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfUFJPVE9fU0NUUFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3NjdHBfcGFja2V0XCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiLFxuICAgIFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2RlcCBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBieSBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBTQ1RQIGFuZCBUQ1AgY29ubnRyYWNrIHBhY2tldHMgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBsb2NrIChjdC1cXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9QUk9UT19TQ1RQXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRcIixcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVxcdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvkqb4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 19:45:43 +0000 UTC FinishedAt: 2026-08-01 20:14:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CT_PROTO_SCTP", "NETFILTER_NETLINK_LOG", "NF_CT_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CT_PROTO_SCTP", "NETFILTER_NETLINK_LOG", "NF_CT_NETLINK" ], "series_id": "cb9efcc2-86a9-4afb-a0c2-42be38346301" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_sctp_packet", "nf_conntrack_tcp_packet", "nf_ct_l4proto_log_invalid" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfTE9HJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2YTFmZjEwMTFjODZiYzZiYTc4ZDdjOWU5OGJlMWE2ZjgwYjMzYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjEwOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXG5pbmRleCBhZDk2ODk2NTE2YjZmLi45NDM5NTk2ZjM0ZTZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuQEAgLTgzLDYgJiM0Mzs4MywxMiBAQCB2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4mIzQzO1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG4mIzQzO1x0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuIFx0dmFmLmZtdCA9IGZtdDtcbiBcdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXG5pbmRleCA3ZTEwZmE2NWNiZGQzLi5kZDkwZjFkZjlkNTVmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbkBAIC0zMzksNyAmIzQzOzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0dV9pbnQzMl90IG9mZnNldCwgY291bnQ7XG4gXHR1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0dW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9O1xuJiM0MztcdGJvb2wgbG9nX2ludmFsaWQgPSBmYWxzZTtcbiBcdGJvb2wgaWdub3JlID0gZmFsc2U7XG4mIzQzO1x0dTggaW52YWxpZF90eXBlID0gMDtcbiBcbiBcdGlmIChzY3RwX2Vycm9yKHNrYiwgZGF0YW9mZiwgc3RhdGUpKVxuIFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbkBAIC00NTEsMTAgJiM0Mzs0NTMsOCBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0LyogSW52YWxpZCAqL1xuIFx0XHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xuLVx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4tXHRcdFx0XHRcdFx0ICBcJiMzNDtJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgIG9sZF9zdGF0ZSwgZGlyLCBzY2gtXHUwMDNldHlwZSk7XG4tXG4mIzQzO1x0XHRcdGxvZ19pbnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0aW52YWxpZF90eXBlID0gc2NoLVx1MDAzZXR5cGU7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXG5AQCAtNTI5LDYgJiM0Mzs1MjksMTAgQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChsb2dfaW52YWxpZClcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O0ludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBvbGRfc3RhdGUsIGRpciwgaW52YWxpZF90eXBlKTtcbiBvdXQ6XG4gXHRyZXR1cm4gLU5GX0FDQ0VQVDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uOTMyNzJhYWZkMjg5YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4MSBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuIFx0fVxuIH1cbiBcbi1fX3ByaW50Zig2LCA3KVxuLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4tXHRcdFx0XHRcdFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbi1cdFx0XHRcdFx0XHRjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4mIzQzO1x0TkZfVENQX0xPR19OT05FLFxuJiM0MztcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXG4mIzQzO1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxuJiM0MztcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4mIzQzO1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuJiM0MztcdFx0ICAgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdGxvZy1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbiYjNDM7XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4gdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi1cdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuJiM0MztcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiB7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFx1MDAyNmN0LVx1MDAzZXByb3RvLnRjcDtcbiBcdHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9IFx1MDAyNnN0YXRlLVx1MDAzZXNlZW5bZGlyXTtcbkBAIC02NDAsMzEgJiM0Mzs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRcdFx0c2VuZGVyLVx1MDAzZXRkX2VuZCA9IGVuZDtcbiBcdFx0XHRzZW5kZXItXHUwMDNlZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDtcbiBcbi1cdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCYjMzQ7LCBvdmVyc2hvdCk7XG4mIzQzO1x0XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbiYjNDM7XHRcdFx0XHQgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgJiM0MzsgMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxuJiM0MztcdFx0XHRcdCAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgJiM0MzsgMSk7XG4gXHR9XG4gXG4gXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSkpXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O0FDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcJiMzNDssXG4tXHRcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKTtcbiBcbiBcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xuIFx0aW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIHx8XG4gXHRcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFpbl9yZWN2X3dpbilcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbiYjNDM7XHRcdFx0XHRcdCAgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4mIzQzO1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX0FDS19VTkRFUixcbiYjNDM7XHRcdFx0XHRcdCAgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MTksMTEgJiM0Mzs3NjEsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0XHRcdFx0IGludCBpbmRleCxcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbiYjNDM7c3RhdGljIGJvb2wgX19jb2xkXG4mIzQzO25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleClcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xuQEAgLTczMiw3ICYjNDM7NzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSB8fFxuIFx0ICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogV2UgZG9uJiMzOTt0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRFxuIFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAmIzM5O2p1c3QgYmVjYXVzZSYjMzk7IGNvbm50cmFjayBkZWVtZWQgYSBGSU4vUlNUXG5AQCAtNzQ3LDcgJiM0Mzs3ODYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGNhc2UgVENQX0ZJTl9TRVQ6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXHUwMDI2XHUwMDI2XG5AQCAtNzU1LDcgJiM0Mzs3OTQsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdCAgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XG4gXHRcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNjIDEyMCAqIEhaKVxuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4gXHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xuQEAgLTc2NCwxNiAmIzQzOzgwMywxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQsIGRpciAlZCkgcmVzcG9uc2UgZm9yIGluZGV4ICVkIGxvd2VyIHRpbWVvdXQgdG8gJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuLVxuIFx0XHRcdFdSSVRFX09OQ0UoY3QtXHUwMDNldGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDtcbiBcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xuQEAgLTk3MCw3ICYjNDM7MTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRzdHJ1Y3QgbmZfdGNwX25ldCAqdG4gPSBuZl90Y3BfcGVybmV0KG5ldCk7XG4gXHRlbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0cztcbiYjNDM7XHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbiYjNDM7XHRzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGxvZyA9IHt9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICYjNDM7MTI5MiwxOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0fVxuIFxuIFx0cmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCxcbi1cdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgc3RhdGUpO1xuJiM0MztcdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgXHUwMDI2bG9nKTtcbiBcdHN3aXRjaCAocmVzKSB7XG4gXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4mIzQzO1x0XHRsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbiYjNDM7XHRcdGlmIChsb3dlcmVkX3RpbWVvdXQpXG4mIzQzO1x0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDS1wmIzM0Oyk7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY29ubnRyYWNrX3NjdHBfcGFja2V0JiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVx1MDAzZWxvY2spIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlciBvZiBwYWNrZXQgcHJvY2Vzc2luZy4gRnV6emluZyB0aGlzIGNoYW5nZSBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmVycmVkIGxvZ2dpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGNvbm50cmFjaywgU0NUUCBjb25udHJhY2ssIG5ldGxpbmsgbG9nZ2luZywgYW5kIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSAod2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgYXR0cmlidXRlIGR1bXBpbmcgZGVhZGxvY2sgbWVudGlvbmVkIGluIHRoZSBwYXRjaCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmExZmYxMDExYzg2YmM2YmE3OGQ3YzllOThiZTFhNmY4MGIzM2M1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMDoxMDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCmluZGV4IGFkOTY4OTY1MTZiNmYuLjk0Mzk1OTZmMzRlNmEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYwpAQCAtODMsNiAmIzQzOzgzLDEyIEBAIHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChsaWtlbHkobmV0LSZndDtjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpCiAJCXJldHVybjsKIAomIzQzOwkvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0bwomIzQzOwkgKiB0YWtlIGN0LSZndDtsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkCiYjNDM7CSAqIGNvbm50cmFjayBsb2dzIG11c3Qgb25seSBiZSBlbWl0dGVkIGFmdGVyIGRyb3BwaW5nIGN0LSZndDtsb2NrLgomIzQzOwkgKi8KJiM0MzsJbG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoJmFtcDtjdC0mZ3Q7bG9jayk7CiYjNDM7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAl2YWYuZm10ID0gZm10OwogCXZhZi52YSA9ICZhbXA7YXJnczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA3ZTEwZmE2NWNiZGQzLi5kZDkwZjFkZjlkNTVmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0zMzksNyAmIzQzOzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCXVfaW50MzJfdCBvZmZzZXQsIGNvdW50OwogCXVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJdW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9OwomIzQzOwlib29sIGxvZ19pbnZhbGlkID0gZmFsc2U7CiAJYm9vbCBpZ25vcmUgPSBmYWxzZTsKJiM0MzsJdTggaW52YWxpZF90eXBlID0gMDsKIAogCWlmIChzY3RwX2Vycm9yKHNrYiwgZGF0YW9mZiwgc3RhdGUpKQogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKQEAgLTQ1MSwxMCAmIzQzOzQ1Myw4IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCiAJCS8qIEludmFsaWQgKi8KIAkJaWYgKG5ld19zdGF0ZSA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHsKLQkJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCi0JCQkJCQkgICYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWQmIzM0OywKLQkJCQkJCSAgb2xkX3N0YXRlLCBkaXIsIHNjaC0mZ3Q7dHlwZSk7Ci0KJiM0MzsJCQlsb2dfaW52YWxpZCA9IHRydWU7CiYjNDM7CQkJaW52YWxpZF90eXBlID0gc2NoLSZndDt0eXBlOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKQEAgLTUyOSw2ICYjNDM7NTI5LDEwIEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwlpZiAobG9nX2ludmFsaWQpCiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O0ludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkJiMzNDssCiYjNDM7CQkJCQkgIG9sZF9zdGF0ZSwgZGlyLCBpbnZhbGlkX3R5cGUpOwogb3V0OgogCXJldHVybiAtTkZfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBjZWVlZDNkN2ZlNTIwLi45MzI3MmFhZmQyODliIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNDgwLDM3ICYjNDM7NDgwLDgxIEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiAJfQogfQogCi1fX3ByaW50Zig2LCA3KQotc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkJCWNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKLQkJCQkJCWNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciwKLQkJCQkJCWVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCi0JCQkJCQljb25zdCBjaGFyICpmbXQsIC4uLikKJiM0MztlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHsKJiM0MzsJTkZfVENQX0xPR19OT05FLAomIzQzOwlORl9UQ1BfTE9HX09WRVJTSE9ULAomIzQzOwlORl9UQ1BfTE9HX1NFUV9PVkVSLAomIzQzOwlORl9UQ1BfTE9HX0FDS19PVkVSLAomIzQzOwlORl9UQ1BfTE9HX1NFUV9VTkRFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfVU5ERVIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIHsKJiM0MzsJZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlOwomIzQzOwl1MzIgdmFsdWU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uCiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCiYjNDM7CQkgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZywKJiM0MzsJCSAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCwKJiM0MzsJCSAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLAomIzQzOwkJICAgICB1MzIgdmFsdWUpCiB7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKLQlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKLQl2YV9saXN0IGFyZ3M7CiAJYm9vbCBiZV9saWJlcmFsOwogCiAJYmVfbGliZXJhbCA9IHNlbmRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi0mZ3Q7dGNwX2JlX2xpYmVyYWw7CiAJaWYgKGJlX2xpYmVyYWwpCiAJCXJldHVybiBORkNUX1RDUF9BQ0NFUFQ7CiAKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZhZi5mbXQgPSBmbXQ7Ci0JdmFmLnZhID0gJmFtcDthcmdzOwotCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7JXBWJiMzNDssICZhbXA7dmFmKTsKLQl2YV9lbmQoYXJncyk7Ci0KJiM0MzsJbG9nLSZndDt0eXBlID0gdHlwZTsKJiM0MzsJbG9nLSZndDt2YWx1ZSA9IHZhbHVlOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobG9nLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjoKJiM0MzsJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsCiYjNDM7CQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAomIzQzOwkJCQkJICBsb2ctJmd0O3ZhbHVlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19OT05FOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uCiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsCi0JICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpCiYjNDM7CSAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZykKIHsKIAlzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9ICZhbXA7Y3QtJmd0O3Byb3RvLnRjcDsKIAlzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmYW1wO3N0YXRlLSZndDtzZWVuW2Rpcl07CkBAIC02NDAsMzEgJiM0Mzs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJCQlzZW5kZXItJmd0O3RkX2VuZCA9IGVuZDsKIAkJCXNlbmRlci0mZ3Q7ZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDsKIAotCQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0Oywgb3ZlcnNob3QpOwomIzQzOwkJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpOwogCQl9CiAKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsCi0JCQkJCSAgJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcikmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX21heGVuZCAmIzQzOyAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCSAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwogCX0KIAogCWlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSkpCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELAotCQkJCQkgICYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgJiM0MzsgMSk7CiYjNDM7CQlyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKIAogCS8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqLwogCWluX3JlY3Zfd2luID0gIXJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gfHwKIAkJICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWluX3JlY3Zfd2luKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZCkmIzM0OywKLQkJCQkJICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJCSAgIE5GX1RDUF9MT0dfU0VRX1VOREVSLAomIzQzOwkJCQkJICAgc2VuZGVyLSZndDt0ZF9lbmQgLSByZWNlaXZlci0mZ3Q7dGRfbWF4d2luIC0gMSk7CiAJaWYgKCFhZnRlcihzYWNrLCByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSkKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSwKLQkJCQkJICAmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZCkmIzM0OywKLQkJCQkJICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSwKJiM0MzsJCQkJCSAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzOwkJCQkJICAgcmVjZWl2ZXItJmd0O3RkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7CiAKIAkvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqLwogCWlmICghdGNwaC0mZ3Q7c3luKQpAQCAtNzE5LDExICYjNDM7NzYxLDggQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiAJcmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDsKIH0KIAotc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCSBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAotCQkJCQkgaW50IGluZGV4LAotCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKQomIzQzO3N0YXRpYyBib29sIF9fY29sZAomIzQzO25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleCkKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzOwogCWNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjsKQEAgLTczMiw3ICYjNDM7NzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAlpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cykpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCS8qIFdlIGRvbiYjMzk7dCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRUQKIAkgKiBzdGF0ZSBmb3IgbG9uZyB0aW1lICYjMzk7anVzdCBiZWNhdXNlJiMzOTsgY29ubnRyYWNrIGRlZW1lZCBhIEZJTi9SU1QKQEAgLTc0Nyw3ICYjNDM7Nzg2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJY2FzZSBUQ1BfRklOX1NFVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChjdC0mZ3Q7cHJvdG8udGNwLmxhc3RfZGlyICE9IGRpciAmYW1wOyZhbXA7CkBAIC03NTUsNyAmIzQzOzc5NCw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCSAgICAgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkgewogCQlleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7CiAJCWlmIChleHBpcmVzICZsdDsgMTIwICogSFopCi0JCQlyZXR1cm47CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCiAJCXRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTsKIAkJdGltZW91dHMgPSBuZl9jdF90aW1lb3V0X2xvb2t1cChjdCk7CkBAIC03NjQsMTYgJiM0Mzs4MDMsMTUgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAKIAkJdGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7CiAJCWlmIChleHBpcmVzICZndDsgdGltZW91dCkgewotCQkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLAotCQkJCQkgICYjMzQ7cGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldSYjMzQ7LAotCQkJCQkgIGluZGV4LCBkaXIsIGN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCwgdGltZW91dCk7Ci0KIAkJCVdSSVRFX09OQ0UoY3QtJmd0O3RpbWVvdXQsIHRpbWVvdXQgJiM0MzsgbmZjdF90aW1lX3N0YW1wKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0gZWxzZSB7CiAJCWN0LSZndDtwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4OwogCQljdC0mZ3Q7cHJvdG8udGNwLmxhc3RfZGlyID0gZGlyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKiB0YWJsZSBvZiB2YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAtIFBVU0gsIEVDRSBhbmQgQ1dSIGFyZSBhbHdheXMgdmFsaWQgKi8KQEAgLTk3MCw3ICYjNDM7MTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZXQpOwogCWVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0czsKJiM0MzsJYm9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTsKIAllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzOwomIzQzOwlzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nIGxvZyA9IHt9OwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CiAJc3RydWN0IHRjcGhkciBfdGNwaDsKQEAgLTEyNTIsMTQgJiM0MzsxMjkyLDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJfQogCiAJcmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCwKLQkJCSAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7CiYjNDM7CQkJICAgIHNrYiwgZGF0YW9mZiwgdGgsICZhbXA7bG9nKTsKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgTkZDVF9UQ1BfSUdOT1JFOgogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2cpOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCWNhc2UgTkZDVF9UQ1BfSU5WQUxJRDoKLQkJbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTsKJiM0MzsJCWxvd2VyZWRfdGltZW91dCA9IG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spOwomIzQzOwkJbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmYW1wO2xvZyk7CiYjNDM7CQlpZiAobG93ZXJlZF90aW1lb3V0KQomIzQzOwkJCW5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLJiMzNDspOwogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0FDQ0VQVDoKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgbWVudGlvbmluZyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsgYW5kICYjMzQ7dW5kZXIgcmV2aWV3LiYjMzQ7ICBSaWdodCBhd2F5LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IG9yaWdpbmF0ZWQgZnJvbSBmdXp6aW5nIGVmZm9ydHMuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGlzIGlzIGFib3V0IGxvY2sgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgY3QtJmd0O2xvY2tgLiAgV2UmIzM5O3ZlIGdvdCBhbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY2FsbCBiZWluZyBtb3ZlZCBhcm91bmQuIFRoZSBwYXRjaCBhZGRzIGBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZCgmYW1wO2N0LSZndDtsb2NrKTtgIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgYWxvbmcgd2l0aCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmVhc29uaW5nLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgb3IgZGVhZGxvY2suICBJdCBsb29rcyBsaWtlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgY3QtJmd0O2xvY2tgLCBhbmQgYmVjYXVzZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY291bGQgcG90ZW50aWFsbHkgY2FsbCBgbmZuZXRsaW5rX2xvZ2AsIGl0IGNvdWxkIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHJlLWFjcXVpcmUgdGhlIHNhbWUgbG9jaywgbGVhZGluZyB0byBhIGRlYWRsb2NrLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCB0byBkZWZlciB0aGUgY2FsbCB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdW50aWwgYWZ0ZXIgYHNwaW5fdW5sb2NrX2JoKCZhbXA7Y3QtJmd0O2xvY2spYC4gIEluIFRDUCwgdGhleSBhcmUgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgZm9yIHRoYXQuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGJ1ZyBmaXggYWRkcmVzc2luZyBhIGxvY2sgaW52ZXJzaW9uL2RlYWRsb2NrLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhlIGZpeCBhbmQsIGNyaXRpY2FsbHksIGVuc3VyZSBubyBuZXcgcHJvYmxlbXMgYXJlIGludHJvZHVjZWQuICBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb2YgYGN0YC4gQWx0aG91Z2ggaXQgc2VlbXMgYGN0YCBpcyBzYWZlIHRvIHVzZSBoZXJlLgoKQSBxdWljayBzYW5pdHkgY2hlY2s6IHNpbmNlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB0YWtlcyBgY3RgIGFzIGFuIGFyZ3VtZW50LCBhbmQgdGhlIGNhbGxlciBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSwgdGhhdCBzaG91bGQgYmUgc2FmZS4gSG93ZXZlciwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNwZWNpZmljLiAgV2hpY2ggZnVuY3Rpb25zIGFyZSBub3cgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZz8gYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGB0Y3BfaW5fd2luZG93YCwgYW5kIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGNvbWUgaW1tZWRpYXRlbHkgdG8gbWluZC4gVGhleSYjMzk7cmUgYWxsIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjaGFuZ2VzLgoKRmluYWxseSwgY29uZmlndXJhdGlvbi4gIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBlZmZlY3RpdmUuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tfUFJPVE9TYCBhcmUgZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcgVENQIGFuZCBTQ1RQLiAgQWx0aG91Z2ggaW4gbmV3ZXIga2VybmVscyBTQ1RQIGNvbm50cmFjayBtYXkgYmUgYnVpbHQgaW50byBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGF1ZGllbmNlIGlzIGFub3RoZXIgZXhwZXJ0OgoKKipOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmc6IFNDVFAgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBJIGtub3cgd2UgYWJzb2x1dGVseSBuZWVkIGBORl9DT05OVFJBQ0tgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwuIE5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wsIG9yIFNDVFAuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBgTkZfQ1RfUFJPVE9fU0NUUGAgdG8gcHJvcGVybHkgaGFuZGxlIGNvbm5lY3Rpb25zIHVzaW5nIHRoYXQgcHJvdG9jb2wuIExldCBtZSBqdXN0IHBhdXNlIGZvciBhIHNlY29uZCwgaG9sZCBvbi4uLiBpdCYjMzk7cyBqdXN0IGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlIGNoZWNrIGlmIHRoZSBgTkZfQ1RfUFJPVE9fU0NUUGAgbW9kdWxlIGlzIGV2ZW4gYXZhaWxhYmxlIGluIHRoaXMga2VybmVsIHZlcnNpb24sIG9yIGlmIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIE9rYXksIGxldCBtZSB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTk4PWNvbmZpZyBORl9DVF9QUk9UT19HUkVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjAwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIwMTpjb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMi1cdGJvb2wgJiMzOTtTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgaXMgaW5kZWVkIGEgdmFsaWQgcHJvdG9jb2wgaWRlbnRpZmllci4gR29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFsc28gbWVudGlvbnMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIE5hdHVyYWxseSwgZm9yIHRoaXMgbG9nZ2luZyB0byBhY3R1YWxseSAqaGFwcGVuKiwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2xvZ19pbnZhbGlkYCBtdXN0IGJlIGVuYWJsZWQgdmlhIHN5c2N0bC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci4KCk5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxvY2tkZXAgaXNzdWUsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIENoYW5naW5nIGxvY2tpbmcgb3JkZXIgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFRoZXkmIzM5O3JlIHVubG9ja2luZyAqYmVmb3JlKiBsb2dnaW5nIGluIHRoaXMgaW5zdGFuY2UsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gdG8gYXZvaWQgaG9sZGluZyBsb2NrcyBsb25nZXIgdGhhbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gQnV04oCmIGRvZXMgdGhpcyBhbHNvIGFmZmVjdCB0aGUgKmNvbnRyb2wgZmxvdyogb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5nPyAKClllcywgaXQgbG9va3MgbGlrZSBpdC4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBub3cgcmV0dXJucyAqYWZ0ZXIqIHVubG9ja2luZyBhbmQgbG9nZ2luZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIHJlb3JkZXJpbmcgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgbG9jayByZW9yZGVyaW5nLCBjb21iaW5lZCB3aXRoIHRoZSBjaGFuZ2VkIHJldHVybiBwb2ludCwgbWFrZXMgbWUgdGhpbmsgdGhhdCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgY3JvcCB1cC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuCgpJIHNob3VsZCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXkmIzM5O3JlIHN0YXRpYyBvciBleHBvcnRlZC9nbG9iYWwuIFRoYXQgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk4OS1cdGNhc2UgSVBQUk9UT19TQ1RQOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE5OTA6XHRcdHJldHVybiBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTkxLVx0XHRcdFx0XHRcdGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0yOTU9c3RhdGljIGJvb2wgc2N0cF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zMjYtLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC1ORl9BQ0NFUFQgZm9yIGludmFsaWQuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MzI3OmludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTMyOC1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBGdW5jdGlvbiBTY29wZSBhbmQgVmlzaWJpbGl0eSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHNjb3BlLiBUaGVzZSBhcmUgKmdsb2JhbCogZnVuY3Rpb25zLCBvciBhdCBsZWFzdCwgbm9uLXN0YXRpYyBvbmVzIHRoYXQgaGF2ZSB2aXNpYmlsaXR5IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhY2Nlc3NpYmxlIGZyb20gZGlmZmVyZW50IGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGhhcyBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBkZXNpZ246IEkgbmVlZCB0byBiZSAqdmVyeSogbWluZGZ1bCBvZiBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIElmIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8gbWFrZSBwdWJsaWMsIEkgbmVlZCB0byBjb25zaWRlciBuYW1pbmcgY29udmVudGlvbnMuIEl0IGFsc28gdGVsbHMgbWUgYSBsaXR0bGUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZTsgaWYgdGhleSBhcmUgYmVpbmcgdXNlZCBhY3Jvc3MgZmlsZXMsIHRoaXMgd2lsbCBoYXZlIGFuIGVmZmVjdCBvbiB2ZXJzaW9uaW5nIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGF0IEkgc2hvdWxkIGJlIGRvaW5nIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHRlc3RlZCwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtaWdodCBhZmZlY3Qgb3RoZXIgY29kZSBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MTk2OT1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYW5kbGVfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcdFx0cmV0dXJuIG5mX2Nvbm50cmFja190Y3BfcGFja2V0KGN0LCBza2IsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cdFx0XHRcdFx0ICAgICAgIGN0aW5mbywgc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk5MD1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwMC0vKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMDAxOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDAyLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqTmF2aWdhdGluZyBDb25udHJhY2sgU3RydWN0dXJlcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIFJpZ2h0LCB0aGUgZW50aXRpZXMgdW5kZXIgY29uc2lkZXJhdGlvbiBhcmUgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBkeW5hbWljIGJlaGF2aW9yIGludm9sdmVkIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSG1tLCBidXQgaGFuZyBvbiwgSSBzZWUgdGhhdCBib3RoIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGFuZCBgdGNwX2luX3dpbmRvd2AgYXJlIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyEgT2theSwgc28gdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzb21ld2hhdC4gTXkgcHJpbWFyeSB0YXJnZXRzIG5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGFyZSBkZWZpbml0ZWx5IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGZ1cnRoZXIuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkmIzM5O2xsIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXJlIGVuYWJsZWQuIEFuZCBvZiBjb3Vyc2UsIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcmUgbGlrZWx5IGFsc28gcmVsZXZhbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhdHRlciBjYXJlZnVsbHkgYXMgaXQgbWlnaHQgb3BlbiB1cCBzb21lIGFkZGl0aW9uYWwgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkLiBDaGVja2luZyB0aGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NPTk5UUkFDS2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSA4MiwgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiByZXNpZGVzLiBJIGtub3cgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgYGRlcGVuZHMgb25gIGZvcm1hdDsgaG9wZWZ1bGx5LCBpdCYjMzk7cyBub3QgYnVyaWVkIHRvbyBkZWVwIGluIGFuIGBpZmAgYmxvY2suIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciB1bmRlcmx5aW5nIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgcmVxdWlyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgcG9zc2libHkgb3B0aW1pemluZyB0aGUgbmV0ZmlsdGVyIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA3NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgODA6XHRcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cbiAgODE6XHRcbiAgODI6XHRjb25maWcgTkZfQ09OTlRSQUNLXG4gIDgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4gIDg0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgODU6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxuICA4NjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxuICA4NzpcdFx0aGVscFxuICA4ODpcdFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxuICA4OTpcdFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxuICA5MDpcdFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxuICA5MTpcdFxuICA5MjpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXG4gIDkzOlx0XHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XG4gIDk0Olx0XHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQmIzM5OyBiZWxvdykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBORVRGSUxURVIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoaXMgZGVwZW5kZW5jeSBkb2VzbiYjMzk7dCBzZWVtIHRvIGhpbmdlIG9uIGFueXRoaW5nICpleGNlcHQqIGBORVRGSUxURVJgIGl0c2VsZiBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbi4gTm8gY29tcGxleCBuZXN0ZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYE5GX0NUX1BST1RPX1NDVFBgIGFyb3VuZCBsaW5lIDIwMS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UsIGFuZCBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgbHVya2luZy4gVGltZSB0byBleGFtaW5lIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbiAxOTY6XHRcdGJvb2xcbiAxOTc6XHRcbiAxOTg6XHRjb25maWcgTkZfQ1RfUFJPVE9fR1JFXG4gMTk5Olx0XHRib29sXG4gMjAwOlx0XG4gMjAxOlx0Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbiAyMDI6XHRcdGJvb2wgJiMzOTtTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMjAzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIwNDpcdFx0ZGVmYXVsdCB5XG4gMjA1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBsYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb25cbiAyMDg6XHRcdCAgdHJhY2tpbmcgY29kZSB3aWxsIGJlIGFibGUgdG8gZG8gc3RhdGUgdHJhY2tpbmcgb24gU0NUUCBjb25uZWN0aW9ucy5cbiAyMDk6XHRcbiAyMTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMTE6XHRcbiAyMTI6XHRjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxuIDIxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKgoKT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWVhbnMgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGF0IGZpcnN0LiBBbmQgc2luY2Ugd2UmIzM5O3JlIGhlcmUsIGxldCYjMzk7cyBlbmFibGUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DVF9QUk9UT19TQ1RQYCBhcyB3ZWxsLiBXYWl0IGEgbWludXRlLCBgTkZfQ09OTlRSQUNLYCBpcyBhIHRyaXN0YXRlLCBzbyBhIHN0cmFpZ2h0ICYjMzQ7eSYjMzQ7IHNob3VsZCBiZSBmaW5lLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUmAgaXRzZWxmIGlzIHNldCB0byAmIzM0O3kmIzM0Oy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIHNob3VsZCB0YWtlIGEgbG9vayBhdC4gQWgsIGBORl9DT05OVFJBQ0tfRVZFTlRTYCBsb29rZWQgbGlrZSBpdCAqbWlnaHQqIGJlIHJlbGV2YW50IGZvciBsb2dnaW5nLCBidXQgbm8sIHRoZSBsb2dnaW5nIGlzIGFjdHVhbGx5IGhhbmRsZWQgYnkgYG5mbmV0bGlua19sb2dgLCB3aGljaCBtZWFucyB3ZSBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGZvciB0aGF0LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MTAwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0xMDEtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3NC1cdFx0ICAgICBjb3VudCAhPSAwKSB8fCAhc2NoLVx1MDAzZWxlbmd0aCkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3Ni1cdFx0XHRcdFx0XHQgIFwmIzM0OyVzIGZhaWxlZC4gY2h1bmsgbnVtICVkLCB0eXBlICVkLCBsZW4gJWQgZmxhZyAlZFxcblwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MzI3PWludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzUtXHQgICAgc2gtXHUwMDNldnRhZyAhPSBjdC1cdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjM3NjpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzctXHRcdFx0XHRcdCAgXCYjMzQ7dmVyaWZpY2F0aW9uIHRhZyBjaGVjayBmYWlsZWQgJXggdnMgJXggZm9yIGRpciAlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTMyLVx0aWYgKGxvZ19pbnZhbGlkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjUzMzpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzQtXHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyMy1cdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUyNDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyNS1cdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI4LVx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI5Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMwLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzMtXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MzQ6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzUtXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzgtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTM5Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQwLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0My1cdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDQ6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDUtXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1NC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTU1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1Ni1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3Ny1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTc4Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3OS1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5NS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExOTY6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7Y2hhbGxlbmdlLWFjayBpZ25vcmVkXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTctXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJiMzOTt0IGNoYW5nZSBzdGF0ZSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDAtXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDE6XHRcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtpbnZhbGlkIHJzdFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQyLVx0XHRcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNS1cdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMDY6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDctXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgU3ltYm9sKioKCkhtbSwgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIENvdWxkIGl0cyBleGlzdGVuY2Ugb3IgYmVoYXZpb3IgYmUgY29uZGl0aW9uYWw/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkPyBJIHNob3VsZCBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGF0IGNvZGUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA3My4gVGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdFx0cmV0dXJuO1xuICA2MTpcdFxuICA2MjpcdFx0dmFfc3RhcnQoYXJncywgZm10KTtcbiAgNjM6XHRcdHZhZi5mbXQgPSBmbXQ7XG4gIDY0Olx0XHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuICA2NTpcdFxuICA2NjpcdFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVx1MDAzZXBmLCAwLCBza2IsIHN0YXRlLVx1MDAzZWluLCBzdGF0ZS1cdTAwM2VvdXQsXG4gIDY3Olx0XHRcdCAgICAgIE5VTEwsIFwmIzM0O25mX2N0X3Byb3RvXyVkOiAlcFYgXCYjMzQ7LCBwcm90b251bSwgXHUwMDI2dmFmKTtcbiAgNjg6XHRcdHZhX2VuZChhcmdzKTtcbiAgNjk6XHR9XG4gIDcwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfbDRwcm90b19sb2dfaW52YWxpZCk7XG4gIDcxOlx0XG4gIDcyOlx0X19wcmludGYoNCwgNSlcbiAgNzM6XHR2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNzQ6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuICA3NTpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4gIDc2Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuICA3NzpcdHtcbiAgNzg6XHRcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuICA3OTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuICA4MDpcdFx0dmFfbGlzdCBhcmdzO1xuICA4MTpcdFxuICA4MjpcdFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcbiAgODM6XHRcdGlmIChsaWtlbHkobmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcbiAgODQ6XHRcdFx0cmV0dXJuO1xuICA4NTpcdFxuICA4NjpcdFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cbiAgODc6XHRcdCAqIHRha2UgY3QtXHUwMDNlbG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZFxuICA4ODpcdFx0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbiAgODk6XHRcdCAqL1xuICA5MDpcdFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gIDkxOlx0XG4gIDkyOlx0XHR2YV9zdGFydChhcmdzLCBmbXQpO1xuICA5MzpcdFx0dmFmLmZtdCA9IGZtdDtcbiAgOTQ6XHRcdHZhZi52YSA9IFx1MDAyNmFyZ3M7XG4gIDk1Olx0XG4gIDk2Olx0XHRuZl9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgc3RhdGUsXG4gIDk3Olx0XHRcdFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuICA5ODpcdFx0dmFfZW5kKGFyZ3MpO1xuICA5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTmV0ZmlsdGVyIHBhdGNoLiBJdCYjMzk7cyB1c2luZyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAsIHdoaWNoLCBJIGtub3csIHVsdGltYXRlbHkgY2FsbHMgYG5mX2xvZ19wYWNrZXRgLiBSaWdodCwgYG5mX2xvZ19wYWNrZXRgIGlzIGRlZmluZWQgaW4gYG5mX2xvZy5jYCwgd2hpY2ggZ2V0cyBidWlsdCBpZiBgTkVURklMVEVSYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZSBmb3IgZXZlcnl0aGluZy4gTm93LCBhIHNsaWdodCB3cmlua2xlIOKAkyBgbmZfbG9nX3BhY2tldGAgbWlnaHQgbmVlZCBhIGxvZ2dlciByZWdpc3RlcmVkLCBidXQgdGhlIGNvZGUgdXNpbmcgaXQgaXMgKmFsd2F5cyogY29tcGlsZWQgaWYgYE5GX0NPTk5UUkFDS2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIHRoaXMgY2hhbmdlIHNlZW0gdG8gYmUgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9QUk9UT19TQ1RQYC4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkZfQ09OTlRSQUNLYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCBzZWxlY3RzIGBORl9ERUZSQUdfSVBWNGAgYW5kIGBORl9ERUZSQUdfSVBWNmAsIHdoaWNoIGlzIGV4cGVjdGVkLCBhbmQgaXQmIzM5O3MgYSB0cmlzdGF0ZSwgc28ganVzdCBgTkZfQ09OTlRSQUNLYCBpcyBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG5mX2Nvbm50cmFja19wcm90by5jYCwgYG5mX2Nvbm50cmFja19wcm90b19zY3RwLmNgLCBhbmQgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEhtbSwgSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgZmV3IGZ1bmN0aW9uczogYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCwgYHRjcF9pbl93aW5kb3dgLCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAuCgpBaCwgSSBzZWUgdGhlIGlzc3VlIG5vdy4gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBsb2NrZGVwIGlzc3VlLiBJdCYjMzk7cyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHVudGlsIGFmdGVyIGBjdC0mZ3Q7bG9ja2AgaXMgcmVsZWFzZWQuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGlzLiBEZWZpbml0ZWx5IG5lZWRzIGZ1enppbmc7IGRlZmVycmluZyB0aGUgbG9nZ2luZyBjb3VsZCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciByYWNlcy4KCkkmIzM5O2xsIGtlZXAgYSBzaGFycCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBiZWNhdXNlIHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORl9DT05OVFJBQ0tgIGRvZXNuJiMzOTt0IHJlcXVpcmUgYE5GX0NPTk5UUkFDS19QUk9UT1NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgaXQgZG9lc24mIzM5O3QgLSBpdCBpbmNsdWRlcyBUQ1AuIFNDVFAgZG9lcyByZXF1aXJlIGBORl9DVF9QUk9UT19TQ1RQYC4gQW5kIGxldCYjMzk7cyBkb3VibGUgY2hlY2ssIGlzIGBORl9DVF9QUk9UT19UQ1BgIGV2ZW4gYSB0aGluZz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfUFJPVE9fVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkga25vdyBUQ1AgaXMgKmluaGVyZW50bHkqIHBhcnQgb2YgYE5GX0NPTk5UUkFDS2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHVzaW5nIGl0IGluIHByYWN0aWNlLiBEb2VzIGBORl9DT05OVFJBQ0tgIHJlcXVpcmUsIHNheSwgYElQX05GX0lQVEFCTEVTYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBJIGtub3cgY29ubnRyYWNrIGNhbiBiZSB1c2VkIHdpdGggaXB0YWJsZXMsIG5mdGFibGVzLCBvciBldmVuIHN0YW5kLWFsb25lIGlmIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBTeXprYWxsZXIgaXMgYSBrZXkgaGVyZTsgaXQmIzM5O3MgcHJvdmVuIGNhcGFibGUgb2YgdHJpZ2dlcmluZyBjb25udHJhY2sgYmVoYXZpb3JzLiBJIHJlY2FsbCBpdCBkb2VzIHRoaXMgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggYE5GX0NPTk5UUkFDS2AgZW5hYmxlZCwgb2Z0ZW4gd2l0aCBzaW1wbGUgcnVsZXMsIG9yIGV2ZW4ganVzdCBieSBzZW5kaW5nIHBhY2tldHMgd2hlbiBob29rcyBhcmUgaW4gcGxhY2UuCgpXYWl0LCBpdCYjMzk7cyBjb21pbmcgYmFjayB0byBtZSwgdGhvc2UgY29ubnRyYWNrIGhvb2tzIGFyZSBzb21ldGltZXMgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LCBvciB3aGVuIHJ1bGVzIGFyZSBhZGRlZC4gU3l6a2FsbGVyJiMzOTtzIGRvY3VtZW50YXRpb24gaGFzIHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgTmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkuCgpTbywgdGFraW5nIHN0b2NrLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQsIGltcG9ydGFudGx5IGZvciB0aGlzIGNhc2UsIGBORl9DVF9QUk9UT19TQ1RQYC4KCkhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZnVsPyBGb3IgdHJpZ2dlcmluZyBsb2dnaW5nLCBgTkVURklMVEVSX05FVExJTktfTE9HYCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBQZXJoYXBzIGl0IGNhbiBoZWxwIG1lIHRyaWdnZXIgYG5mX2xvZ19wYWNrZXRgIHNwZWNpZmljYWxseSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBMb2dnaW5nIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBsb2dnaW5nIHBhdGgsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSW5pdGlhbGx5LCBJIHdhcyBjb25jZXJuZWQgdGhhdCB3aXRob3V0IGBORVRGSUxURVJfTkVUTElOS19MT0dgIGVuYWJsZWQsIHRoZSBgbmZfbG9nX3BhY2tldGAgZnVuY3Rpb24gbWlnaHQgc2ltcGx5IGRvIG5vdGhpbmcgb3IgcmV2ZXJ0IHRvIGEgZmFsbGJhY2sgbWVjaGFuaXNtLCBtYWtpbmcgdGhlIGVudGlyZSBleGVyY2lzZSBwb2ludGxlc3MuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBgbmZfbG9nX3BhY2tldGAgZGVwZW5kcyBvbiBhIHJlZ2lzdGVyZWQgbG9nZ2VyLiBJZiBubyBsb2dnZXIgaXMgcHJlc2VudCwgaXQgd2lsbCBpbmRlZWQgZG8gbm90aGluZyBhbmQgc2ltcGx5IHJldHVybi4KClRvIHRydWx5IGV4ZXJjaXNlIHRoZSBjb2RlIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgSSBuZWVkIGBuZXQtJmd0O2N0LnN5c2N0bF9sb2dfaW52YWxpZGAgdG8gYmUgbm9uLXplcm8uIEdvb2QgbmV3cywgU3l6a2FsbGVyIGNhbiBtYW5pcHVsYXRlIHN5c2N0bHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGJlaGF2ZSBzZW5zaWJseSBpZiB0aGVyZSYjMzk7cyBubyBsb2dnZXIgcmVnaXN0ZXJlZD8gWWVzLCBpdCBjYWxscyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG5mX2xvZ19wYWNrZXRgLiBFdmVuIHdpdGggdGhlIGxvZ2dlciBjaGVjayBpbiBgbmZfbG9nX3BhY2tldGAsIHRoZSBsb2NrZGVwIGFzc2VydCBhbmQgZGVmZXJyZWQgbG9nZ2luZyBsb2dpYyB3aXRoaW4gdGhlIGNhbGwgcGF0aCB3b3VsZCBzdGlsbCBleGVjdXRlIQoKU28sIHRoZSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGlzbiYjMzk7dCBhYnNvbHV0ZSB0byBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBIb3dldmVyLCBhZGRpbmcgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2Agc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG5ldCB0byBlbnN1cmUgdGhlIGVudGlyZSBsb2dnaW5nIHBhdGggaXMgdHJhdmVyc2VkIGR1cmluZyB0ZXN0aW5nLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBpdCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaDoKCiogICBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YAoqICAgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YAoKVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIHJlbGF0ZWQgdG8gU0NUUCBhbmQgVENQIHJlc3BlY3RpdmVseS4gV2hpbGUgbm90ICYjMzQ7aG90IHBhdGhzJiMzNDsgaW4gdGhlIGdlbmVyaWMgbmV0d29ya2luZyBzZW5zZSAobGlrZSBgaXBfcmN2YCksIHRoZXkgKmFyZSogaG90IHBhdGhzIGZvciBjb25udHJhY2ssIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgYXJlIHRoZSB2ZXJ5IGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgbWFraW5nIHRoZW0gdGhlIGNvcnJlY3QgZm9jdXMuCgpPaCwgYW5kIHRoZXJlJiMzOTtzIGFsc28gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBJdCYjMzk7cyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uIGluIHRoZSByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTcyPV9fcHJpbnRmKDQsIDUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTktfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzoxMDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTEwMS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc2Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3Ny1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzItXHRpZiAobG9nX2ludmFsaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NTMzOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUzNC1cdFx0XHRcdFx0ICBcJiMzNDtJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz01MTc9c3RhdGljIHZvaWQgbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTIzLVx0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI1LVx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjgtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mjk6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzAtXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMy1cdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNS1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzOC1cdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mzk6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDAtXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQzLVx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjU0NDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0NS1cdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTEwMDE9aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU0LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNTU6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU2LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1wmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc3LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNzg6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc5LVx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1wmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTk1LVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE5NjpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5Ny1cdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBEb24mIzM5O3QgY2hhbmdlIHN0YXRlICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0MC1cdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTI0MTpcdFx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwmIzM0O2ludmFsaWQgcnN0XCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDItXHRcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzA1LVx0XHRpZiAobG93ZXJlZF90aW1lb3V0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTMwNjpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNy1cdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgYW5kIE5ldGZpbHRlciBMb2dnaW5nKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGluZGVlZCBleHBvcnRlZCDigJMgZ29vZCwgdGhhdCBjb25maXJtcyBhIGtleSBwb2ludC4gTXkgZm9jdXMsIHRoZXJlZm9yZSwgaXMgbm93IG5hcnJvd2VkIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLgoKTm93LCByZWdhcmRpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgSSBoYXZlIGEgcHJlbGltaW5hcnkgbGlzdDogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX1BST1RPX1NDVFBgLCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZzsgdGhlIGNvbW1lbnQgZXhwbGljaXRseSBtZW50aW9ucyBgbmZuZXRsaW5rX2xvZ2AgYW5kIGl0cyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcsIHNvIEkgd2FudCB0byBjb25maXJtIHRoYXQgaXMgaW5kZWVkIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBIb2xkIG9uLCBgbmZuZXRsaW5rX2xvZ2AgbG9va3MgdG8gYmUgYSBtb2R1bGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IEkgaGF2ZSB0aGUgZXhhY3QgY29uZmlnIG5hbWUsIHJhdGhlciB0aGFuIGFzc3VtaW5nIGl0IGlzIGFzIHdyaXR0ZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENvbm50cmFjayBhbmQgTG9nZ2luZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgY29ycmVjdC4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORl9DT05OVFJBQ0tfRVZFTlRTYC4gQWx0aG91Z2ggaXQmIzM5O3Mgbm90ICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIHRoZSBsb2dnaW5nIGl0c2VsZiwgSSB3b25kZXIgaWYgaXQgcGxheXMgYSByb2xlIGluIHRoZSBhdHRyaWJ1dGUgZHVtcGluZyB0aGF0IHRoZSBjb21tZW50IG1lbnRpb25zLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgbm90ZXMsICYjMzQ7bmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gdGFrZSBjdC0mZ3Q7bG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSYjMzQ7LgoKQXR0cmlidXRlIGR1bXBpbmcsIGFzIEkgdW5kZXJzdGFuZCBpdCwgb2NjdXJzIHdoZW4gYG5mbmV0bGlua19sb2dgIGxvZ3MgYSBwYWNrZXQgYW5kIGluY2x1ZGVzIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gU28sIG15IGxpbmUgb2YgdGhvdWdodCBpczogZG9lcyBgbmZuZXRsaW5rX2xvZ2AgbmVlZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5zdXJlIHRoYXQgaXQgaW5jbHVkZXMgY29ubnRyYWNrIGluZm9ybWF0aW9uPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3RvX25sYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzM9dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy04Ni1cdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjg3Olx0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg4LVx0ICogY29ubnRyYWNrIGxvZ3MgbXVzdCBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzODk6c3RhdGljIGludCB0Y3BfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzOTAtXHRcdFx0IHN0cnVjdCBuZl9jb25uICpjdCwgYm9vbCBkZXN0cm95KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTE2NjA9Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcCA9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ1RfTkVUTElOSylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjE2Njg6XHQudG9fbmxhdHRyXHRcdD0gdGNwX3RvX25sYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NjktXHQuZnJvbV9ubGF0dHJcdFx0PSBubGF0dHJfdG9fdGNwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0NUX05FVExJTksgRGVwZW5kZW5jeSBEaXNjb3ZlcnkqKgoKUmlnaHQsIHNvIEkgc2VlIHRoaXMgY29kZSByZXF1aXJpbmcgYHRjcF90b19ubGF0dHJgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBhcyBsaWtlbHkgYmVpbmcgdGllZCB0byBOZXRsaW5rIGludGVncmF0aW9uLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX05GX0NUX05FVExJTktgIGhlcmUmIzM0Oy4gTWFrZXMgc2Vuc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIE5ldGxpbmsgaW50ZXJmYWNlIGhhcyBhbHdheXMgYmVlbiBjcnVjaWFsIGZvciBleHBvcnRpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0JiMzOTtzIHNldC4gTG9va3MgbGlrZSBJIHNob3VsZCBnbyBtYWtlIHN1cmUgYE5GX0NUX05FVExJTktgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRoZSBvYnZpb3VzIHN1c3BlY3QsIGFuZCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdXJwcmlzZXMgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DVF9ORVRMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNTU9Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNjY6Y29uZmlnIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzczOmNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZSAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM4NTpjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgYSBEZWFkbG9jayBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBub3cuIGBORl9DVF9ORVRMSU5LYCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlIHRvIHRyaWdnZXIgdGhlIGRlYWRsb2NrIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIAoKTGV0JiMzOTtzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEkgc2VlOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAsIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCwgb2YgY291cnNlLCB0aGUga2V5IG9uZSwgYE5GX0NUX05FVExJTktgLgoKRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBsb29rcyByb2NrIHNvbGlkOyBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgYWxsIHRoZSBjb3JyZWN0IHBpZWNlcyBpbiBwbGFjZS4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBpZiBgTkZfQ1RfTkVUTElOS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBtYXkgbmVlZCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFx0ICBvbiBob3cgcmVzdHJpY3RpdmUgeW91ciBydWxlc2V0IGlzLlxuIDM2MTpcdFx0ICBJZiB5b3UgYXJlIHVzaW5nIGEgdGZ0cCBjbGllbnQgYmVoaW5kIC1qIFNOQVQgb3IgLWogTUFTUVVFUkFESU5HXG4gMzYyOlx0XHQgIHlvdSB3aWxsIG5lZWQgdGhpcy5cbiAzNjM6XHRcbiAzNjQ6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMzY1Olx0XG4gMzY2Olx0Y29uZmlnIE5GX0NUX05FVExJTktcbiAzNjc6XHRcdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4gMzY4Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNjk6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXG4gMzcyOlx0XG4gMzczOlx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuIDM3NDpcdFx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4gMzc1Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzNzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMzc3Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19USU1FT1VUXG4gMzc4Olx0XHRoZWxwXG4gMzc5Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjYwCgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBGaXggZm9yIENvbm50cmFjayBQYWNrZXQgTG9nZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIGxvY2tpbmcgaW4gdGhlIGNvbm50cmFjayBtb2R1bGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IGRlZmVycmluZyB0aGUgbG9nZ2luZyBhY3Rpb24gdW50aWwgKmFmdGVyKiB0aGUgY29ubnRyYWNrIGxvY2sgKGBjdC0mZ3Q7bG9ja2ApIGlzIHJlbGVhc2VkLiBUaGlzIG1lYW5zIGEgc2hpZnQgaW4gZXhlY3V0aW9uIG9yZGVyLCB3aGljaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgbmV3IHByb2JsZW1zLCBldmVuIGlmIGl0IGZpeGVzIHRoZSBkZWFkbG9jay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy4KCkxldCBtZSBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIHRoaXMgYmVoYXZpb3I6IEZpcnN0LCBgTkVURklMVEVSYCwgb2J2aW91c2x5LCBmb2xsb3dlZCBieSBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgYE5GX0NPTk5UUkFDS2Ag4oCTIHRoZSBmb3VuZGF0aW9uIGZvciBldmVyeXRoaW5nIGhlcmUuIFdlIG5lZWQgYE5GX0NUX1BST1RPX1NDVFBgIHRvIGRlYWwgd2l0aCBTQ1RQIHNwZWNpZmljYWxseS4gIFRoZW4sIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCBgTkZfQ1RfTkVUTElOS2AuCgpNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHN5bWJvbHMgdG8gZXZhbHVhdGU6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0IGxhc3Qgb25lIGlzIHRoZSBvbmUgSSBuZWVkIHRvIHNwZWNpZmljYWxseSBkb3VibGUtY2hlY2sgdGhlIG5hbWUgb2YuIFl1cCwgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGl0IGlzLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgb3RoZXIgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgY2FuZGlkYXRlcyBhcmUgYWxsIHN0YXRpYywgdGhlcmVmb3JlIGlubGluZWQgb3Igbm90IHZpc2libGUuIEZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyB0byBiZSB0aGUgcmlnaHQgYXBwcm9hY2guCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGNvdmVycyBldmVyeXRoaW5nIHJlbGV2YW50IGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCB0byBmdXp6IHRoaXMgY2hhbmdlIGVmZmVjdGl2ZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfTE9HJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfUFJPVE9fU0NUUCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja19zY3RwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2RlcCBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBieSBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBTQ1RQIGFuZCBUQ1AgY29ubnRyYWNrIHBhY2tldHMgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBsb2NrIChjdC1cdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NDIuMjI1MjExMDU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzE2OTkyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX1BST1RPX1NDVFBcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0xPR1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja19zY3RwX3BhY2tldFwiLFxuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIixcbiAgICBcIm5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2tkZXAgaXNzdWUgKHBvdGVudGlhbCBkZWFkbG9jaykgYnkgZGVmZXJyaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIGNvbm50cmFjayBwYWNrZXRzIHVudGlsIGFmdGVyIHRoZSBjb25udHJhY2sgbG9jayAoY3QtXFx1MDAzZWxvY2spIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlciBvZiBwYWNrZXQgcHJvY2Vzc2luZy4gRnV6emluZyB0aGlzIGNoYW5nZSBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmVycmVkIGxvZ2dpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGNvbm50cmFjaywgU0NUUCBjb25udHJhY2ssIG5ldGxpbmsgbG9nZ2luZywgYW5kIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSAod2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgYXR0cmlidXRlIGR1bXBpbmcgZGVhZGxvY2sgbWVudGlvbmVkIGluIHRoZSBwYXRjaCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEwOjQyLjIyNTIxOTkwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNDU1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZhMWZmMTAxMWM4NmJjNmJhNzhkN2M5ZTk4YmUxYTZmODBiMzNjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjEwOjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXFxuaW5kZXggYWQ5Njg5NjUxNmI2Zi4uOTQzOTU5NmYzNGU2YSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xcbkBAIC04Myw2ICs4MywxMiBAQCB2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGxpa2VseShuZXQtXFx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZCA9PSAwKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cXG4rXFx0ICogdGFrZSBjdC1cXHUwMDNlbG9jayBhZ2FpbiB2aWEgaGVscGVycyBzdWNoIGFzIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZFxcbitcXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcbiBcXHR2YV9zdGFydChhcmdzLCBmbXQpO1xcbiBcXHR2YWYuZm10ID0gZm10O1xcbiBcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jXFxuaW5kZXggN2UxMGZhNjVjYmRkMy4uZGQ5MGYxZGY5ZDU1ZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcXG5AQCAtMzM5LDcgKzMzOSw5IEBAIGludCBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHR1X2ludDMyX3Qgb2Zmc2V0LCBjb3VudDtcXG4gXFx0dW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9O1xcbitcXHRib29sIGxvZ19pbnZhbGlkID0gZmFsc2U7XFxuIFxcdGJvb2wgaWdub3JlID0gZmFsc2U7XFxuK1xcdHU4IGludmFsaWRfdHlwZSA9IDA7XFxuIFxcbiBcXHRpZiAoc2N0cF9lcnJvcihza2IsIGRhdGFvZmYsIHN0YXRlKSlcXG4gXFx0XFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XFxuQEAgLTQ1MSwxMCArNDUzLDggQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRcXHQvKiBJbnZhbGlkICovXFxuIFxcdFxcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XFxuLVxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBvbGRfc3RhdGUsIGRpciwgc2NoLVxcdTAwM2V0eXBlKTtcXG4tXFxuK1xcdFxcdFxcdGxvZ19pbnZhbGlkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0aW52YWxpZF90eXBlID0gc2NoLVxcdTAwM2V0eXBlO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTUyOSw2ICs1MjksMTAgQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAobG9nX2ludmFsaWQpXFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICBvbGRfc3RhdGUsIGRpciwgaW52YWxpZF90eXBlKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuaW5kZXggY2VlZWQzZDdmZTUyMC4uOTMyNzJhYWZkMjg5YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuQEAgLTQ4MCwzNyArNDgwLDgxIEBAIHN0YXRpYyB2b2lkIHRjcF9pbml0X3NlbmRlcihzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXFxuIFxcdH1cXG4gfVxcbiBcXG4tX19wcmludGYoNiwgNylcXG4tc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbiBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXFxuK2VudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUge1xcbitcXHRORl9UQ1BfTE9HX05PTkUsXFxuK1xcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX09WRVIsXFxuK1xcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxcbitcXHRORl9UQ1BfTE9HX0FDS19VTkRFUixcXG4rfTtcXG4rXFxuK3N0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cge1xcbitcXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XFxuK1xcdHUzMiB2YWx1ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4rXFx0XFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXFxuK1xcdFxcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcXG4rXFx0XFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXFxuK1xcdFxcdCAgICAgdTMyIHZhbHVlKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuLVxcdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xcbi1cXHR2YV9saXN0IGFyZ3M7XFxuIFxcdGJvb2wgYmVfbGliZXJhbDtcXG4gXFxuIFxcdGJlX2xpYmVyYWwgPSBzZW5kZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cXHUwMDNldGNwX2JlX2xpYmVyYWw7XFxuIFxcdGlmIChiZV9saWJlcmFsKVxcbiBcXHRcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiBcXG4tXFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4tXFx0dmFmLmZtdCA9IGZtdDtcXG4tXFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuLVxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4tXFx0dmFfZW5kKGFyZ3MpO1xcbi1cXG4rXFx0bG9nLVxcdTAwM2V0eXBlID0gdHlwZTtcXG4rXFx0bG9nLVxcdTAwM2V2YWx1ZSA9IHZhbHVlO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4re1xcbitcXHRzd2l0Y2ggKGxvZy1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gXFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcXG4tXFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK1xcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFxcdTAwMjZjdC1cXHUwMDNlcHJvdG8udGNwO1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXNlZW5bZGlyXTtcXG5AQCAtNjQwLDMxICs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuIFxcdFxcdFxcdHNlbmRlci1cXHUwMDNldGRfZW5kID0gZW5kO1xcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XFxuIFxcbi1cXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLCBvdmVyc2hvdCk7XFxuK1xcdFxcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgKyAxKTtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xcbiBcXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIHx8XFxuIFxcdFxcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghaW5fcmVjdl93aW4pXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVxcdTAwM2V0ZF9tYXh3aW4gLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbitcXHRcXHRcXHRcXHRcXHQgICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4gXFxuIFxcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXFxuIFxcdGlmICghdGNwaC1cXHUwMDNlc3luKVxcbkBAIC03MTksMTEgKzc2MSw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK3N0YXRpYyBib29sIF9fY29sZFxcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xcbkBAIC03MzIsNyArNzcxLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpIHx8XFxuIFxcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcXG4gXFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxcbkBAIC03NDcsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGNhc2UgVENQX0ZJTl9TRVQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTc1NSw3ICs3OTQsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0ICAgICBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XFxuIFxcdFxcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcXG4gXFx0XFx0aWYgKGV4cGlyZXMgXFx1MDAzYyAxMjAgKiBIWilcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuIFxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbkBAIC03NjQsMTYgKzgwMywxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbi1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xcbiBcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xcbkBAIC05NzAsNyArMTAwOCw5IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmV0KTtcXG4gXFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBpbnQgaW5kZXgsICp0aW1lb3V0cztcXG4rXFx0Ym9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTtcXG4gXFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcXG4rXFx0c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBsb2cgPSB7fTtcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGg7XFxuIFxcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XFxuQEAgLTEyNTIsMTQgKzEyOTIsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0fVxcbiBcXG4gXFx0cmVzID0gdGNwX2luX3dpbmRvdyhjdCwgZGlyLCBpbmRleCxcXG4tXFx0XFx0XFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcXG4rXFx0XFx0XFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFxcdTAwMjZsb2cpO1xcbiBcXHRzd2l0Y2ggKHJlcykge1xcbiBcXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9nKTtcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxcbi1cXHRcXHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xcbitcXHRcXHRsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcdTAwMjZsb2cpO1xcbitcXHRcXHRpZiAobG93ZXJlZF90aW1lb3V0KVxcbitcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwibG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbiBcXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcXG4gXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEwOjQyLjc2MDc5NDAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMDE4MTM5OTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9QUk9UT19TQ1RQXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRcIixcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVxcdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmExZmYxMDExYzg2YmM2YmE3OGQ3YzllOThiZTFhNmY4MGIzM2M1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDoxMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXG5pbmRleCBhZDk2ODk2NTE2YjZmLi45NDM5NTk2ZjM0ZTZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1xuQEAgLTgzLDYgKzgzLDEyIEBAIHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGxpa2VseShuZXQtXHUwMDNlY3Quc3lzY3RsX2xvZ19pbnZhbGlkID09IDApKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0b1xuK1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXG4rXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cdTAwM2Vsb2NrLlxuK1x0ICovXG4rXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbitcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gXHR2YWYuZm10ID0gZm10O1xuIFx0dmFmLnZhID0gXHUwMDI2YXJncztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbmluZGV4IDdlMTBmYTY1Y2JkZDMuLmRkOTBmMWRmOWQ1NWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuY1xuQEAgLTMzOSw3ICszMzksOSBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdHVfaW50MzJfdCBvZmZzZXQsIGNvdW50O1xuIFx0dW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdHVuc2lnbmVkIGxvbmcgbWFwWzI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSB7IDAgfTtcbitcdGJvb2wgbG9nX2ludmFsaWQgPSBmYWxzZTtcbiBcdGJvb2wgaWdub3JlID0gZmFsc2U7XG4rXHR1OCBpbnZhbGlkX3R5cGUgPSAwO1xuIFxuIFx0aWYgKHNjdHBfZXJyb3Ioc2tiLCBkYXRhb2ZmLCBzdGF0ZSkpXG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuQEAgLTQ1MSwxMCArNDUzLDggQEAgaW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRcdC8qIEludmFsaWQgKi9cbiBcdFx0aWYgKG5ld19zdGF0ZSA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuLVx0XHRcdFx0XHRcdCAgXCJJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwiLFxuLVx0XHRcdFx0XHRcdCAgb2xkX3N0YXRlLCBkaXIsIHNjaC1cdTAwM2V0eXBlKTtcbi1cbitcdFx0XHRsb2dfaW52YWxpZCA9IHRydWU7XG4rXHRcdFx0aW52YWxpZF90eXBlID0gc2NoLVx1MDAzZXR5cGU7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0XHR9XG4gXG5AQCAtNTI5LDYgKzUyOSwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRpZiAobG9nX2ludmFsaWQpXG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJJbnZhbGlkLCBvbGRfc3RhdGUgJWQsIGRpciAlZCwgdHlwZSAlZFwiLFxuK1x0XHRcdFx0XHQgIG9sZF9zdGF0ZSwgZGlyLCBpbnZhbGlkX3R5cGUpO1xuIG91dDpcbiBcdHJldHVybiAtTkZfQUNDRVBUO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi45MzI3MmFhZmQyODliIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsODEgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4rXHRORl9UQ1BfTE9HX05PTkUsXG4rXHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuK1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbitcdE5GX1RDUF9MT0dfQUNLX09WRVIsXG4rXHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4rXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4rXHR1MzIgdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXG4rXHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbitcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4rXHRcdCAgICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuK3tcbitcdHN3aXRjaCAobG9nLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCJpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLFxuLVx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4rXHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICs2ODQsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRcdFx0c2VuZGVyLVx1MDAzZXRkX2VuZCA9IGVuZDtcbiBcdFx0XHRzZW5kZXItXHUwMDNlZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRDtcbiBcbi1cdFx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIiwgb3ZlcnNob3QpO1xuK1x0XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdCAgIE5GX1RDUF9MT0dfT1ZFUlNIT1QsIG92ZXJzaG90KTtcbiBcdFx0fVxuIFxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbitcdFx0XHRcdCAgIE5GX1RDUF9MT0dfU0VRX09WRVIsIHNlbmRlci1cdTAwM2V0ZF9tYXhlbmQgKyAxKTtcbiBcdH1cbiBcbiBcdGlmICghYmVmb3JlKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfT1ZFUiwgcmVjZWl2ZXItXHUwMDNldGRfZW5kICsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwiLFxuLVx0XHRcdFx0XHQgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbitcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuK1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdFx0XHRcdFx0ICAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuIFx0aWYgKCFhZnRlcihzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4rXHRcdFx0XHRcdCAgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSk7XG4gXG4gXHQvKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLiAqL1xuIFx0aWYgKCF0Y3BoLVx1MDAzZXN5bilcbkBAIC03MTksMTEgKzc2MSw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHRcdCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuLVx0XHRcdFx0XHQgaW50IGluZGV4LFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuK3N0YXRpYyBib29sIF9fY29sZFxuK25mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIGludCBpbmRleClcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xuQEAgLTczMiw3ICs3NzEsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdGlmICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpIHx8XG4gXHQgICAgdGVzdF9iaXQoSVBTX0ZJWEVEX1RJTUVPVVRfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRFxuIFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxuQEAgLTc0Nyw3ICs3ODYsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGNhc2UgVENQX0ZJTl9TRVQ6XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAoY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyICE9IGRpciBcdTAwMjZcdTAwMjZcbkBAIC03NTUsNyArNzk0LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHQgICAgIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkge1xuIFx0XHRleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzYyAxMjAgKiBIWilcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4gXHRcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xuQEAgLTc2NCwxNiArODAzLDE1IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0XHR0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTtcbiBcdFx0aWYgKGV4cGlyZXMgXHUwMDNlIHRpbWVvdXQpIHtcbi1cdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsXG4tXHRcdFx0XHRcdCAgXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCIsXG4tXHRcdFx0XHRcdCAgaW5kZXgsIGRpciwgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xuLVxuIFx0XHRcdFdSSVRFX09OQ0UoY3QtXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcbiBcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLyogdGFibGUgb2YgdmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgLSBQVVNILCBFQ0UgYW5kIENXUiBhcmUgYWx3YXlzIHZhbGlkICovXG5AQCAtOTcwLDcgKzEwMDgsOSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0c3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZXQpO1xuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4rXHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4gXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGg7XG4gXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xuQEAgLTEyNTIsMTQgKzEyOTIsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbitcdFx0XHQgICAgc2tiLCBkYXRhb2ZmLCB0aCwgXHUwMDI2bG9nKTtcbiBcdHN3aXRjaCAocmVzKSB7XG4gXHRjYXNlIE5GQ1RfVENQX0lHTk9SRTpcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcbi1cdFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcbitcdFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXHRcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXHUwMDI2bG9nKTtcbitcdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbitcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1wiKTtcbiBcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0FDQ0VQVDpcbiBcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMDo0Mi43NjA3OTgwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc4NDU3Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIFRoZSBjb21taXQgbWVzc2FnZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtZW50aW9uaW5nIFwic3l6LWNsdXN0ZXJcIiBhbmQgXCJ1bmRlciByZXZpZXcuXCIgIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyB0aGlzIGxpa2VseSBvcmlnaW5hdGVkIGZyb20gZnV6emluZyBlZmZvcnRzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgaXMgYWJvdXQgbG9jayBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGBjdC1cdTAwM2Vsb2NrYC4gIFdlJ3ZlIGdvdCBhbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgY2FsbCBiZWluZyBtb3ZlZCBhcm91bmQuIFRoZSBwYXRjaCBhZGRzIGBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtgIGluIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCwgYWxvbmcgd2l0aCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmVhc29uaW5nLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGxvY2tkZXAgaXNzdWUgb3IgZGVhZGxvY2suICBJdCBsb29rcyBsaWtlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkICp3aGlsZSogaG9sZGluZyBgY3QtXHUwMDNlbG9ja2AsIGFuZCBiZWNhdXNlIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGBuZm5ldGxpbmtfbG9nYCwgaXQgY291bGQgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gcmUtYWNxdWlyZSB0aGUgc2FtZSBsb2NrLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCB0byBkZWZlciB0aGUgY2FsbCB0byBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdW50aWwgYWZ0ZXIgYHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spYC4gIEluIFRDUCwgdGhleSBhcmUgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgZm9yIHRoYXQuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHkuIEl0J3MgYSBidWcgZml4IGFkZHJlc3NpbmcgYSBsb2NrIGludmVyc2lvbi9kZWFkbG9jay4gRnV6emluZyBjYW4gdmVyaWZ5IHRoZSBmaXggYW5kLCBjcml0aWNhbGx5LCBlbnN1cmUgbm8gbmV3IHByb2JsZW1zIGFyZSBpbnRyb2R1Y2VkLiAgV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb2YgYGN0YC4gQWx0aG91Z2ggaXQgc2VlbXMgYGN0YCBpcyBzYWZlIHRvIHVzZSBoZXJlLlxuXG5BIHF1aWNrIHNhbml0eSBjaGVjazogc2luY2UgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHRha2VzIGBjdGAgYXMgYW4gYXJndW1lbnQsIGFuZCB0aGUgY2FsbGVyIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlLCB0aGF0IHNob3VsZCBiZSBzYWZlLiBIb3dldmVyLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgdG8gYmUgc3VyZS5cblxuTm93LCBsZXQncyBnZXQgc3BlY2lmaWMuICBXaGljaCBmdW5jdGlvbnMgYXJlIG5vdyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nPyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCwgYHRjcF9pbl93aW5kb3dgLCBhbmQgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgY29tZSBpbW1lZGlhdGVseSB0byBtaW5kLiBUaGV5J3JlIGFsbCBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlcy5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyBlZmZlY3RpdmUuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tfUFJPVE9TYCBhcmUgZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcgVENQIGFuZCBTQ1RQLiAgQWx0aG91Z2ggaW4gbmV3ZXIga2VybmVscyBTQ1RQIGNvbm50cmFjayBtYXkgYmUgYnVpbHQgaW50byBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTQuNTQ1Mzc1NDI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzYxNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTQuNjMxNzQzNTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MTcxNjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDpcblxuKipOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmc6IFNDVFAgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgSSBrbm93IHdlIGFic29sdXRlbHkgbmVlZCBgTkZfQ09OTlRSQUNLYCBlbmFibGVkLiBUaGF0J3MgZnVuZGFtZW50YWwuIE5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wsIG9yIFNDVFAuIEknbSB0aGlua2luZyB3ZSBuZWVkIGBORl9DVF9QUk9UT19TQ1RQYCB0byBwcm9wZXJseSBoYW5kbGUgY29ubmVjdGlvbnMgdXNpbmcgdGhhdCBwcm90b2NvbC4gTGV0IG1lIGp1c3QgcGF1c2UgZm9yIGEgc2Vjb25kLCBob2xkIG9uLi4uIGl0J3MganVzdCBnb29kIHByYWN0aWNlIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgYE5GX0NUX1BST1RPX1NDVFBgIG1vZHVsZSBpcyBldmVuIGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbCB2ZXJzaW9uLCBvciBpZiBpdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBPa2F5LCBsZXQgbWUgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMDo1OS4yODM0NjI0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1Njg5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xOTg9Y29uZmlnIE5GX0NUX1BST1RPX0dSRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjAxOmNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIwMi1cXHRib29sICdTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTA6NTkuMzUxMDM3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTcyMjMyOTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgaXMgaW5kZWVkIGEgdmFsaWQgcHJvdG9jb2wgaWRlbnRpZmllci4gR29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFsc28gbWVudGlvbnMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGhhbmRsZXMgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIE5hdHVyYWxseSwgZm9yIHRoaXMgbG9nZ2luZyB0byBhY3R1YWxseSAqaGFwcGVuKiwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2xvZ19pbnZhbGlkYCBtdXN0IGJlIGVuYWJsZWQgdmlhIHN5c2N0bC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci5cblxuTm93LCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbG9ja2RlcCBpc3N1ZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhIHBvdGVudGlhbCBmdW5jdGlvbmFsIGNoYW5nZS4gQ2hhbmdpbmcgbG9ja2luZyBvcmRlciBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gVGhleSdyZSB1bmxvY2tpbmcgKmJlZm9yZSogbG9nZ2luZyBpbiB0aGlzIGluc3RhbmNlLCB3aGljaCBpcyBhIGNvbW1vbiBwYXR0ZXJuIHRvIGF2b2lkIGhvbGRpbmcgbG9ja3MgbG9uZ2VyIHRoYW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuIEJ1dOKApiBkb2VzIHRoaXMgYWxzbyBhZmZlY3QgdGhlICpjb250cm9sIGZsb3cqIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZz8gXG5cblllcywgaXQgbG9va3MgbGlrZSBpdC4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBub3cgcmV0dXJucyAqYWZ0ZXIqIHVubG9ja2luZyBhbmQgbG9nZ2luZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIHJlb3JkZXJpbmcgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgbG9jayByZW9yZGVyaW5nLCBjb21iaW5lZCB3aXRoIHRoZSBjaGFuZ2VkIHJldHVybiBwb2ludCwgbWFrZXMgbWUgdGhpbmsgdGhhdCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgY3JvcCB1cC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuSSBzaG91bGQgZm9jdXMgb24gYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAgYW5kIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAuIExldCdzIGNoZWNrIGlmIHRoZXkncmUgc3RhdGljIG9yIGV4cG9ydGVkL2dsb2JhbC4gVGhhdCB3aWxsIGFmZmVjdCBob3cgSSBhcHByb2FjaCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA2LjMyMzI3MzIwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1NTU4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3NjdHBfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5ODktXFx0Y2FzZSBJUFBST1RPX1NDVFA6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjE5OTA6XFx0XFx0cmV0dXJuIG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTkxLVxcdFxcdFxcdFxcdFxcdFxcdGN0aW5mbywgc3RhdGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTI5NT1zdGF0aWMgYm9vbCBzY3RwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzI2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtTkZfQUNDRVBUIGZvciBpbnZhbGlkLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozMjc6aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTMyOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA2LjQ0MjgzNDgwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ2MDczNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIFNjb3BlIGFuZCBWaXNpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHNjb3BlLiBUaGVzZSBhcmUgKmdsb2JhbCogZnVuY3Rpb25zLCBvciBhdCBsZWFzdCwgbm9uLXN0YXRpYyBvbmVzIHRoYXQgaGF2ZSB2aXNpYmlsaXR5IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy4gVGhhdCBtZWFucyB0aGV5J3JlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGFjY2Vzc2libGUgZnJvbSBkaWZmZXJlbnQgY29tcGlsYXRpb24gdW5pdHMuIFRoaXMgaGFzIGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGRlc2lnbjogSSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSWYgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2UgcHVibGljLCBJIG5lZWQgdG8gY29uc2lkZXIgbmFtaW5nIGNvbnZlbnRpb25zLiBJdCBhbHNvIHRlbGxzIG1lIGEgbGl0dGxlIGFib3V0IHRoZSBhcmNoaXRlY3R1cmU7IGlmIHRoZXkgYXJlIGJlaW5nIHVzZWQgYWNyb3NzIGZpbGVzLCB0aGlzIHdpbGwgaGF2ZSBhbiBlZmZlY3Qgb24gdmVyc2lvbmluZyBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEknbGwgbmVlZCB0byBjb25zaWRlciB3aGF0IEkgc2hvdWxkIGJlIGRvaW5nIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHRlc3RlZCwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtaWdodCBhZmZlY3Qgb3RoZXIgY29kZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA5LjcwNzQ0NjU2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzQzOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTE5NzYtXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MTk3NzpcXHRcXHRyZXR1cm4gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3OC1cXHRcXHRcXHRcXHRcXHQgICAgICAgY3RpbmZvLCBzdGF0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05OTA9c3RhdGljIHZvaWQgbmZfY3RfdGNwX3N0YXRlX3Jlc2V0KHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwMC0vKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTAwMTppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEwMDItXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjA5LjgyMzE5OTY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1MzcyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyBDb25udHJhY2sgU3RydWN0dXJlcyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBSaWdodCwgdGhlIGVudGl0aWVzIHVuZGVyIGNvbnNpZGVyYXRpb24gYXJlIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXJlJ3Mgc29tZSBkeW5hbWljIGJlaGF2aW9yIGludm9sdmVkIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSG1tLCBidXQgaGFuZyBvbiwgSSBzZWUgdGhhdCBib3RoIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIGFuZCBgdGNwX2luX3dpbmRvd2AgYXJlIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyEgT2theSwgc28gdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBzb21ld2hhdC4gTXkgcHJpbWFyeSB0YXJnZXRzIG5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGFyZSBkZWZpbml0ZWx5IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBkaXNzZWN0IGZ1cnRoZXIuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSdsbCB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX1BST1RPX1NDVFBgIGFyZSBlbmFibGVkLiBBbmQgb2YgY291cnNlLCBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYXJlIGxpa2VseSBhbHNvIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhdHRlciBjYXJlZnVsbHkgYXMgaXQgbWlnaHQgb3BlbiB1cCBzb21lIGFkZGl0aW9uYWwgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkLiBDaGVja2luZyB0aGVzZSBjb25maWd1cmF0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTQuODk4NTc1MTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM2MTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjE0Ljk1OTk0MTc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExNTMzMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSA4MiwgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiByZXNpZGVzLiBJIGtub3cgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgd2lsbCB1c2UgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBmb3JtYXQ7IGhvcGVmdWxseSwgaXQncyBub3QgYnVyaWVkIHRvbyBkZWVwIGluIGFuIGBpZmAgYmxvY2suIExldCdzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IGNyaXRpY2FsIHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIHVuZGVybHlpbmcga2VybmVsIGZlYXR1cmVzIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyByZXF1aXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCBwb3NzaWJseSBvcHRpbWl6aW5nIHRoZSBuZXRmaWx0ZXIgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTguMjcxNDc4MDExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDc3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA4MDpcXHRcXHQgIGZvciBwYXNzaXZlIE9TIGZpbmdlcnByaW50IHZpYSBORk5FVExJTksuXFxuICA4MTpcXHRcXG4gIDgyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tcXG4gIDgzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbiAgODQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA4NTpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG4gIDg2OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcXG4gIDg5OlxcdFxcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcXG4gIDkwOlxcdFxcdCAgaW50byBjb25uZWN0aW9ucy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXFxuICA5MzpcXHRcXHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XFxuICA5NDpcXHRcXHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnIGJlbG93KS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MTguMjcxNjU2MDYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ3MTE1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTkVURklMVEVSIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBkZXBlbmRlbmN5IGRvZXNuJ3Qgc2VlbSB0byBoaW5nZSBvbiBhbnl0aGluZyAqZXhjZXB0KiBgTkVURklMVEVSYCBpdHNlbGYgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgaW5jbHVzaW9uLiBObyBjb21wbGV4IG5lc3RlZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXJvdW5kIGxpbmUgMjAxLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLCBhbmQgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZXhhbWluZSB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjIyLjc0NjM2OTc0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxuIDE5NjpcXHRcXHRib29sXFxuIDE5NzpcXHRcXG4gMTk4OlxcdGNvbmZpZyBORl9DVF9QUk9UT19HUkVcXG4gMTk5OlxcdFxcdGJvb2xcXG4gMjAwOlxcdFxcbiAyMDE6XFx0Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4gMjAyOlxcdFxcdGJvb2wgJ1NDVFAgcHJvdG9jb2wgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0J1xcbiAyMDM6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjA0OlxcdFxcdGRlZmF1bHQgeVxcbiAyMDU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgbGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uXFxuIDIwODpcXHRcXHQgIHRyYWNraW5nIGNvZGUgd2lsbCBiZSBhYmxlIHRvIGRvIHN0YXRlIHRyYWNraW5nIG9uIFNDVFAgY29ubmVjdGlvbnMuXFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjExOlxcdFxcbiAyMTI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG4gMjEzOlxcdFxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDIxNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMToyMi43NDY0NjgzMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwMTUwNzQwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggbWVhbnMgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGF0IGZpcnN0LiBBbmQgc2luY2Ugd2UncmUgaGVyZSwgbGV0J3MgZW5hYmxlIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ1RfUFJPVE9fU0NUUGAgYXMgd2VsbC4gV2FpdCBhIG1pbnV0ZSwgYE5GX0NPTk5UUkFDS2AgaXMgYSB0cmlzdGF0ZSwgc28gYSBzdHJhaWdodCBcInlcIiBzaG91bGQgYmUgZmluZS4gQW5kLCBvZiBjb3Vyc2UsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGBORVRGSUxURVJgIGl0c2VsZiBpcyBzZXQgdG8gXCJ5XCIuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3Mgd2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0LiBBaCwgYE5GX0NPTk5UUkFDS19FVkVOVFNgIGxvb2tlZCBsaWtlIGl0ICptaWdodCogYmUgcmVsZXZhbnQgZm9yIGxvZ2dpbmcsIGJ1dCBubywgdGhlIGxvZ2dpbmcgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSBgbmZuZXRsaW5rX2xvZ2AsIHdoaWNoIG1lYW5zIHdlIG5lZWQgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgZm9yIHRoYXQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaGFzIGFueSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6MzguNzYxNTQ2Mzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk5MzE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MTAwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtMTAxLSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzUtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzY6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc3LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTUzMi1cXHRpZiAobG9nX2ludmFsaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjUzMzpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzQtXFx0XFx0XFx0XFx0XFx0ICBcXFwiSW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTIzLVxcdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MjQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOC1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI5OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMwLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzMtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNDpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNS1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzOC1cXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzOTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDMtXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDAxPWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE1NTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNTYtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGlnbm9yZWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNzctXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTc4OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE3OS1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE5NS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExOTY6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImNoYWxsZW5nZS1hY2sgaWdub3JlZFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTctXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJ3QgY2hhbmdlIHN0YXRlICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQwLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTI0MTpcXHRcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXFwiaW52YWxpZCByc3RcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQyLVxcdFxcdFxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMwNS1cXHRcXHRpZiAobG93ZXJlZF90aW1lb3V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMDY6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDctXFx0XFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjExOjM4Ljg1MjU0NjI1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2MzA1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBFeHBvcnRlZCBTeW1ib2wqKlxuXG5IbW0sIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCBpcyBleHBvcnRlZCwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIENvdWxkIGl0cyBleGlzdGVuY2Ugb3IgYmVoYXZpb3IgYmUgY29uZGl0aW9uYWw/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkPyBJIHNob3VsZCBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGF0IGNvZGUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA3My4gVGltZSB0byBnbyBkaWdnaW5nIGluIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTE6NDQuNTE4ODU1MjU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXFxuICA4NzpcXHRcXHQgKiB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluIHZpYSBoZWxwZXJzIHN1Y2ggYXMgdGNwX3RvX25sYXR0cigpLCBzbyBpbnZhbGlkXFxuICA4ODpcXHRcXHQgKiBjb25udHJhY2sgbG9ncyBtdXN0IG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4gIDg5OlxcdFxcdCAqL1xcbiAgOTA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDkzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA5NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0bmZfbDRwcm90b19sb2dfaW52YWxpZChza2IsIHN0YXRlLFxcbiAgOTc6XFx0XFx0XFx0XFx0ICAgICAgIG5mX2N0X3Byb3RvbnVtKGN0KSwgXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbiAgOTg6XFx0XFx0dmFfZW5kKGFyZ3MpO1xcbiAgOTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMTo0NC41MTg5OTI5OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTE0MDk4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgcGF0Y2guIEl0J3MgdXNpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLCB3aGljaCwgSSBrbm93LCB1bHRpbWF0ZWx5IGNhbGxzIGBuZl9sb2dfcGFja2V0YC4gUmlnaHQsIGBuZl9sb2dfcGFja2V0YCBpcyBkZWZpbmVkIGluIGBuZl9sb2cuY2AsIHdoaWNoIGdldHMgYnVpbHQgaWYgYE5FVEZJTFRFUmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGJhc2UgZm9yIGV2ZXJ5dGhpbmcuIE5vdywgYSBzbGlnaHQgd3JpbmtsZSDigJMgYG5mX2xvZ19wYWNrZXRgIG1pZ2h0IG5lZWQgYSBsb2dnZXIgcmVnaXN0ZXJlZCwgYnV0IHRoZSBjb2RlIHVzaW5nIGl0IGlzICphbHdheXMqIGNvbXBpbGVkIGlmIGBORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBjaGFuZ2Ugc2VlbSB0byBiZSBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORl9DT05OVFJBQ0tgIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXQgc2VsZWN0cyBgTkZfREVGUkFHX0lQVjRgIGFuZCBgTkZfREVGUkFHX0lQVjZgLCB3aGljaCBpcyBleHBlY3RlZCwgYW5kIGl0J3MgYSB0cmlzdGF0ZSwgc28ganVzdCBgTkZfQ09OTlRSQUNLYCBpcyBzdWZmaWNpZW50LlxuXG5MZXQncyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgdG91Y2hpbmcgYG5mX2Nvbm50cmFja19wcm90by5jYCwgYG5mX2Nvbm50cmFja19wcm90b19zY3RwLmNgLCBhbmQgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEhtbSwgSSBzZWUgaXQncyBtb2RpZnlpbmcgYSBmZXcgZnVuY3Rpb25zOiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAsIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBgdGNwX2luX3dpbmRvd2AsIGFuZCBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYC5cblxuQWgsIEkgc2VlIHRoZSBpc3N1ZSBub3cuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9ja2RlcCBpc3N1ZS4gSXQncyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBwYWNrZXRzIHVudGlsIGFmdGVyIGBjdC1cdTAwM2Vsb2NrYCBpcyByZWxlYXNlZC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgYW5kIGV4ZWN1dGlvbiBvcmRlci4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcy4gRGVmaW5pdGVseSBuZWVkcyBmdXp6aW5nOyBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgY291bGQgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3RoZXIgcmFjZXMuXG5cbkknbGwga2VlcCBhIHNoYXJwIGZvY3VzIG9uIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGJlY2F1c2UgdGhlIGNvcmUgbG9naWMgaXMgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NUX1BST1RPX1NDVFBgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBORl9DT05OVFJBQ0tgIGRvZXNuJ3QgcmVxdWlyZSBgTkZfQ09OTlRSQUNLX1BST1RPU2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBpdCBkb2Vzbid0IC0gaXQgaW5jbHVkZXMgVENQLiBTQ1RQIGRvZXMgcmVxdWlyZSBgTkZfQ1RfUFJPVE9fU0NUUGAuIEFuZCBsZXQncyBkb3VibGUgY2hlY2ssIGlzIGBORl9DVF9QUk9UT19UQ1BgIGV2ZW4gYSB0aGluZz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzozMS40MzMwOTQyNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE0OTgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjMxLjU0NzI1MjIyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM1NjQyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkga25vdyBUQ1AgaXMgKmluaGVyZW50bHkqIHBhcnQgb2YgYE5GX0NPTk5UUkFDS2AuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHVzaW5nIGl0IGluIHByYWN0aWNlLiBEb2VzIGBORl9DT05OVFJBQ0tgIHJlcXVpcmUsIHNheSwgYElQX05GX0lQVEFCTEVTYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBJIGtub3cgY29ubnRyYWNrIGNhbiBiZSB1c2VkIHdpdGggaXB0YWJsZXMsIG5mdGFibGVzLCBvciBldmVuIHN0YW5kLWFsb25lIGlmIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBTeXprYWxsZXIgaXMgYSBrZXkgaGVyZTsgaXQncyBwcm92ZW4gY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIGNvbm50cmFjayBiZWhhdmlvcnMuIEkgcmVjYWxsIGl0IGRvZXMgdGhpcyBieSBzZW5kaW5nIHBhY2tldHMgd2l0aCBgTkZfQ09OTlRSQUNLYCBlbmFibGVkLCBvZnRlbiB3aXRoIHNpbXBsZSBydWxlcywgb3IgZXZlbiBqdXN0IGJ5IHNlbmRpbmcgcGFja2V0cyB3aGVuIGhvb2tzIGFyZSBpbiBwbGFjZS5cblxuV2FpdCwgaXQncyBjb21pbmcgYmFjayB0byBtZSwgdGhvc2UgY29ubnRyYWNrIGhvb2tzIGFyZSBzb21ldGltZXMgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5LCBvciB3aGVuIHJ1bGVzIGFyZSBhZGRlZC4gU3l6a2FsbGVyJ3MgZG9jdW1lbnRhdGlvbiBoYXMgc3BlY2lmaWMgZGVzY3JpcHRpb25zIGZvciBOZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eS5cblxuU28sIHRha2luZyBzdG9jaywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZTogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kLCBpbXBvcnRhbnRseSBmb3IgdGhpcyBjYXNlLCBgTkZfQ1RfUFJPVE9fU0NUUGAuXG5cbkhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZnVsPyBGb3IgdHJpZ2dlcmluZyBsb2dnaW5nLCBgTkVURklMVEVSX05FVExJTktfTE9HYCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBQZXJoYXBzIGl0IGNhbiBoZWxwIG1lIHRyaWdnZXIgYG5mX2xvZ19wYWNrZXRgIHNwZWNpZmljYWxseSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjM3LjE4Mjg5NzI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MDA3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTU0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTM6MzcuMjU5NDQyNTQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMDU0MjAyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgTG9nZ2luZyBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGxvZ2dpbmcgcGF0aCwgYW5kIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSW5pdGlhbGx5LCBJIHdhcyBjb25jZXJuZWQgdGhhdCB3aXRob3V0IGBORVRGSUxURVJfTkVUTElOS19MT0dgIGVuYWJsZWQsIHRoZSBgbmZfbG9nX3BhY2tldGAgZnVuY3Rpb24gbWlnaHQgc2ltcGx5IGRvIG5vdGhpbmcgb3IgcmV2ZXJ0IHRvIGEgZmFsbGJhY2sgbWVjaGFuaXNtLCBtYWtpbmcgdGhlIGVudGlyZSBleGVyY2lzZSBwb2ludGxlc3MuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIGBuZl9sb2dfcGFja2V0YCBkZXBlbmRzIG9uIGEgcmVnaXN0ZXJlZCBsb2dnZXIuIElmIG5vIGxvZ2dlciBpcyBwcmVzZW50LCBpdCB3aWxsIGluZGVlZCBkbyBub3RoaW5nIGFuZCBzaW1wbHkgcmV0dXJuLlxuXG5UbyB0cnVseSBleGVyY2lzZSB0aGUgY29kZSBpbiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAsIEkgbmVlZCBgbmV0LVx1MDAzZWN0LnN5c2N0bF9sb2dfaW52YWxpZGAgdG8gYmUgbm9uLXplcm8uIEdvb2QgbmV3cywgU3l6a2FsbGVyIGNhbiBtYW5pcHVsYXRlIHN5c2N0bHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGJlaGF2ZSBzZW5zaWJseSBpZiB0aGVyZSdzIG5vIGxvZ2dlciByZWdpc3RlcmVkPyBZZXMsIGl0IGNhbGxzIGBuZl9sNHByb3RvX2xvZ19pbnZhbGlkYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfbG9nX3BhY2tldGAuIEV2ZW4gd2l0aCB0aGUgbG9nZ2VyIGNoZWNrIGluIGBuZl9sb2dfcGFja2V0YCwgdGhlIGxvY2tkZXAgYXNzZXJ0IGFuZCBkZWZlcnJlZCBsb2dnaW5nIGxvZ2ljIHdpdGhpbiB0aGUgY2FsbCBwYXRoIHdvdWxkIHN0aWxsIGV4ZWN1dGUhXG5cblNvLCB0aGUgZGVwZW5kZW5jeSBvbiBgTkVURklMVEVSX05FVExJTktfTE9HYCBpc24ndCBhYnNvbHV0ZSB0byBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgIGFuZCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBIb3dldmVyLCBhZGRpbmcgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2Agc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG5ldCB0byBlbnN1cmUgdGhlIGVudGlyZSBsb2dnaW5nIHBhdGggaXMgdHJhdmVyc2VkIGR1cmluZyB0ZXN0aW5nLiBJJ20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGl0IGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaDpcblxuKiAgIGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgXG4qICAgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YFxuXG5UaGVzZSBhcmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgcmVsYXRlZCB0byBTQ1RQIGFuZCBUQ1AgcmVzcGVjdGl2ZWx5LiBXaGlsZSBub3QgXCJob3QgcGF0aHNcIiBpbiB0aGUgZ2VuZXJpYyBuZXR3b3JraW5nIHNlbnNlIChsaWtlIGBpcF9yY3ZgKSwgdGhleSAqYXJlKiBob3QgcGF0aHMgZm9yIGNvbm50cmFjaywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGVzZSBhcmUgdGhlIHZlcnkgZnVuY3Rpb25zIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLCBtYWtpbmcgdGhlbSB0aGUgY29ycmVjdCBmb2N1cy5cblxuT2gsIGFuZCB0aGVyZSdzIGFsc28gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLiBJdCdzIGEgc21hbGwgaGVscGVyIGZ1bmN0aW9uLCBidXQgaXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgaXQncyBleHBvcnRlZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uIGluIHRoZSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjQ1LjM2NDg2NjA5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0MzUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTcyPV9fcHJpbnRmKDQsIDUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjEwMDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTEwMS0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0xNDg9c3RhdGljIGludCBkb19iYXNpY19jaGVja3Moc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTE3NC1cXHRcXHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXFx1MDAzZWxlbmd0aCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzoxNzU6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIiVzIGZhaWxlZC4gY2h1bmsgbnVtICVkLCB0eXBlICVkLCBsZW4gJWQgZmxhZyAlZFxcXFxuXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdCAgICBzaC1cXHUwMDNldnRhZyAhPSBjdC1cXHUwMDNlcHJvdG8uc2N0cC52dGFnW2Rpcl0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc2OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIFxcXCJ2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy01MzItXFx0aWYgKGxvZ19pbnZhbGlkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo1MzM6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNTM0LVxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTUxNz1zdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyMy1cXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTI0OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTI1LVxcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MjgtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUyOTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMC1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMzLVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1MzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzUtXFx0XFx0XFx0XFx0XFx0ICBcXFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzgtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1Mzk6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDAtXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQzLVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTQ0OlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ1LVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwMT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE1NC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNTU6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTU2LVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTc3LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE3ODpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExNzktXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExOTUtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTk2OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTk3LVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0MC1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDE6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0Mi1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMDUtXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzA2OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzA3LVxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzo0NS40NDUzMDcyMzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1NDk2NDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29ubnRyYWNrIGFuZCBOZXRmaWx0ZXIgTG9nZ2luZyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGluZGVlZCBleHBvcnRlZCDigJMgZ29vZCwgdGhhdCBjb25maXJtcyBhIGtleSBwb2ludC4gTXkgZm9jdXMsIHRoZXJlZm9yZSwgaXMgbm93IG5hcnJvd2VkIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLCBhbmQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGhhdmUgYSBwcmVsaW1pbmFyeSBsaXN0OiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfUFJPVE9fU0NUUGAsIGFuZCBgTkVURklMVEVSX05FVExJTktfTE9HYC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBgTkVURklMVEVSX05FVExJTktfTE9HYCBpcyB0aGUgYXBwcm9wcmlhdGUgY29uZmlnOyB0aGUgY29tbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGBuZm5ldGxpbmtfbG9nYCBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZywgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpcyBpbmRlZWQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEhvbGQgb24sIGBuZm5ldGxpbmtfbG9nYCBsb29rcyB0byBiZSBhIG1vZHVsZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgSSBoYXZlIHRoZSBleGFjdCBjb25maWcgbmFtZSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgaXQgaXMgYXMgd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTM6NTAuNDAwMjc0OTM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTAwMzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyOmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxMzo1MC40ODkyODUyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE4NTg5MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQ29ubnRyYWNrIGFuZCBMb2dnaW5nIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGNvcnJlY3QuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORl9DT05OVFJBQ0tfRVZFTlRTYC4gQWx0aG91Z2ggaXQncyBub3QgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgdGhlIGxvZ2dpbmcgaXRzZWxmLCBJIHdvbmRlciBpZiBpdCBwbGF5cyBhIHJvbGUgaW4gdGhlIGF0dHJpYnV0ZSBkdW1waW5nIHRoYXQgdGhlIGNvbW1lbnQgbWVudGlvbnMuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBub3RlcywgXCJuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4gdmlhIGhlbHBlcnMgc3VjaCBhcyB0Y3BfdG9fbmxhdHRyKClcIi5cblxuQXR0cmlidXRlIGR1bXBpbmcsIGFzIEkgdW5kZXJzdGFuZCBpdCwgb2NjdXJzIHdoZW4gYG5mbmV0bGlua19sb2dgIGxvZ3MgYSBwYWNrZXQgYW5kIGluY2x1ZGVzIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBTbywgbXkgbGluZSBvZiB0aG91Z2h0IGlzOiBkb2VzIGBuZm5ldGxpbmtfbG9nYCBuZWVkIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbnN1cmUgdGhhdCBpdCBpbmNsdWRlcyBjb25udHJhY2sgaW5mb3JtYXRpb24/IFRoYXQncyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjU1LjMwNzg3NzQxM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjQwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF90b19ubGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mz12b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtODYtXFx0LyogbmZuZXRsaW5rX2xvZyBtYXkgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjg3OlxcdCAqIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4gdmlhIGhlbHBlcnMgc3VjaCBhcyB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTg4LVxcdCAqIGNvbm50cmFjayBsb2dzIG11c3Qgb25seSBiZSBlbWl0dGVkIGFmdGVyIGRyb3BwaW5nIGN0LVxcdTAwM2Vsb2NrLlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwMT1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM4OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzg5OnN0YXRpYyBpbnQgdGNwX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTM5MC1cXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm4gKmN0LCBib29sIGRlc3Ryb3kpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xNjYwPWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b190Y3AgPVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ1RfTkVUTElOSylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjY4OlxcdC50b19ubGF0dHJcXHRcXHQ9IHRjcF90b19ubGF0dHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY2OS1cXHQuZnJvbV9ubGF0dHJcXHRcXHQ9IG5sYXR0cl90b190Y3AsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjEzOjU1LjQxODUyNTE2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAxNTgxMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5IERpc2NvdmVyeSoqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGNvZGUgcmVxdWlyaW5nIGB0Y3BfdG9fbmxhdHRyYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGZsYWdzIHRoYXQgYXMgbGlrZWx5IGJlaW5nIHRpZWQgdG8gTmV0bGluayBpbnRlZ3JhdGlvbi4gSXQncyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaGVyZVwiLiBNYWtlcyBzZW5zZSwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgTmV0bGluayBpbnRlcmZhY2UgaGFzIGFsd2F5cyBiZWVuIGNydWNpYWwgZm9yIGV4cG9ydGluZyBjb25uZWN0aW9uIHN0YXRlLiBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgdGhlIGNvZGUgdG8gZW5zdXJlIHRoYXQncyBzZXQuIExvb2tzIGxpa2UgSSBzaG91bGQgZ28gbWFrZSBzdXJlIGBORl9DVF9ORVRMSU5LYCBpcyBlbmFibGVkLiBJdCdzIHRoZSBvYnZpb3VzIHN1c3BlY3QsIGFuZCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBzdXJwcmlzZXMgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTQ6MDcuNDM0MzQwNDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE0NTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxNDowNy41Mjc0OTU1ODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMTg0NTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBhIERlYWRsb2NrIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0J3MgcHJldHR5IGNsZWFyIG5vdy4gYE5GX0NUX05FVExJTktgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGhlcmUgdG8gdHJpZ2dlciB0aGUgZGVhZGxvY2sgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBzZWU6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9QUk9UT19TQ1RQYCwgYE5FVEZJTFRFUl9ORVRMSU5LX0xPR2AgYW5kLCBvZiBjb3Vyc2UsIHRoZSBrZXkgb25lLCBgTkZfQ1RfTkVUTElOS2AuXG5cbkZyb20gYSBxdWljayBnbGFuY2UsIHRoaXMgbG9va3Mgcm9jayBzb2xpZDsgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGFsbCB0aGUgY29ycmVjdCBwaWVjZXMgaW4gcGxhY2UuIEl0J3MgdGltZSB0byBjaGVjayBpZiBgTkZfQ1RfTkVUTElOS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBtYXkgbmVlZCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MTQ6MTIuOTI5MzQ0NjE4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cXG4gMzYxOlxcdFxcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xcbiAzNjI6XFx0XFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM2NTpcXHRcXG4gMzY2OlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LXFxuIDM2NzpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4gMzY4OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNjk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbiAzNzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDM3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzNzc6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAzNzg6XFx0XFx0aGVscFxcbiAzNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoxNDoxMi45Mjk0NTMxMThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg0ODMxMjQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBGaXggZm9yIENvbm50cmFjayBQYWNrZXQgTG9nZ2luZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgdGhlIGxvY2tpbmcgaW4gdGhlIGNvbm50cmFjayBtb2R1bGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsb2dnaW5nIG9mIGludmFsaWQgU0NUUCBhbmQgVENQIHBhY2tldHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IGRlZmVycmluZyB0aGUgbG9nZ2luZyBhY3Rpb24gdW50aWwgKmFmdGVyKiB0aGUgY29ubnRyYWNrIGxvY2sgKGBjdC1cdTAwM2Vsb2NrYCkgaXMgcmVsZWFzZWQuIFRoaXMgbWVhbnMgYSBzaGlmdCBpbiBleGVjdXRpb24gb3JkZXIsIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBuZXcgcHJvYmxlbXMsIGV2ZW4gaWYgaXQgZml4ZXMgdGhlIGRlYWRsb2NrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGJlaGF2aW9yOiBGaXJzdCwgYE5FVEZJTFRFUmAsIG9idmlvdXNseSwgZm9sbG93ZWQgYnkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9DT05OVFJBQ0tgIOKAkyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBoZXJlLiBXZSBuZWVkIGBORl9DVF9QUk9UT19TQ1RQYCB0byBkZWFsIHdpdGggU0NUUCBzcGVjaWZpY2FsbHkuICBUaGVuLCB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhlIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSwgSSdsbCBuZWVkIGBORVRGSUxURVJfTkVUTElOS19MT0dgIGFuZCBgTkZfQ1RfTkVUTElOS2AuXG5cbk15IGZvY3VzIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9scyB0byBldmFsdWF0ZTogYG5mX2Nvbm50cmFja19zY3RwX3BhY2tldGAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAsIGFuZCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAuIFRoYXQgbGFzdCBvbmUgaXMgdGhlIG9uZSBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGRvdWJsZS1jaGVjayB0aGUgbmFtZSBvZi4gWXVwLCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXQgaXMuXG5cbkkndmUgY2hlY2tlZCB0aGUgb3RoZXIgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgY2FuZGlkYXRlcyBhcmUgYWxsIHN0YXRpYywgdGhlcmVmb3JlIGlubGluZWQgb3Igbm90IHZpc2libGUuIEZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0YCBhbmQgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBzZWVtcyB0byBiZSB0aGUgcmlnaHQgYXBwcm9hY2guXG5cbkknbSBjb25maWRlbnQgdGhpcyBjb3ZlcnMgZXZlcnl0aGluZyByZWxldmFudCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZnV6eiB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjYwLCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjE0OjIyLjc3Nzc2OTU1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQyMDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfUFJPVE9fU0NUUFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3NjdHBfcGFja2V0XCIsXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiLFxuICAgIFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2RlcCBpc3N1ZSAocG90ZW50aWFsIGRlYWRsb2NrKSBieSBkZWZlcnJpbmcgdGhlIGxvZ2dpbmcgb2YgaW52YWxpZCBTQ1RQIGFuZCBUQ1AgY29ubnRyYWNrIHBhY2tldHMgdW50aWwgYWZ0ZXIgdGhlIGNvbm50cmFjayBsb2NrIChjdC1cXHUwMDNlbG9jaykgaXMgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbG9ja2luZyBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIG9yZGVyIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBGdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUgZGVmZXJyZWQgbG9nZ2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGlzc3VlcyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgY29ubnRyYWNrLCBTQ1RQIGNvbm50cmFjaywgbmV0bGluayBsb2dnaW5nLCBhbmQgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgZHVtcGluZyBkZWFkbG9jayBtZW50aW9uZWQgaW4gdGhlIHBhdGNoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9QUk9UT19TQ1RQXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIixcbiAgICBcIk5GX0NUX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfc2N0cF9wYWNrZXRcIixcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrZGVwIGlzc3VlIChwb3RlbnRpYWwgZGVhZGxvY2spIGJ5IGRlZmVycmluZyB0aGUgbG9nZ2luZyBvZiBpbnZhbGlkIFNDVFAgYW5kIFRDUCBjb25udHJhY2sgcGFja2V0cyB1bnRpbCBhZnRlciB0aGUgY29ubnRyYWNrIGxvY2sgKGN0LVxcdTAwM2Vsb2NrKSBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFuZCBleGVjdXRpb24gb3JkZXIgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEZ1enppbmcgdGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCBsb2dnaW5nIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaXNzdWVzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBjb25udHJhY2ssIFNDVFAgY29ubnRyYWNrLCBuZXRsaW5rIGxvZ2dpbmcsIGFuZCBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UgKHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBkdW1waW5nIGRlYWRsb2NrIG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvkqb4[1] Phase: Succeeded StartedAt: 2026-08-01 20:14:34 +0000 UTC FinishedAt: 2026-08-01 20:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 20:14:35 +0000 UTC FinishedAt: 2026-08-01 20:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2] Phase: Succeeded StartedAt: 2026-08-01 20:14:35 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 20:14:35 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","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-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 20:14:35 +0000 UTC FinishedAt: 2026-08-01 20:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 20:14:35 +0000 UTC FinishedAt: 2026-08-01 20:14:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2434257231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 20:14:46 +0000 UTC FinishedAt: 2026-08-01 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 20:14:46 +0000 UTC FinishedAt: 2026-08-01 20:36:05 +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:*34d5c394-2d96-4aec-86d1-915f7f33eb68,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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2434257231/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": "417e6301-918f-49d1-9e41-2e0c17059e97", "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-workflowvkqb4/series-workflowvkqb4-build-action-1385865365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 20:14:46 +0000 UTC FinishedAt: 2026-08-01 20:35:54 +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:*34d5c394-2d96-4aec-86d1-915f7f33eb68,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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2434257231/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": "417e6301-918f-49d1-9e41-2e0c17059e97", "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-workflowvkqb4/series-workflowvkqb4-build-action-1385865365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 20:36:05 +0000 UTC FinishedAt: 2026-08-01 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 20:36:05 +0000 UTC FinishedAt: 2026-08-01 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 20:36:05 +0000 UTC FinishedAt: 2026-08-01 20:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 20:36:05 +0000 UTC FinishedAt: 2026-08-01 20:36:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2525846174/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 20:36:26 +0000 UTC FinishedAt: 2026-08-01 20:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 20:36:26 +0000 UTC FinishedAt: 2026-08-01 20:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*417e6301-918f-49d1-9e41-2e0c17059e97,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-workflowvkqb4/series-workflowvkqb4-build-action-1385865365/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-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 20:38:31 +0000 UTC FinishedAt: 2026-08-01 20:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 20:38:31 +0000 UTC FinishedAt: 2026-08-01 20:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 20:38:31 +0000 UTC FinishedAt: 2026-08-01 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 20:38:31 +0000 UTC FinishedAt: 2026-08-01 21:04:09 +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:*34d5c394-2d96-4aec-86d1-915f7f33eb68,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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2525846174/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": "61717392-110a-4416-8ab9-99eb4f6470a8", "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-workflowvkqb4/series-workflowvkqb4-build-action-2659649650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 20:38:31 +0000 UTC FinishedAt: 2026-08-01 21:03:58 +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:*34d5c394-2d96-4aec-86d1-915f7f33eb68,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-workflowvkqb4/series-workflowvkqb4-convert-artifact-2525846174/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": "61717392-110a-4416-8ab9-99eb4f6470a8", "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-workflowvkqb4/series-workflowvkqb4-build-action-2659649650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 21:04:09 +0000 UTC FinishedAt: 2026-08-01 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 21:04:09 +0000 UTC FinishedAt: 2026-08-01 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 21:04:09 +0000 UTC FinishedAt: 2026-08-01 21:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 21:04:09 +0000 UTC FinishedAt: 2026-08-01 21:05:52 +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:*61717392-110a-4416-8ab9-99eb4f6470a8,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-workflowvkqb4/series-workflowvkqb4-build-action-2659649650/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-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"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:*417e6301-918f-49d1-9e41-2e0c17059e97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61717392-110a-4416-8ab9-99eb4f6470a8,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-workflowvkqb4/series-workflowvkqb4-build-action-1385865365/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-workflowvkqb4/series-workflowvkqb4-build-action-2659649650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-01 21:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-01 21:06:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"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-workflowvkqb4/series-workflowvkqb4-convert-artifact-1570130851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-01 21:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 21:06:03 +0000 UTC FinishedAt: 2026-08-01 21:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 21:06:04 +0000 UTC FinishedAt: 2026-08-01 21:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 21:06:38 +0000 UTC FinishedAt: 2026-08-02 00:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvkqb4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_sctp_packet","nf_conntrack_tcp_packet","nf_ct_l4proto_log_invalid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_CONNTRACK","NF_CT_PROTO_SCTP","NETFILTER_NETLINK_LOG","NF_CT_NETLINK"],"series_id":"cb9efcc2-86a9-4afb-a0c2-42be38346301","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 21:06:38 +0000 UTC FinishedAt: 2026-08-02 00:09:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*417e6301-918f-49d1-9e41-2e0c17059e97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61717392-110a-4416-8ab9-99eb4f6470a8,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-workflowvkqb4/series-workflowvkqb4-build-action-1385865365/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-workflowvkqb4/series-workflowvkqb4-build-action-2659649650/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-workflowvkqb4/series-workflowvkqb4-convert-artifact-1570130851/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,}