Name: series-workflowdrw8f Phase: Succeeded StartedAt: 2026-08-13 12:00:53 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[0] Phase: Succeeded StartedAt: 2026-08-13 12:00:53 +0000 UTC FinishedAt: 2026-08-13 12:21:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 12:00:53 +0000 UTC FinishedAt: 2026-08-13 12:21:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "COMPAT", "IA32_EMULATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "COMPAT", "IA32_EMULATION" ], "series_id": "c6228b20-fecb-4635-8e52-9e2ba88baf0d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "__cgroup_bpf_run_filter_setsockopt", "__cgroup_bpf_run_filter_getsockopt", "do_sock_setsockopt", "do_sock_getsockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDssCiAgICAmIzM0O0lBMzJfRU1VTEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX2dldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbkBAIC0xMzgsMTQgJiM0MzsxMzgsMTUgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbiBcdFx0XHRcdCAgIGNoYXIgKipidWYsIHNpemVfdCAqcGNvdW50LCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xuIFxuLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBpbnQgKmxldmVsLFxuLVx0XHRcdFx0ICAgICAgIGludCAqb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpO1xuJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgaW50ICpvcHRsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbi1cdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKTtcbiYjNDM7aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1heF9vcHRsZW4sIGludCByZXR2YWwpO1xuIFxuIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHRcdCAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLFxuQEAgLTM3NiwyMSAmIzQzOzM3NywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIH0pXG4gXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFxcXG4tXHRcdFx0XHQgICAgICAga2VybmVsX29wdHZhbClcdFx0XHQgICAgICAgXFxcbiYjNDM7I2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4mIzQzO1x0XHRcdFx0ICAgICAgIG9wdGxlbiwga2VybmVsX29wdHZhbClcdFx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IDA7XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuIFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcdFx0ICAgICAgIFxcXG4tXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCxcdCAgICAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bGVuLFx0ICAgICAgIFxcXG4mIzQzO1x0XHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcXFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXG4gXHRcdFx0XHRcdFx0XHQgICBrZXJuZWxfb3B0dmFsKTsgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpXHRcdCAgICAgICBcXFxuJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsICAgXFxcbiYjNDM7XHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpXHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gcmV0dmFsO1x0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfR0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG5AQCAtNDAwLDcgJiM0Mzs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFx0ICAgICAgIFxcXG4gXHRcdFx0XHRcdGxldmVsLCBvcHRuYW1lKSlcdFx0ICAgICAgIFxcXG4gXHRcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KFx0ICAgICAgIFxcXG4tXHRcdFx0XHRzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sXHQgICAgICAgXFxcbiYjNDM7XHRcdFx0XHRzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgIFxcXG4gXHRcdFx0XHRtYXhfb3B0bGVuLCByZXR2YWwpO1x0XHRcdCAgICAgICBcXFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIH0pXG5AQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKHNvY2tfb3BzKSAoeyAwOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19ERVZJQ0VfQ0dST1VQKGF0eXBlLCBtYWpvciwgbWlub3IsIGFjY2VzcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcXFxuJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHRcdCAgICBvcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbiYjNDM7I2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sIFxcXG4gXHRcdFx0XHQgICAgICAga2VybmVsX29wdHZhbCkgKHsgMDsgfSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9CUEYgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4ge1xuIFx0czMyXHRcdGxldmVsO1xuIFx0czMyXHRcdG9wdG5hbWU7XG4gXHRzMzJcdFx0b3B0bGVuO1xuJiM0MztcdHMzMlx0XHRpc19jb21wYXQ7XG4gXHQvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqL1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XG4gXHQvKiBUZW1wb3JhcnkgXCYjMzQ7cmVnaXN0ZXJcJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICYjNDM7NzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuJiM0MztcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA4ZmJjOTQyYTFjYzNhLi45MTA4NzhlOTkxYTA0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTIwNTUsNyAmIzQzOzIwNTUsNyBAQCBzdGF0aWMgYm9vbCBzb2Nrb3B0X2J1Zl9hbGxvY2F0ZWQoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbiBcdHJldHVybiBjdHgtXHUwMDNlb3B0dmFsICE9IGJ1Zi1cdTAwM2VkYXRhO1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4mIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbClcbiB7XG5AQCAtMjA2NSw2ICYjNDM7MjA2NSw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9ICpsZXZlbCxcbiBcdFx0Lm9wdG5hbWUgPSAqb3B0bmFtZSxcbiYjNDM7XHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHR9O1xuIFx0aW50IHJldCwgbWF4X29wdGxlbjtcbiBcbkBAIC0yMTQ2LDcgJiM0MzsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4mIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbiBcdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKVxuQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9IGxldmVsLFxuIFx0XHQub3B0bmFtZSA9IG9wdG5hbWUsXG4mIzQzO1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbiBcdH07XG4gXHRpbnQgb3JpZ19vcHRsZW47XG5AQCAtMjcwNSw2ICYjNDM7MjcwNyw5IEBAIHN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KTpcbiYjNDM7XHRcdCppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChpc19jb21wYXQpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcbiBcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMzQ2LDEwICYjNDM7MjM0Niw5IEBAIGludCBkb19zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmtlcm5lbF9vcHR2YWwpO1xuJiM0MztcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIFx1MDAyNmxldmVsLCBcdTAwMjZvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMjQ0Nyw4ICYjNDM7MjQ0Niw3IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4mIzQzO1x0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuJiM0MztcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgZXJyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICYjNDM7NzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuJiM0MztcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXG5AQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xuIFx0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2NyID0gXCYjMzQ7Z2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCYjMzQ7LFxuJiM0MztcdFx0Lmluc25zID0ge1xuJiM0MztcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbiYjNDM7XHRcdFx0QlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLFxuJiM0MztcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuJiM0MztcbiYjNDM7XHRcdFx0LyogaWYgKGN0eC1cdTAwM2Vpc19jb21wYXQgPT0gMCkgeyAqL1xuJiM0MztcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuJiM0MztcdFx0XHQvKiBjdHgtXHUwMDNlcmV0dmFsID0gMCAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbiYjNDM7XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcbiYjNDM7XHRcdFx0LyogcmV0dXJuIDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfSk1QX0EoMSksXG4mIzQzO1x0XHRcdC8qIH0gZWxzZSB7ICovXG4mIzQzO1x0XHRcdC8qIHJldHVybiAwICovXG4mIzQzO1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbiYjNDM7XHRcdFx0LyogfSAqL1xuJiM0MztcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuJiM0MztcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuJiM0MztcbiYjNDM7XHRcdC5nZXRfbGV2ZWwgPSBTT0xfSVAsXG4mIzQzO1x0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4mIzQzO1x0XHQuZ2V0X29wdGxlbiA9IDEsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtnZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwmIzM0OyxcbiYjNDM7XHRcdC5pbnNucyA9IHtcbiYjNDM7XHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4mIzQzO1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4mIzQzO1xuJiM0MztcdFx0LmVycm9yID0gREVOWV9MT0FELFxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlb3B0bmFtZVwmIzM0OyxcbiBcdFx0Lmluc25zID0ge1xuQEAgLTYwOSw2ICYjNDM7NjUyLDQ5IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbiBcdFx0LmdldF9vcHR2YWwgPSB7IDEgXHUwMDNjXHUwMDNjIDMgfSxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcJiMzNDssXG4mIzQzO1x0XHQuaW5zbnMgPSB7XG4mIzQzO1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuJiM0MztcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1xuJiM0MztcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4mIzQzO1x0XHRcdEJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksXG4mIzQzO1x0XHRcdC8qIGN0eC1cdTAwM2VvcHRsZW4gPSAtMSAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLTEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXG4mIzQzO1x0XHRcdC8qIHJldHVybiAxICovXG4mIzQzO1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiYjNDM7XHRcdFx0QlBGX0pNUF9BKDEpLFxuJiM0MztcdFx0XHQvKiB9IGVsc2UgeyAqL1xuJiM0MztcdFx0XHQvKiByZXR1cm4gMCAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRcdC8qIH0gKi9cbiYjNDM7XHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbiYjNDM7XHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbiYjNDM7XG4mIzQzO1x0XHQuc2V0X29wdG5hbWUgPSAxMjMsXG4mIzQzO1x0XHQuc2V0X29wdGxlbiA9IDEsXG4mIzQzO1x0XHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwmIzM0OyxcbiYjNDM7XHRcdC5pbnNucyA9IHtcbiYjNDM7XHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4mIzQzO1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4mIzQzO1xuJiM0MztcdFx0LmVycm9yID0gREVOWV9MT0FELFxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LVx1MDAzZW9wdGxlblwmIzM0OyxcbiBcdFx0Lmluc25zID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAppbmRleCA0ZDBjYzY1OTc2YTE0Li45NDNlYjAyM2I1MmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaApAQCAtMTM4LDE0ICYjNDM7MTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsCiAJCQkJICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcywKIAkJCQkgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCwKLQkJCQkgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJCSAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwomIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBib29sIGNvbXBhdCwKJiM0MzsJCQkJICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLAomIzQzOwkJCQkgICAgICAgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKLQkJCQkgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLAotCQkJCSAgICAgICBpbnQgcmV0dmFsKTsKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LAomIzQzOwkJCQkgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkJCSAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7CiAKIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCQkJCSAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLApAQCAtMzc2LDIxICYjNDM7Mzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssCiAJX19yZXQ7CQkJCQkJCQkgICAgICAgXAogfSkKIAotI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFwKLQkJCQkgICAgICAga2VybmVsX29wdHZhbCkJCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpCQkgICAgICAgXAogKHsJCQkJCQkJCQkgICAgICAgXAogCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgICBcCiAJaWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgJmFtcDsmYW1wOwkJCSAgICAgICBcCiAJICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSkJCSAgICAgICBcCi0JCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCwJICAgICAgIFwKLQkJCQkJCQkgICBvcHRuYW1lLCBvcHR2YWwsICAgIFwKLQkJCQkJCQkgICBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQlfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcCiYjNDM7CQkJCQkJCSAgIGxldmVsLCBvcHRuYW1lLCAgICAgXAomIzQzOwkJCQkJCQkgICBvcHR2YWwsIG9wdGxlbiwgICAgIFwKIAkJCQkJCQkgICBrZXJuZWxfb3B0dmFsKTsgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQogCi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXAotCQkJCSAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkJICAgICAgIFwKICh7CQkJCQkJCQkJICAgICAgIFwKIAlpbnQgX19yZXQgPSByZXR2YWw7CQkJCQkJICAgICAgIFwKIAlpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSAmYW1wOyZhbXA7CQkJICAgICAgIFwKQEAgLTQwMCw3ICYjNDM7NDAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCwJICAgICAgIFwKIAkJCQkJbGV2ZWwsIG9wdG5hbWUpKQkJICAgICAgIFwKIAkJCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCgJICAgICAgIFwKLQkJCQlzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQkJCXNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXAogCQkJCW1heF9vcHRsZW4sIHJldHZhbCk7CQkJICAgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQpAQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFMoc29ja19vcHMpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKIAkJCQkgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAogCQkJCQkgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcCiAJCQkJICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pCiAKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gewogCXMzMgkJbGV2ZWw7CiAJczMyCQlvcHRuYW1lOwogCXMzMgkJb3B0bGVuOwomIzQzOwlzMzIJCWlzX2NvbXBhdDsKIAkvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrOwogCS8qIFRlbXBvcmFyeSAmIzM0O3JlZ2lzdGVyJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTc2MTYsNiAmIzQzOzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQgewogCV9fczMyCW9wdG5hbWU7CiAJX19zMzIJb3B0bGVuOwogCV9fczMyCXJldHZhbDsKJiM0MzsJX19zMzIJaXNfY29tcGF0OwogfTsKIAogc3RydWN0IGJwZl9waWRuc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMjA1NSw3ICYjNDM7MjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LAogCXJldHVybiBjdHgtJmd0O29wdHZhbCAhPSBidWYtJmd0O2RhdGE7CiB9CiAKLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLAogCQkJCSAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCkKIHsKQEAgLTIwNjUsNiAmIzQzOzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsCiAJCS5zayA9IHNrLAogCQkubGV2ZWwgPSAqbGV2ZWwsCiAJCS5vcHRuYW1lID0gKm9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCX07CiAJaW50IHJldCwgbWF4X29wdGxlbjsKIApAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbiwKIAkJCQkgICAgICAgaW50IHJldHZhbCkKQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJLnNrID0gc2ssCiAJCS5sZXZlbCA9IGxldmVsLAogCQkub3B0bmFtZSA9IG9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCQkuY3VycmVudF90YXNrID0gY3VycmVudCwKIAl9OwogCWludCBvcmlnX29wdGxlbjsKQEAgLTI3MDUsNiAmIzQzOzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWVsc2UKIAkJCSppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pOwogCQlicmVhazsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6CiYjNDM7CQkqaW5zbiYjNDM7JiM0MzsgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTsKJiM0MzsJCWJyZWFrOwogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpOgogCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KSAhPSAwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmY0NTQ5OTc1Zjk4YjkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIzNDYsMTAgJiM0MzsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWlmICghY29tcGF0KQotCQllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKLQkJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKLQkJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKJiM0MzsJZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stJmd0O3NrLCBjb21wYXQsICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKJiM0MzsJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKJiM0MzsJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0OwogCWlmIChlcnIgJmd0OyAwKSB7CkBAIC0yNDQ3LDggJiM0MzsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWNvbXBhdCkKLQkJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKJiM0MzsJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKIAogCW9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7CkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCwKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKCFjb21wYXQpCi0JCWVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLSZndDtzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAotCQkJCQkJICAgICBlcnIpOwomIzQzOwllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsCiYjNDM7CQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAomIzQzOwkJCQkJICAgICBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC03NjE2LDYgJiM0Mzs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHsKIAlfX3MzMglvcHRuYW1lOwogCV9fczMyCW9wdGxlbjsKIAlfX3MzMglyZXR2YWw7CiYjNDM7CV9fczMyCWlzX2NvbXBhdDsKIH07CiAKIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMKaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYwpAQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdG5hbWUgPSBJUF9UT1MsCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtyZXR2YWwgPSAwICovCiYjNDM7CQkJQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLAomIzQzOwkJCUJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKSksCiYjNDM7CQkJLyogcmV0dXJuIDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX0pNUF9BKDEpLAomIzQzOwkJCS8qIH0gZWxzZSB7ICovCiYjNDM7CQkJLyogcmV0dXJuIDAgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQkJLyogfSAqLwomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZ2V0X2xldmVsID0gU09MX0lQLAomIzQzOwkJLmdldF9vcHRuYW1lID0gSVBfVE9TLAomIzQzOwkJLmdldF9vcHRsZW4gPSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O2lzX2NvbXBhdCYjMzQ7LAomIzQzOwkJLmluc25zID0gewomIzQzOwkJCS8qIGN0eC0mZ3Q7aXNfY29tcGF0ID0gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsCiYjNDM7CQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLAomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZXJyb3IgPSBERU5ZX0xPQUQsCiYjNDM7CX0sCiAJewogCQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O29wdG5hbWUmIzM0OywKIAkJLmluc25zID0gewpAQCAtNjA5LDYgJiM0Mzs2NTIsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdHZhbCA9IHsgMSAmbHQ7Jmx0OyAzIH0sCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtvcHRsZW4gPSAtMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBvcHRsZW4pKSwKJiM0MzsJCQkvKiByZXR1cm4gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfSk1QX0EoMSksCiYjNDM7CQkJLyogfSBlbHNlIHsgKi8KJiM0MzsJCQkvKiByZXR1cm4gMCAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSwKJiM0MzsJCQkvKiB9ICovCiYjNDM7CQkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwkJfSwKJiM0MzsJCS5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsJCS5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsKJiM0MzsJCS5zZXRfb3B0bmFtZSA9IDEyMywKJiM0MzsJCS5zZXRfb3B0bGVuID0gMSwKJiM0MzsJCS5pb191cmluZ19zdXBwb3J0ID0gdHJ1ZSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiBjdHgtJmd0O2lzX2NvbXBhdCA9IDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsJCQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQl9LAomIzQzOwkJLmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwkJLmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwomIzQzOwkJLmVycm9yID0gREVOWV9MT0FELAomIzQzOwl9LAogCXsKIAkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC0mZ3Q7b3B0bGVuJiMzNDssCiAJCS5pbnNucyA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGJlaGF2ZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBjb21wYXRgIGZsYWcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGEgY2FyZWZ1bCBsb29rLiBMZXQmIzM5O3Mgc2VlLi4uCgpGcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgdG91Y2hlcyB0aGUgY29yZSBCUEYgY2dyb3VwIGluZnJhc3RydWN0dXJlIGluIGBicGYtY2dyb3VwLmhgIGFuZCBgY2dyb3VwLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYHNvY2tldC5jYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHN5c2NhbGxzIGFyZSBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBhZGRpbmcgYGlzX2NvbXBhdGAgdG8gdGhlIGBicGZfc29ja29wdGAgc3RydWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgQlBGIHByb2dyYW1zIHdpbGwgbm93IGJlIGludm9rZWQgaW4gdGhlIGNvbnRleHQgb2YgYGNvbXBhdGAgc3lzdGVtIGNhbGxzLiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgaW4gYHNvY2tvcHQuY2AgaXMgaW1wb3J0YW50LCB0aG91Z2gsIHRvIGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlbW92aW5nIHRoZSBgaWYgKCFjb21wYXQpYCBjaGVja3MgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiAgWWVzLCB0aGUgY29kZSBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBwYXRjaCBub3cgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVzIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgIGFuZCBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYCByZWdhcmRsZXNzIG9mIHRoZSBgY29tcGF0YCBmbGFnJiMzOTtzIHN0YXRlLCBhZnRlciBjaGVja2luZyBgbmV0L3NvY2tldC5jYCB0byBzZWUgaWYgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSBgY29tcGF0YCBhcyB3ZWxsLCBhcyB3aXRoIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBUaGlzIG1lYW5zIHRoYXQgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0ICpjb21wYXQqIHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgY2FsbHMuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuCgpUaGlzIG9wZW5zIHVwIGEgbmV3IHNldCBvZiBjYXBhYmlsaXRpZXMgZm9yIEJQRiBwcm9ncmFtcywgYnV0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdCBjYXJlZnVsbHkuCgpOb3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTtkIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGFuIG9idmlvdXMgcHJlcmVxdWlzaXRlLiAgU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb21wYXQgc3lzY2FsbHMsIGBDT05GSUdfQ09NUEFUYCB3aWxsIGFsc28gYmUgcmVxdWlyZWQuICBMb29raW5nIGF0IHRoZSBgbmV0L3NvY2tldC5jYCwgSSBzZWUgdGhhdCBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBpbmRlZWQgY2FsbGVkIGJ5IGJvdGggYF9fc3lzX3NldHNvY2tvcHRgIGFuZCBgX19jb21wYXRfc3lzX3NldHNvY2tvcHRgLCBjZW1lbnRpbmcgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yMzMwPXN0YXRpYyBib29sIHNvY2tfdXNlX2N1c3RvbV9zb2xfc29ja2V0KGNvbnN0IHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3NvY2tldC5jLTIzMzQtXG5uZXQvc29ja2V0LmM6MjMzNTppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG5uZXQvc29ja2V0LmMtMjMzNi1cdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9zb2NrZXQuYy0yMzcyLX1cbm5ldC9zb2NrZXQuYzoyMzczOkVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcbm5ldC9zb2NrZXQuYy0yMzc0LVxuLS1cbm5ldC9zb2NrZXQuYz0yMzc4PWludCBfX3N5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKnVzZXJfb3B0dmFsLFxuLS1cbm5ldC9zb2NrZXQuYy0yMzkxLVxubmV0L3NvY2tldC5jOjIzOTI6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9zb2NrZXQuYy0yMzkzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCwgYW5kIEkga25vdyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19zeXNfc2V0c29ja29wdGAgc3lzdGVtIGNhbGwgaGFuZGxlci4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQgZnJvbSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzb2NrZXRzIGFyZSBiZWluZyBjb25maWd1cmVkIGZyb20gdGhlIHVzZXIgc3BhY2UuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIG1ha2luZyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zeXNfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc29ja2V0LmM9MjM3Mz1FWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XG4tLVxubmV0L3NvY2tldC5jLTIzNzctICovXG5uZXQvc29ja2V0LmM6MjM3ODppbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbm5ldC9zb2NrZXQuYy0yMzc5LVx0XHQgICAgIGludCBvcHRsZW4pXG4tLVxubmV0L3NvY2tldC5jPTIzOTU9U1lTQ0FMTF9ERUZJTkU1KHNldHNvY2tvcHQsIGludCwgZmQsIGludCwgbGV2ZWwsIGludCwgb3B0bmFtZSxcbi0tXG5uZXQvc29ja2V0LmMtMjM5Ny17XG5uZXQvc29ja2V0LmM6MjM5ODpcdHJldHVybiBfX3N5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3NvY2tldC5jLTIzOTktfVxuLS1cbm5ldC9zb2NrZXQuYz0zMTcwPVNZU0NBTExfREVGSU5FMihzb2NrZXRjYWxsLCBpbnQsIGNhbGwsIHVuc2lnbmVkIGxvbmcgX191c2VyICosIGFyZ3MpXG4tLVxubmV0L3NvY2tldC5jLTMyNDYtXHRjYXNlIFNZU19TRVRTT0NLT1BUOlxubmV0L3NvY2tldC5jOjMyNDc6XHRcdGVyciA9IF9fc3lzX3NldHNvY2tvcHQoYTAsIGExLCBhWzJdLCAoY2hhciBfX3VzZXIgKilhWzNdLFxubmV0L3NvY2tldC5jLTMyNDgtXHRcdFx0XHQgICAgICAgYVs0XSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBLZXJuZWwgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBhIHNwZWNpZmljIHNvY2tldCBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdoZXJlIGBjb21wYXRgIGlzIHN1cHBvc2VkIHRvIGJlIHBhc3NlZCB0byBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgcmlnaHQ/IEhtbSwgaGFuZyBvbiBhIHNlY29uZC4uLiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYF9fc3lzX3NldHNvY2tvcHRg4oCmIG5vcGUsIGl0IGRvZXNuJiMzOTt0IGV2ZW4gKnRha2UqIGEgYGNvbXBhdGAgcGFyYW1ldGVyIGRpcmVjdGx5LiBUaGF0JiMzOTtzIG9kZC4KCkFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0LiBTaW5jZSBgX19zeXNfc2V0c29ja29wdGAgaXMgb2J2aW91c2x5IHRoZSBzeXN0ZW0gY2FsbCB3cmFwcGVyLCB0aGVyZSBtdXN0IGJlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbiBjYWxsIHdpdGhpbiBpdCB0byBoYW5kbGUgdGhlIGNvcmUgbG9naWMuIE9rYXksIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVGhhdCBzb3VuZHMgcmlnaHQuIFNvLCAqdGhhdCYjMzk7cyogcHJvYmFibHkgd2hlcmUgYGNvbXBhdGAgaXMgZWl0aGVyIGJlaW5nIHVzZWQsIG9yIGJlaW5nIHBhc3NlZCBmdXJ0aGVyIGFsb25nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIGRpZyBpbnRvIGBfX3N5c19zZXRzb2Nrb3B0YCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNzg6XHRpbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbjIzNzk6XHRcdFx0ICAgICBpbnQgb3B0bGVuKVxuMjM4MDpcdHtcbjIzODE6XHRcdHNvY2twdHJfdCBvcHR2YWwgPSBVU0VSX1NPQ0tQVFIodXNlcl9vcHR2YWwpO1xuMjM4MjpcdFx0Ym9vbCBjb21wYXQgPSBpbl9jb21wYXRfc3lzY2FsbCgpO1xuMjM4MzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbjIzODQ6XHRcdENMQVNTKGZkLCBmKShmZCk7XG4yMzg1Olx0XG4yMzg2Olx0XHRpZiAoZmRfZW1wdHkoZikpXG4yMzg3Olx0XHRcdHJldHVybiAtRUJBREY7XG4yMzg4Olx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmRfZmlsZShmKSk7XG4yMzg5Olx0XHRpZiAodW5saWtlbHkoIXNvY2spKVxuMjM5MDpcdFx0XHRyZXR1cm4gLUVOT1RTT0NLO1xuMjM5MTpcdFxuMjM5MjpcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yMzkzOlx0fVxuMjM5NDpcdFxuMjM5NTpcdFNZU0NBTExfREVGSU5FNShzZXRzb2Nrb3B0LCBpbnQsIGZkLCBpbnQsIGxldmVsLCBpbnQsIG9wdG5hbWUsXG4yMzk2Olx0XHRcdGNoYXIgX191c2VyICosIG9wdHZhbCwgaW50LCBvcHRsZW4pXG4yMzk3Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNldHNvY2tvcHQgQ29tcGF0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYGluX2NvbXBhdF9zeXNjYWxsKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYGNvbXBhdGAgc3lzdGVtIGNhbGwuIFRoZSBleGlzdGluZyBgX19zeXNfc2V0c29ja29wdGAgb2J2aW91c2x5IGhhbmRsZXMgYm90aCBgY29tcGF0YCBhbmQgbm9uLWBjb21wYXRgIGNhbGxzLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gaW52b2tlIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgIGFuZCBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYCwgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgYGNvbXBhdGAgaXMgdHJ1ZS4KCkVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgQlBGIGNncm91cCBwcm9ncmFtcyBjYW4gbm93IGludGVyY2VwdCBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBjYWxscywgZXZlbiB3aGVuIHRoZXkmIzM5O3JlIGNvbWluZyBmcm9tIGEgYGNvbXBhdGAgY29udGV4dC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmaWx0ZXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZXNlIG9sZGVyIHN5c3RlbSBjYWxscyBpbiBhIGNncm91cCBjb250ZXh0LCB3aGljaCB3YXMgcHJldmlvdXNseSBub3QgcG9zc2libGUuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIGNoYW5nZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhcyBhIGJhc2UgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gQW5kLCBzaW5jZSB0aGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGBpbl9jb21wYXRfc3lzY2FsbCgpYCByZXR1cm5pbmcgYHRydWVgIHVuZGVyIHRoZSByaWdodCBjaXJjdW1zdGFuY2VzLCBgQ09ORklHX0NPTVBBVGAgaXMgY2xlYXJseSBnb2luZyB0byBiZSBlc3NlbnRpYWwgYXMgd2VsbC4KCk5leHQsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCB0byBzZWUgdGhlIGV4YWN0IGRldGFpbHMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBpbnRlcmNlcHRlZCBhbmQgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0yMDUyPXN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjA1Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjA1ODppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMDU5LVx0XHRcdFx0ICAgICAgIGludCAqb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgQlBGIFNvY2tldCBGaWx0ZXJpbmcgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGF0IHNldCBsb29rcyBsaWtlIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gaG93IEJQRiBmaWx0ZXJpbmcgaXMgaW50ZWdyYXRlZCB3aXRoIHNvY2tldCBvcHRpb25zLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGFuZCB0aGF0IGZhbWlseSBhcyBpbnRlcm5hbCwgYnV0IGlzIGl0IGFjdHVhbGx5IGV4cG9ydGVkPyBMZXQgbWUganVzdCBjb25maXJtIHdoZXJlIGl0JiMzOTtzIGRlZmluZWTigKYgcmlnaHQsIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gT2theSwgc28gaXTigJlzIG5vdCAqbGlrZWx5KiB0byBiZSBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBpdCYjMzk7cyBnb3QgdGhlIGBzdGF0aWNgIGtleXdvcmQgYXR0YWNoZWQgdG8gaXQsIGp1c3QgdG8gYmUgc3VyZS4uLiBub3BlLCBubyBgc3RhdGljYC4gTGV0JiMzOTtzIGdldCB0byB3b3JrIGNoZWNraW5nIG91dCBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0yMDU4PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTQ5LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMTUwOmludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjE1MS1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyMzUtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIyMzY6aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjIzNy1cdFx0XHRcdFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjUxLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjUyOlx0LyogTm90ZSB0aGF0IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQgZG9lc24mIzM5O3QgY29weVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjUzLVx0ICogdXNlciBkYXRhIGJhY2sgaW50byBCUEYgYnVmZmVyIHdoZW4gcmV2YWwgIT0gMC4gVGhpcyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbCBpbiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGV5JiMzOTtyZSBub3Qgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gYENPTkZJR19DR1JPVVBfQlBGYCBpcyB0aGUgb2J2aW91cyBrZXkgZW5hYmxpbmcgZmFjdG9yLiBCdXQgdG8gZXhwbG9yZSBtb3JlIGNvZGUsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19DT01QQVRgIGlzIGNyaXRpY2FsIHRvIHRyaWdnZXIgdGhlICYjMzQ7Y29tcGF0JiMzNDsgcGF0aC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19DT01QQVRgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0IGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB1c3VhbGx5IHRlbGxzIG1lIHRoYXQgYENPTkZJR19DT01QQVRgIHRlbmRzIHRvIGJlIGVuYWJsZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDMyLWJpdCBiaW5hcmllcy4gVG8gY29uZmlybSB0aGlzLCBJJiMzOTtsbCBjb25zdWx0IHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB0aGUgZXhhY3QgcmVxdWlyZW1lbnRzIGZvciBgQ09ORklHX0NPTVBBVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQVQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0zMDc4PWNvbmZpZyBNSVBTMzJfQ09NUEFUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cbmFyY2gvbWlwcy9LY29uZmlnOjMwODE6Y29uZmlnIENPTVBBVFxuYXJjaC9taXBzL0tjb25maWctMzA4Mi1cdGJvb2xcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTM1OD1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvcGFyaXNjL0tjb25maWctMzU5LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNjEtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0zNTEtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE0LVxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XG5hcmNoL3NwYXJjL0tjb25maWctNDQ4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjQ0OTpjb25maWcgQ09NUEFUXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWc9MzExND1jb25maWcgQ09NUEFUXzMyXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMTE5LVxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcbmFyY2gveDg2L0tjb25maWctMzEyMS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24gZm9yIENPTVBBVCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgQ09NUEFUYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBvbiB4ODYsIHRoZSBkZWZpbml0aW9uIG9mIGBDT01QQVRgIGFwcGVhcnMgdG8gYmUgYSBgZGVmX2Jvb2wgeWAgKGRlZmluZWQgYm9vbGVhbiAmIzM5O3llcyYjMzk7KSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIFRoZSByZWxldmFudCBjb25kaXRpb25zIGFyZSBpZiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCAoMzItYml0IGVtdWxhdGlvbiBzdXBwb3J0KSBvciBgWDg2X1gzMl9BQklgICh4MzIgQUJJIHN1cHBvcnQpIGlzIGVuYWJsZWQuIFNvLCBpbiBvdGhlciB3b3JkcywgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvbGRlciAzMi1iaXQgYXBwbGljYXRpb25zIG9uIGEgNjQtYml0IHN5c3RlbSwgb3IgdGhlIHgzMiBBQkksIHdlIGxpa2VseSB3YW50IGBDT01QQVRgIHRvIGJlIGVuYWJsZWQsIGhlbmNlIHRoZSAmIzM5O3kmIzM5Oy4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhpcyBieSBkaXJlY3RseSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gTGV0IG1lIHF1aWNrbHkgZ28gY2hlY2sgYGFyY2gveDg2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlc2UgY29uZGl0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzExNTpcdFx0ZGVmX2Jvb2wgeVxuMzExNjpcdFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfMzJcbjMxMTc6XHRcdHNlbGVjdCBIQVZFX1VJRDE2XG4zMTE4Olx0XHRzZWxlY3QgT0xEX1NJR1NVU1BFTkQzXG4zMTE5Olx0XG4zMTIwOlx0Y29uZmlnIENPTVBBVFxuMzEyMTpcdFx0ZGVmX2Jvb2wgeVxuMzEyMjpcdFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfWDMyX0FCSVxuMzEyMzpcdFxuMzEyNDpcdGNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcbjMxMjU6XHRcdGRlZl9ib29sIHlcbjMxMjY6XHRcdGRlcGVuZHMgb24gQ09NUEFUXG4zMTI3Olx0XG4zMTI4Olx0ZW5kbWVudVxuMzEyOTpcdFxuMzEzMDpcdGNvbmZpZyBIQVZFX0FUT01JQ19JT01BUFxuMzEzMTpcdFx0ZGVmX2Jvb2wgeVxuMzEzMjpcdFx0ZGVwZW5kcyBvbiBYODZfMzJcbjMxMzM6XHRcbjMxMzQ6XHRzb3VyY2UgXCYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipSZWZsZWN0aW5nIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyBgQ09NUEFUYCBmdW5jdGlvbmFsaXR5IG9uIHg4NiBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSUEzMl9FTVVMQVRJT05gIGlzIGFjdGl2ZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBhcmNoaXRlY3R1cmVzIG9mdGVuIHJlbGllcyBvbiB0aGlzIGtpbmQgb2YgY29uZGl0aW9uYWwgZW5hYmxpbmcuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGJvdGggYENHUk9VUF9CUEZgIGFuZCBgQ09NUEFUYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgaXMga2V5IHRvIGVuc3VyaW5nIHRoYXQgb3VyIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbnMgbGV2ZXJhZ2UgdGhlIGFwcHJvcHJpYXRlIGZlYXR1cmVzLgoKSGFuZyBvbiBhIHNlY29uZOKApkkgc2VlIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGp1c3QgZW5hYmxlIGZlYXR1cmVzLCBpdCYjMzk7cyAqbW9kaWZ5aW5nKiBjb3JlIEJQRiBjb2RlIHdpdGhpbiB0aGUgY2dyb3VwIGNvbnRleHQuIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgaW50ZXJhY3Rpb24gb2Ygc29ja2V0IG9wdGlvbnMgYW5kIHRoZSBjZ3JvdXAgQlBGLiBUaGlzIGNvdWxkIGJlIGFib3V0IHNlY3VyaXR5IGltcGxpY2F0aW9ucywgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9yIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucy4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGFuZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTI2MDY9c3RhdGljIGJvb2wgY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjc5LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjgwOnN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4MS1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzcwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc3Mi1cdC5pc192YWxpZF9hY2Nlc3NcdD0gY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NzM6XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzc0LVx0Lmdlbl9wcm9sb2d1ZVx0XHQ9IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2dyb3VwIFNvY2tvcHQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG5vIG5lZWQgdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhhdOKAmXMgYSBuby1icmFpbmVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHplcm8gaW4gb24gYXJlOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4KCldhaXQgYSBtaW51dGUuLi4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgIGFyZSBhY3R1YWxseSBkZWZpbmVkIGluIGBuZXQvc29ja2V0LmNgLCBhbmQgdGhleSYjMzk7cmUgbm90IHN0YXRpYzsgdGhleSYjMzk7cmUgZXhwb3J0ZWQuIFBlcmZlY3QuIFRoYXQmIzM5O3MgZ29vZCBpbnRlbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gQWxyaWdodCwgYF9fc3lzX3NldHNvY2tvcHRgIGFuZCBgX19zeXNfZ2V0c29ja29wdGAgYXJlIGluIHRoZSBwaWN0dXJlIHRvbywgYnV0IHRoZXkmIzM5O3JlIGp1c3QgdGhpbiB3cmFwcGVycy4gU28sIHN0aWNrIHdpdGggYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGV5IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBgQ0dST1VQX0JQRmAuIFl1cCwgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBjb25maWcgbmFtZTogYENPTkZJR19DR1JPVVBfQlBGYC4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBzeW1ib2xzLgoKQWxyaWdodCwgdGltZSBmb3IgYSBjb25jaXNlIHN1bW1hcnkuCgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS4KKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgCiAgICAqICAgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgCiAgICAqICAgYGRvX3NvY2tfc2V0c29ja29wdGAKICAgICogICBgZG9fc29ja19nZXRzb2Nrb3B0YAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYENHUk9VUF9CUEZgCiAgICAqICAgYENPTVBBVGAgKGltcG9ydGFudCBmb3IgZXhlcmNpc2luZyB0aGUgY29tcGF0IHBhdGhzKQoKKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MuIEl0IG5vdyBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgZm9yICpjb21wYXQqIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLCB3aGVyZWFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IGJ5cGFzc2VkLiBUaGF0JiMzOTtzIGEgaHVnZSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgbm93IGV4cG9zaW5nIHRob3NlIGhvb2tzIHRvIGEgbmV3IGF0dGFjayBzdXJmYWNlLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byBmdXp6IHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9ucy4gQWRkaW5nIHRoZSBgaXNfY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgY29udGV4dCBpcyBhbHNvIHNpZ25pZmljYW50LiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIHZlY3RvciBmb3IgZnV6emluZy4KCk9rLCBqdXN0IHF1aWNrbHkgdmVyaWZ5aW5nIGBkb19zb2NrX2dldHNvY2tvcHRgLiBBbGwgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yNDEwPXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDM1LVxubmV0L3NvY2tldC5jOjI0MzY6aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxubmV0L3NvY2tldC5jLTI0MzctXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvc29ja2V0LmMtMjQ4My19XG5uZXQvc29ja2V0LmM6MjQ4NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG5uZXQvc29ja2V0LmMtMjQ4NS1cbi0tXG5uZXQvc29ja2V0LmM9MjQ5MD1pbnQgX19zeXNfZ2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxubmV0L3NvY2tldC5jLTI1MDEtXG5uZXQvc29ja2V0LmM6MjUwMjpcdHJldHVybiBkb19zb2NrX2dldHNvY2tvcHQoc29jaywgaW5fY29tcGF0X3N5c2NhbGwoKSwgbGV2ZWwsIG9wdG5hbWUsXG5uZXQvc29ja2V0LmMtMjUwMy1cdFx0XHRcdCBVU0VSX1NPQ0tQVFIob3B0dmFsKSwgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEJQRiBDZ3JvdXAgU29ja29wdCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSBjb25maXJtZWQgdGhhdCBgZG9fc29ja19nZXRzb2Nrb3B0YCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgQlBGIGNncm91cCBzb2Nrb3B0IGZ1bmN0aW9uYWxpdHkuIExldCBtZSBzZWUuLi4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIGFueSBCUEYgdXNhZ2UsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgY2hlY2tsaXN0LiBUaGVuLCBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIHRvIHN1cHBvcnQgQlBGIHdpdGggY2dyb3Vwcy4gQW5kIHdhaXQsIHRoYXQgZGVwZW5kcyBvbiBib3RoIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBhbHNvIGBDT05GSUdfQ0dST1VQU2AuIEdvdCBpdC4gU28sIHRvIGdldCB0aGlzIHdvcmtpbmcsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSB0aHJlZSBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM0ND1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM1NC1cbmluaXQvS2NvbmZpZzoxMzU1OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBpbml0L0tjb25maWdgIGZvciBgQ0dST1VQX0JQRmA6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIENHUk9VUF9CUEYqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIGtlcm5lbCwgYW5kIGBDR1JPVVBfQlBGYCBpcyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUsIHNvIHRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dHMgb3IgY29tbWVudHMgdGhhdCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCwgYXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1NTpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzU2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1NzpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1ODpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNTk6XHRcdGhlbHBcbjEzNjA6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM2MTpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM2MjpcdFxuMTM2MzpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzY0Olx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gdGFja2xpbmcgdGhpcyBrZXJuZWwgY29uZmlnIGlzc3VlLiBJdCBsb29rcyBsaWtlIGBDR1JPVVBfQlBGYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBCUEZfU1lTQ0FMTGAsIHNvIEkmIzM5O2xsIGluY2x1ZGUgYm90aCwganVzdCB0byBiZSBzYWZlLiAgSSYjMzk7bGwgYWxzbyB0aHJvdyBpbiBgQ0dST1VQU2AganVzdCBpbiBjYXNlLCB0aG91Z2ggaXQmIzM5O3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gTm93LCB0aGUgcmVhbCBjb250ZW5kZXJzIGhlcmUgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYENPTVBBVGAuCgpJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09NUEFUYCBpcyBzdWZmaWNpZW50LCBvciBpZiBJIGFsc28gbmVlZCBgSUEzMl9FTVVMQVRJT05gIGZvciB4ODYgc3lzdGVtcy4gIEFoYSwgYENPTVBBVGAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgd2hpY2ggZGVwZW5kcyBvbiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCBvciBgWDg2X1gzMl9BQklgLiBUaGlzIG1lYW5zIEkgY2FuJiMzOTt0IGp1c3QgZW5hYmxlIGBDT01QQVRgIGRpcmVjdGx5IG9uIHg4NjsgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBJQTMyX0VNVUxBVElPTmAgdG8gc2F0aXNmeSB0aGF0IGRlcGVuZGVuY3kuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02NCBhbmQgcG93ZXJwYywgYENPTVBBVGAgc2VlbXMgdG8gYmUgYSByZWd1bGFyIG1lbnVjb25maWcgb3B0aW9uLiBCdXQgb24geDg2LCBpdCYjMzk7cyB0aGF0IGBkZWZfYm9vbCB5YCB0aWVkIHRvIGBJQTMyX0VNVUxBVElPTmAuIFNvLCB0byBiZSBjb21wbGV0ZWx5IHNhZmUgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGJvdGggYENPTVBBVGAgYW5kIGBJQTMyX0VNVUxBVElPTmAuICBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBJQTMyX0VNVUxBVElPTmAgZGVmaW5pdGlvbiBpbiBgYXJjaC94ODYvS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJQTMyX0VNVUxBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0zMDc4PW1lbnUgXCYjMzQ7QmluYXJ5IEVtdWxhdGlvbnNcJiMzNDtcbmFyY2gveDg2L0tjb25maWctMzA3OS1cbmFyY2gveDg2L0tjb25maWc6MzA4MDpjb25maWcgSUEzMl9FTVVMQVRJT05cbmFyY2gveDg2L0tjb25maWctMzA4MS1cdGJvb2wgXCYjMzQ7SUEzMiBFbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTMwOTAtXG5hcmNoL3g4Ni9LY29uZmlnOjMwOTE6Y29uZmlnIElBMzJfRU1VTEFUSU9OX0RFRkFVTFRfRElTQUJMRURcbmFyY2gveDg2L0tjb25maWctMzA5Mi1cdGJvb2wgXCYjMzQ7SUEzMiBlbXVsYXRpb24gZGlzYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk0NgoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHg4NiBFbXVsYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSUEzMl9FTVVMQVRJT05gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBmb3IgeDg2IGVtdWxhdGlvbi4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aGF0IGRpcmVjdGx5IHRvIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGNhdWdodCBteSBhdHRlbnRpb246IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZW50cnlwb2ludHMuIFRoZXkmIzM5O3JlIGFsbCBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgY2FsbHMuIEkgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGFyZSBub3cgYmVpbmcgdHJpZ2dlcmVkIGJ5IGNvbXBhdCBzeXNjYWxscy4gSXQgbWFrZXMgc2Vuc2UsIHByZXZpb3VzbHkgd2Ugd2VyZSBieXBhc3NpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBOb3csIHdlJiMzOTtyZSBjb3JyZWN0bHkgZXhwb3NpbmcgdGhlIEJQRiBjZ3JvdXAgc29ja29wdCBwcm9ncmFtcyB0byB0aG9zZSBjb21wYXQgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgc3lzY2FsbHMuIFdlJiMzOTtyZSBmaWxsaW5nIHRoZSBnYXAuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGZpbmFsaXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAppbmRleCA0ZDBjYzY1OTc2YTE0Li45NDNlYjAyM2I1MmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaApAQCAtMTM4LDE0ICYjNDM7MTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsCiAJCQkJICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcywKIAkJCQkgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCwKLQkJCQkgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJCSAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwomIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBib29sIGNvbXBhdCwKJiM0MzsJCQkJICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLAomIzQzOwkJCQkgICAgICAgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKLQkJCQkgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLAotCQkJCSAgICAgICBpbnQgcmV0dmFsKTsKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LAomIzQzOwkJCQkgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkJCSAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7CiAKIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCQkJCSAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLApAQCAtMzc2LDIxICYjNDM7Mzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssCiAJX19yZXQ7CQkJCQkJCQkgICAgICAgXAogfSkKIAotI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFwKLQkJCQkgICAgICAga2VybmVsX29wdHZhbCkJCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpCQkgICAgICAgXAogKHsJCQkJCQkJCQkgICAgICAgXAogCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgICBcCiAJaWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgJmFtcDsmYW1wOwkJCSAgICAgICBcCiAJICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSkJCSAgICAgICBcCi0JCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCwJICAgICAgIFwKLQkJCQkJCQkgICBvcHRuYW1lLCBvcHR2YWwsICAgIFwKLQkJCQkJCQkgICBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQlfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcCiYjNDM7CQkJCQkJCSAgIGxldmVsLCBvcHRuYW1lLCAgICAgXAomIzQzOwkJCQkJCQkgICBvcHR2YWwsIG9wdGxlbiwgICAgIFwKIAkJCQkJCQkgICBrZXJuZWxfb3B0dmFsKTsgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQogCi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXAotCQkJCSAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkJICAgICAgIFwKICh7CQkJCQkJCQkJICAgICAgIFwKIAlpbnQgX19yZXQgPSByZXR2YWw7CQkJCQkJICAgICAgIFwKIAlpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSAmYW1wOyZhbXA7CQkJICAgICAgIFwKQEAgLTQwMCw3ICYjNDM7NDAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCwJICAgICAgIFwKIAkJCQkJbGV2ZWwsIG9wdG5hbWUpKQkJICAgICAgIFwKIAkJCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCgJICAgICAgIFwKLQkJCQlzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQkJCXNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXAogCQkJCW1heF9vcHRsZW4sIHJldHZhbCk7CQkJICAgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQpAQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFMoc29ja19vcHMpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKIAkJCQkgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAogCQkJCQkgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcCiAJCQkJICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pCiAKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gewogCXMzMgkJbGV2ZWw7CiAJczMyCQlvcHRuYW1lOwogCXMzMgkJb3B0bGVuOwomIzQzOwlzMzIJCWlzX2NvbXBhdDsKIAkvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrOwogCS8qIFRlbXBvcmFyeSAmIzM0O3JlZ2lzdGVyJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTc2MTYsNiAmIzQzOzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQgewogCV9fczMyCW9wdG5hbWU7CiAJX19zMzIJb3B0bGVuOwogCV9fczMyCXJldHZhbDsKJiM0MzsJX19zMzIJaXNfY29tcGF0OwogfTsKIAogc3RydWN0IGJwZl9waWRuc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMjA1NSw3ICYjNDM7MjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LAogCXJldHVybiBjdHgtJmd0O29wdHZhbCAhPSBidWYtJmd0O2RhdGE7CiB9CiAKLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLAogCQkJCSAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCkKIHsKQEAgLTIwNjUsNiAmIzQzOzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsCiAJCS5zayA9IHNrLAogCQkubGV2ZWwgPSAqbGV2ZWwsCiAJCS5vcHRuYW1lID0gKm9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCX07CiAJaW50IHJldCwgbWF4X29wdGxlbjsKIApAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbiwKIAkJCQkgICAgICAgaW50IHJldHZhbCkKQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJLnNrID0gc2ssCiAJCS5sZXZlbCA9IGxldmVsLAogCQkub3B0bmFtZSA9IG9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCQkuY3VycmVudF90YXNrID0gY3VycmVudCwKIAl9OwogCWludCBvcmlnX29wdGxlbjsKQEAgLTI3MDUsNiAmIzQzOzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWVsc2UKIAkJCSppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pOwogCQlicmVhazsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6CiYjNDM7CQkqaW5zbiYjNDM7JiM0MzsgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTsKJiM0MzsJCWJyZWFrOwogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpOgogCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KSAhPSAwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmY0NTQ5OTc1Zjk4YjkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIzNDYsMTAgJiM0MzsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWlmICghY29tcGF0KQotCQllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKLQkJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKLQkJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKJiM0MzsJZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stJmd0O3NrLCBjb21wYXQsICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKJiM0MzsJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKJiM0MzsJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0OwogCWlmIChlcnIgJmd0OyAwKSB7CkBAIC0yNDQ3LDggJiM0MzsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWNvbXBhdCkKLQkJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKJiM0MzsJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKIAogCW9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7CkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCwKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKCFjb21wYXQpCi0JCWVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLSZndDtzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAotCQkJCQkJICAgICBlcnIpOwomIzQzOwllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsCiYjNDM7CQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAomIzQzOwkJCQkJICAgICBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC03NjE2LDYgJiM0Mzs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHsKIAlfX3MzMglvcHRuYW1lOwogCV9fczMyCW9wdGxlbjsKIAlfX3MzMglyZXR2YWw7CiYjNDM7CV9fczMyCWlzX2NvbXBhdDsKIH07CiAKIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMKaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYwpAQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdG5hbWUgPSBJUF9UT1MsCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtyZXR2YWwgPSAwICovCiYjNDM7CQkJQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLAomIzQzOwkJCUJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKSksCiYjNDM7CQkJLyogcmV0dXJuIDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX0pNUF9BKDEpLAomIzQzOwkJCS8qIH0gZWxzZSB7ICovCiYjNDM7CQkJLyogcmV0dXJuIDAgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQkJLyogfSAqLwomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZ2V0X2xldmVsID0gU09MX0lQLAomIzQzOwkJLmdldF9vcHRuYW1lID0gSVBfVE9TLAomIzQzOwkJLmdldF9vcHRsZW4gPSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O2lzX2NvbXBhdCYjMzQ7LAomIzQzOwkJLmluc25zID0gewomIzQzOwkJCS8qIGN0eC0mZ3Q7aXNfY29tcGF0ID0gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsCiYjNDM7CQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLAomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZXJyb3IgPSBERU5ZX0xPQUQsCiYjNDM7CX0sCiAJewogCQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O29wdG5hbWUmIzM0OywKIAkJLmluc25zID0gewpAQCAtNjA5LDYgJiM0Mzs2NTIsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdHZhbCA9IHsgMSAmbHQ7Jmx0OyAzIH0sCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtvcHRsZW4gPSAtMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBvcHRsZW4pKSwKJiM0MzsJCQkvKiByZXR1cm4gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfSk1QX0EoMSksCiYjNDM7CQkJLyogfSBlbHNlIHsgKi8KJiM0MzsJCQkvKiByZXR1cm4gMCAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSwKJiM0MzsJCQkvKiB9ICovCiYjNDM7CQkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwkJfSwKJiM0MzsJCS5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsJCS5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsKJiM0MzsJCS5zZXRfb3B0bmFtZSA9IDEyMywKJiM0MzsJCS5zZXRfb3B0bGVuID0gMSwKJiM0MzsJCS5pb191cmluZ19zdXBwb3J0ID0gdHJ1ZSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiBjdHgtJmd0O2lzX2NvbXBhdCA9IDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsJCQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQl9LAomIzQzOwkJLmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwkJLmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwomIzQzOwkJLmVycm9yID0gREVOWV9MT0FELAomIzQzOwl9LAogCXsKIAkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC0mZ3Q7b3B0bGVuJiMzNDssCiAJCS5pbnNucyA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzIHRvIEJQRiBIb29rcyBpbiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhbiBgaXNfY29tcGF0YCBmaWVsZCBpbnRvIHRoZSBgYnBmX3NvY2tvcHRgIHN0cnVjdHVyZXMuIFRoaXMsIGluIHR1cm4sIGlzIGJlaW5nIHBhc3NlZCBkb3duIHRvIHRoZSBCUEYgaG9vayBleGVjdXRpb24gZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLgoKUHJldmlvdXNseSwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCB0aGUgQlBGIGhvb2tzIHdlcmUgKnNraXBwZWQqIGVudGlyZWx5IGlmIHRoZSBgY29tcGF0YCBmbGFnIHdhcyBzZXQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgYnlwYXNzZWQgdGhlIEJQRiBleGVjdXRpb24gaW4gdGhvc2UgY2FzZXMuIFRoZSBkaWZmIHNob3dzIHRoaXMgcXVpdGUgY2xlYXJseS4gIEVzc2VudGlhbGx5LCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGZ1bmN0aW9ucyB3ZXJlIHdyYXBwZWQgaW4gYGlmICghY29tcGF0KWAgY29uZGl0aW9ucy4KCk5vdywgaG93ZXZlciwgaXQgbG9va3MgbGlrZSB0aGF0IGNvbmRpdGlvbmFsIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBCUEYgaG9va3MgYXJlICphbHdheXMqIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgY29tcGF0YCBzZXR0aW5nLiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IG1lYW5zIEJQRiBwcm9ncmFtcyBjYW4gbm93IGluZmx1ZW5jZSBhbmQgcG90ZW50aWFsbHkgZXZlbiBibG9jayBvciBtb2RpZnkgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgY2FsbHMgbWFkZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUuCgpUaGVyZSYjMzk7cyBvbmUgbW9yZSB0aGluZyB0aGF0JiMzOTtzIGNhdWdodCBteSBhdHRlbnRpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgbW9yZSBjYXJlZnVsbHkuIFByZXZpb3VzbHksIHRoZSBgY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtgIGxpbmUgaW4gYGRvX3NvY2tfZ2V0c29ja29wdGAgd2FzIGFsc28gd3JhcHBlZCBpbiBgaWYgKCFjb21wYXQpYC4gIFRoYXQmIzM5O3Mgbm93IGdvbmUsIG1lYW5pbmcgdGhpcyBjb3B5ICphbHdheXMqIGhhcHBlbnMsIGV2ZW4gZm9yIGNvbXBhdCBjYWxscy4gV2FpdCwgYG9wdGxlbmAgaXMgYSBgc29ja3B0cl90YCwgc28gaXQmIzM5O3MgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnkuICBJcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb3B5X2Zyb21fc29ja3B0cmAgY2hlY2tlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzZWN1cml0eSBpc3N1ZSBpZiB0aGUgY29weSBmYWlscyBhbmQgYSBnYXJiYWdlIHZhbHVlIGdldHMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfZnJvbV9zb2NrcHRyLiptYXhfb3B0bGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yNDM2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQ0OC1cbm5ldC9zb2NrZXQuYzoyNDQ5Olx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG5uZXQvc29ja2V0LmMtMjQ1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGRvX3NvY2tfZ2V0c29ja29wdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIHplcm8gaW4gb24gYGRvX3NvY2tfZ2V0c29ja29wdGAuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc29ja2V0IG9wdGlvbnMuIEZpcnN0LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJhc2ljIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3dpdGNoIHN0YXRlbWVudCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2Ygb3B0aW9uIGRpc3BhdGNoLiBJIGJldCBpdCYjMzk7cyBhIG11bHRpLWxheWVyZWQgc3dpdGNoLCBoYW5kbGluZyB0aGUgc29ja2V0IGxldmVsIChTT0xfU09DS0VULCBldGMuKSBhbmQgdGhlbiB0aGUgc3BlY2lmaWMgb3B0aW9uIHdpdGhpbiB0aGF0IGxldmVsLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYXJndW1lbnQgcGFyc2luZy4gU3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIHBhc3NlZCB0byBgb3B0bGVuYCBhbmQgYG9wdHZhbGAuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHByZXNlbnQgaW4gaXRzIGhhbmRsaW5nPyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgdmFyaW91cyBgZ2V0c29ja29wdGAgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGNvcHlpbmcgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHByZXNlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzPwoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIHByb3RvY29scyBhcmUgdHJlYXRlZC4gRG9lcyBpdCBjb3JyZWN0bHkgY2hlY2sgZm9yIGludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9ucz8gQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgaXQgbWlnaHQgcmV0dXJuIGFuIGluY29ycmVjdCBlcnJvciBjb2RlPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBpbnRyb2R1Y2VkIGJ5IGNvbmN1cnJlbnQgY2FsbHM/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHBvc3NpYmxlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseS4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCBvdmVydmlldyB0byBzcG90IGFueSBvYnZpb3VzIGlzc3VlcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Mzc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQzODpcdHtcbjI0Mzk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NDA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NDE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDQyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ0MzpcdFx0aW50IGVycjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NDY6XHRcdGlmIChlcnIpXG4yNDQ3Olx0XHRcdHJldHVybiBlcnI7XG4yNDQ4Olx0XG4yNDQ5Olx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbjI0NTA6XHRcbjI0NTE6XHRcdG9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4yNDUyOlx0XHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xuMjQ1MzpcdFx0XHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yNDU0Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcbjI0NTU6XHRcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuMjQ1NjpcdFx0XHRpZiAoZXJyKVxuMjQ1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4yNDU4Olx0XG4yNDU5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4yNDYwOlx0XG4yNDYxOlx0XHRcdC8qIEFsd2F5cyB3cml0ZSBiYWNrIG9wdGxlbiwgZXZlbiBvbiBmYWlsdXJlLiBTb21lIHByb3RvY29sc1xuMjQ2MjpcdFx0XHQgKiAoZS5nLiBDQU4gcmF3KSByZXR1cm4gLUVSQU5HRSBhbmQgc2V0IG9wdGxlbiB0byB0aGVcbjI0NjM6XHRcdFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cbjI0NjQ6XHRcdFx0ICovXG4yNDY1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4yNDY2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDY3Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0KSB7XG4yNDY4Olx0XHRcdGlmIChXQVJOX09OQ0Uob3B0dmFsLmlzX2tlcm5lbCB8fCBvcHRsZW4uaXNfa2VybmVsLFxuMjQ2OTpcdFx0XHRcdCAgICAgIFwmIzM0O0ludmFsaWQgYXJndW1lbnQgdHlwZVwmIzM0OykpXG4yNDcwOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMjQ3MTpcdFxuMjQ3MjpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLnVzZXIsXG4yNDczOlx0XHRcdFx0XHQgICAgICBvcHRsZW4udXNlcik7XG4yNDc0Olx0XHR9IGVsc2Uge1xuMjQ3NTpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjI0NzY6XHRcdH1cbjI0Nzc6XHRcbjI0Nzg6XHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuMjQ3OTpcdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxuMjQ4MDpcdFx0XHRcdFx0XHQgICAgIGVycik7XG4yNDgxOlx0XG4yNDgyOlx0XHRyZXR1cm4gZXJyO1xuMjQ4MzpcdH1cbjI0ODQ6XHRFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG4yNDg1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIEdldHNvY2tvcHQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtgIGNhbGwuLi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjb25jZXJuZWQgdGhhdCBpdCYjMzk7cyBpZ25vcmluZyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBgb3B0bGVuYCBpcyBnYXJiYWdlLCB0aGVuIGBtYXhfb3B0bGVuYCB3aWxsIHJlbWFpbiBhdCB6ZXJvLCB3aGljaCBpcyBob3cgaXQgd2FzIGluaXRpYWxpemVkLiBUaGVuIHRoYXQgemVybyB2YWx1ZSBnZXRzIHBhc3NlZCB0byBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGhhcyBzb21lIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKV2FpdCwgbG9va2luZyBhdCBpdCBhZ2FpbiwgYG1heF9vcHRsZW5gIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggYWRkcmVzc2VzIHRoZSBpbW1lZGlhdGUgJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSYjMzQ7IGNvbmNlcm4uIFRoZSByZWFsIHNoaWZ0IGhhcHBlbnMgd2l0aCB0aGUgcGF0Y2gsIHdoaWNoIHJlbW92ZXMgdGhlIGBpZiAoIWNvbXBhdClgIGNvbmRpdGlvbiBhbmQgbGV0cyBgbWF4X29wdGxlbmAgYmUgcmVhZCBmcm9tIHVzZXIgc3BhY2UgZm9yIGNvbXBhdCBnZXRzb2Nrb3B0LiBOb3csIGZvciBjb21wYXQgZ2V0c29ja29wdCwgdGhlIGBvcHRsZW5gIHZhcmlhYmxlIHBvaW50cyB0byBhIDMyLWJpdCBpbnRlZ2VyIGluIHVzZXIgc3BhY2UsIGFuZCBzaW5jZSBgc2l6ZW9mKGludClgIGlzIGluZGVlZCA0IGJ5dGVzLCBgY29weV9mcm9tX3NvY2twdHJgIHJlYWRzIDQgYnl0ZXMuIE9rYXksIHRoZSB2YWx1ZSBpcyBpbml0aWFsaXplZC4gU3RpbGwsIEkgc2hvdWxkIGV4cGxvcmUgdGhpcyB3aXRoIHRoZSBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDc6XHRcdHJldHVybiByZXQ7XG4yMTQ4Olx0fVxuMjE0OTpcdFxuMjE1MDpcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjIxNTE6XHRcdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbjIxNTI6XHRcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbjIxNTM6XHRcdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKVxuMjE1NDpcdHtcbjIxNTU6XHRcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzb2NrX2Nncm91cF9wdHIoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIxNTY6XHRcdHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307XG4yMTU3Olx0XHRzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHggPSB7XG4yMTU4Olx0XHRcdC5zayA9IHNrLFxuMjE1OTpcdFx0XHQubGV2ZWwgPSBsZXZlbCxcbjIxNjA6XHRcdFx0Lm9wdG5hbWUgPSBvcHRuYW1lLFxuMjE2MTpcdFx0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuMjE2MjpcdFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbjIxNjM6XHRcdH07XG4yMTY0Olx0XHRpbnQgb3JpZ19vcHRsZW47XG4yMTY1Olx0XHRpbnQgcmV0O1xuMjE2NjpcdFxuMjE2NzpcdFx0b3JpZ19vcHRsZW4gPSBtYXhfb3B0bGVuO1xuMjE2ODpcdFx0Y3R4Lm9wdGxlbiA9IG1heF9vcHRsZW47XG4yMTY5Olx0XHRtYXhfb3B0bGVuID0gc29ja29wdF9hbGxvY19idWYoXHUwMDI2Y3R4LCBtYXhfb3B0bGVuLCBcdTAwMjZidWYpO1xuMjE3MDpcdFx0aWYgKG1heF9vcHRsZW4gXHUwMDNjIDApXG4yMTcxOlx0XHRcdHJldHVybiBtYXhfb3B0bGVuO1xuMjE3MjpcdFxuMjE3MzpcdFx0aWYgKCFyZXR2YWwpIHtcbjIxNzQ6XHRcdFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxuMjE3NTpcdFx0XHQgKiBjb3B5IHdoYXRldmVyIHdhcyByZXR1cm5lZCB0byB0aGUgdXNlciBiYWNrXG4yMTc2Olx0XHRcdCAqIGludG8gb3VyIHRlbXBvcmFyeSBidWZmZXIuIFNldCBvcHRsZW4gdG8gdGhlXG4yMTc3Olx0XHRcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxuMjE3ODpcdFx0XHQgKiBCUEYgcHJvZ3JhbXMgaW5zcGVjdCB0aGUgdmFsdWUuXG4yMTc5Olx0XHRcdCAqL1xuMjE4MDpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Y3R4Lm9wdGxlbiwgb3B0bGVuLFxuMjE4MTpcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKGN0eC5vcHRsZW4pKSkge1xuMjE4MjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMTgzOlx0XHRcdFx0Z290byBvdXQ7XG4yMTg0Olx0XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdFx0aWYgKGN0eC5vcHRsZW4gXHUwMDNjIDApIHtcbjIxODc6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMjE4OTpcdFx0XHR9XG4yMTkwOlx0XHRcdG9yaWdfb3B0bGVuID0gY3R4Lm9wdGxlbjtcbjIxOTE6XHRcbjIxOTI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGN0eC5vcHR2YWwsIG9wdHZhbCxcbjIxOTM6XHRcdFx0XHRcdCAgICAgIG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKSkpIHtcbjIxOTQ6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE5NTpcdFx0XHRcdGdvdG8gb3V0O1xuMjE5NjpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjIwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIGFuZCBDb21wYXRpYmlsaXR5IEZsYWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eGAgYW5kIGl0IHNlZW1zIHRvIGJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBUaGF0IG1lYW5zIHNvbWUgZmllbGRzIGdldCBzcGVjaWZpYyB2YWx1ZXMsIGFuZCB0aGUgcmVzdCBnZXQgemVyb2VkIG91dCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBUaGUga2V5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIHRoaXMgYGlzX2NvbXBhdGAgZmllbGQsIHdoaWNoIGlzIGFwcGFyZW50bHkgYSAqbmV3KiBhZGRpdGlvbiB0byBib3RoIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgYW5kIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIG9uIGhvdyB0aGUgc3RydWN0dXJlcyBhcmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGFkZGVkIGFuZCB3aGF0IHByb2JsZW0gaXQmIzM5O3MgdHJ5aW5nIHRvIHNvbHZlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNpbXBseSAqYWRkaW5nKiBgaXNfY29tcGF0YCB0byB0aGUgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYWRkaXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoaXMgbmV3IGBpc19jb21wYXRgIGZpZWxkIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvciBjb25maWd1cmF0aW9ucywgZ2l2ZW4gaXRzIG5hbWUuIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgdGhlIG9ubHkgY2hhbmdlIG9yIGlmIG90aGVyIGZpZWxkcyB3ZXJlIGFmZmVjdGVkLgoKRmluYWxseSwgSSBoYXZlIGEgcXVpY2sgdGhvdWdodCBvbiB0aGUgYHN0cnVjdCBicGZfc29ja29wdGAuIFBhZGRpbmcgaW4gc3RydWN0cyBpcyBhbHdheXMgYSBjb25jZXJuIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHBhY2tlZCBzdHJ1Y3R1cmVzIG9yIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIGEgcXVpY2sgcXVlc3Rpb24sIGJ1dCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGlmIHRoZSBzdHJ1Y3QgaGFzIGFueSBraW5kIG9mIHNwZWNpYWwgcGFja2luZyBydWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2MTA6XHRzdHJ1Y3QgYnBmX3NvY2tvcHQge1xuNzYxMTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfc29jayAqLCBzayk7XG43NjEyOlx0XHRfX2JwZl9tZF9wdHIodm9pZCAqLCBvcHR2YWwpO1xuNzYxMzpcdFx0X19icGZfbWRfcHRyKHZvaWQgKiwgb3B0dmFsX2VuZCk7XG43NjE0Olx0XG43NjE1Olx0XHRfX3MzMlx0bGV2ZWw7XG43NjE2Olx0XHRfX3MzMlx0b3B0bmFtZTtcbjc2MTc6XHRcdF9fczMyXHRvcHRsZW47XG43NjE4Olx0XHRfX3MzMlx0cmV0dmFsO1xuNzYxOTpcdFx0X19zMzJcdGlzX2NvbXBhdDtcbjc2MjA6XHR9O1xuNzYyMTpcdFxuNzYyMjpcdHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XG43NjIzOlx0XHRfX3UzMiBwaWQ7XG43NjI0Olx0XHRfX3UzMiB0Z2lkO1xuNzYyNTpcdH07XG43NjI2Olx0XG43NjI3Olx0LyogVXNlciBhY2Nlc3NpYmxlIGRhdGEgZm9yIFNLX0xPT0tVUCBwcm9ncmFtcy4gQWRkIG5ldyBmaWVsZHMgYXQgdGhlIGVuZC4gKi9cbjc2Mjg6XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCB7XG43NjI5Olx0XHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvbnRleHQgZm9yIFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJdCYjMzk7cyBhIFVzZXIgQVBJIHN0cnVjdHVyZSwgYnV0IGl0IGFsc28gc2VydmVzIGFzIHRoZSBjb250ZXh0IGZvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGEga2V5IGRldGFpbC4gVGhlIHZlcmlmaWVyIGlzIHRoZSBrZXkgdG8gZW5zdXJpbmcgYWxsIHRoZSBydWxlcyBhcmUgZm9sbG93ZWQgd2hlbiBCUEYgcHJvZ3JhbXMgYWNjZXNzIHRoaXMgc3RydWN0dXJlIC0gc3BlY2lmaWNhbGx5IGl0IHJld3JpdGVzIGFjY2Vzc2VzIHRvIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGlzX2NvbXBhdGAgdG8gYm90aCB0aGUgdXNlci1zcGFjZSBhbmQga2VybmVsIHZlcnNpb25zIG9mIHRoZSBzdHJ1Y3QsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkZWFsaW5nIHdpdGggY29tcGF0aWJpbGl0eSBmbGFncy4KCkxvb2tpbmcgYXQgdGhlIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgZnVuY3Rpb24sIGl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIEJQRiBjb250ZXh0IGFjY2VzcyBjb252ZXJzaW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGhhbmRsaW5nIG9mIHRoZSBgaXNfY29tcGF0YCBmaWVsZDogd2UmIzM5O3JlIHVzaW5nIGBDR19TT0NLT1BUX1JFQURfRklFTERgIHRvIGhhbmRsZSB0aGUgcmVhZCBvcGVyYXRpb24uIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gbm8gcmVkIGZsYWdzIHRoZXJlLCBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlIHZlcmlmaWVyIHRha2VzIGNhcmUgb2YgZW5mb3JjaW5nIHRoZSBib3VuZGFyaWVzIHNvIG9ubHkgZXhwbGljaXRseSBoYW5kbGVkIGZpZWxkcyBhcmUgYWNjZXNzaWJsZSwga2VlcGluZyB0aGluZ3Mgc2VjdXJlLgoKQnV0Li4ud2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoaXMuLi53aGF0IGFib3V0IHRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIHZlcnNpb24/IExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGNoYW5nZSBpcyB3ZWxsLWRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY5NTpcdFx0dThcdFx0ZGF0YVtCUEZfU09DS09QVF9LRVJOX0JVRl9TSVpFXTtcbjE2OTY6XHR9O1xuMTY5NzpcdFxuMTY5ODpcdHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcbjE2OTk6XHRcdHN0cnVjdCBzb2NrXHQqc2s7XG4xNzAwOlx0XHR1OFx0XHQqb3B0dmFsO1xuMTcwMTpcdFx0dThcdFx0Km9wdHZhbF9lbmQ7XG4xNzAyOlx0XHRzMzJcdFx0bGV2ZWw7XG4xNzAzOlx0XHRzMzJcdFx0b3B0bmFtZTtcbjE3MDQ6XHRcdHMzMlx0XHRvcHRsZW47XG4xNzA1Olx0XHRzMzJcdFx0aXNfY29tcGF0O1xuMTcwNjpcdFx0LyogZm9yIHJldHZhbCBpbiBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHggKi9cbjE3MDc6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrO1xuMTcwODpcdFx0LyogVGVtcG9yYXJ5IFwmIzM0O3JlZ2lzdGVyXCYjMzQ7IGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cbjE3MDk6XHRcdHU2NFx0XHR0bXBfcmVnO1xuMTcxMDpcdH07XG4xNzExOlx0XG4xNzEyOlx0aW50IGNvcHlfYnBmX2Zwcm9nX2Zyb21fdXNlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZHN0LCBzb2NrcHRyX3Qgc3JjLCBpbnQgbGVuKTtcbjE3MTM6XHRcbjE3MTQ6XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja29wdF9rZXJuYCBTdHJ1Y3QqKgoKT2theSwgc28gdGhleSYjMzk7dmUgYWRkZWQgYGlzX2NvbXBhdGAgdG8gdGhlIGBicGZfc29ja29wdF9rZXJuYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgd2l0aGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGUgaW5pdGlhbGl6YXRpb24gbG9va3MgcHJldHR5IHN0YW5kYXJkOyB0aGV5JiMzOTtyZSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgKGBza2AsIGBsZXZlbGAsIGBvcHRuYW1lYCwgYW5kIGBpc19jb21wYXRgKSBkaXJlY3RseSwgYW5kIHRoZSByZXN0IHdpbGwgYmUgemVyb2VkIG91dCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gdHJpZ2dlcmVkIGEgdGhvdWdodDogaXMgdGhlcmUgYW55IGNoYW5jZSB3ZSYjMzk7cmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBJIG1lYW4sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgdGhhdCYjMzk7cyBhIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhLgoKQnV0LCBob2xkIG9uLi4uIG5vLCB0aGF0IHNob3VsZG4mIzM5O3QgYmUgYSBjb25jZXJuIGhlcmUuIFRoaXMgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdCAqaXNuJiMzOTt0KiBwYXNzZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgdXNlZCBzb2xlbHkgd2l0aGluIHRoZSBCUEYgZXhlY3V0aW9uIGNvbnRleHQuIEJQRiBwcm9ncmFtcyAqY2FuKiByZWFkIGBpc19jb21wYXRgLCBhbmQgdGhlIHZlcmlmaWVyIGNvcnJlY3RseSB0cmFuc2xhdGVzIHRob3NlIHJlYWRzIHRvIGBjdHgtJmd0O2lzX2NvbXBhdGAuIFNvIHdlIHNob3VsZCBiZSBmaW5lIHRoZXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBUaGF0IGxvb2tzIGdvb2QsIGJ1dCB3aGF0IGFib3V0IGBkb19zb2NrX3NldHNvY2tvcHRgPyBXZSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMzNjpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4yMzM3Olx0e1xuMjMzODpcdFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xuMjMzOTpcdFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XG4yMzQwOlx0XHRpbnQgZXJyO1xuMjM0MTpcdFxuMjM0MjpcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMClcbjIzNDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XG4yMzQ2Olx0XHRpZiAoZXJyKVxuMjM0NzpcdFx0XHRnb3RvIG91dF9wdXQ7XG4yMzQ4Olx0XG4yMzQ5Olx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbjIzNTA6XHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbjIzNTE6XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbjIzNTI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yMzUzOlx0XHRcdGdvdG8gb3V0X3B1dDtcbjIzNTQ6XHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbjIzNTU6XHRcdFx0ZXJyID0gMDtcbjIzNTY6XHRcdFx0Z290byBvdXRfcHV0O1xuMjM1NzpcdFx0fVxuMjM1ODpcdFxuMjM1OTpcdFx0aWYgKGtlcm5lbF9vcHR2YWwpXG4yMzYwOlx0XHRcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xuMjM2MTpcdFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbjIzNjI6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXG4yMzYzOlx0XHRcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjM2NDpcdFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cdTAwM2VzZXRzb2Nrb3B0KSlcbjIzNjU6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmNlcm4gUmVnYXJkaW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSBpbiBgZG9fc29ja19zZXRzb2Nrb3B0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0IHNlZW1zIHRoYXQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbm93IGJlaW5nIGNhbGxlZCBmb3IgY29tcGF0IHNvY2tldHMsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgcHJldmlvdXNseS4gSG1tLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBDb3VsZCB0aGlzIGludHJvZHVjdGlvbiBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/CgpUaGUgY29kZSBwYXRoIGlzOiBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYCBpcyB0cmlnZ2VyZWQsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgLiBSaWdodCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gSXQgYWxsb2NhdGVzIGEgYnVmZmVyLCBjb3BpZXMgYG9wdHZhbGAg4oCTIHRoYXQgaXMsIHRoZSBvcHRpb24gdmFsdWUg4oCTIGZyb20gdXNlciBzcGFjZSBpbnRvIGl0LCBydW5zIHRoZSBCUEYgcHJvZ3JhbSwgYW5kIHRoZW4gcmV0dXJucyB0aGUgKm1vZGlmaWVkKiBidWZmZXIgdmlhIGBrZXJuZWxfb3B0dmFsYC4KCldhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4gYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIGNvcHlpbmcgYG9wdHZhbGAgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlbiB3b3JraW5nIG9uIHRoZSAqY29weSogb2YgaXQuIFNvIGV2ZW4gaWYgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGhhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCYjMzk7cyBva2F5LCBiZWNhdXNlIHdoYXRldmVyIGlzIHJldHVybmVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSBpbnRvIHRoZSBga2VybmVsX29wdHZhbGAgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1ZmZlcj8gQWxyaWdodCwgSSYjMzk7bSBwcmV0dHkgc3VyZSwgYnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDU4Olx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbjIwNTk6XHRcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4yMDYwOlx0XHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxuMjA2MTpcdHtcbjIwNjI6XHRcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzb2NrX2Nncm91cF9wdHIoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIwNjM6XHRcdHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307XG4yMDY0Olx0XHRzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHggPSB7XG4yMDY1Olx0XHRcdC5zayA9IHNrLFxuMjA2NjpcdFx0XHQubGV2ZWwgPSAqbGV2ZWwsXG4yMDY3Olx0XHRcdC5vcHRuYW1lID0gKm9wdG5hbWUsXG4yMDY4Olx0XHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4yMDY5Olx0XHR9O1xuMjA3MDpcdFx0aW50IHJldCwgbWF4X29wdGxlbjtcbjIwNzE6XHRcbjIwNzI6XHRcdC8qIEFsbG9jYXRlIGEgYml0IG1vcmUgdGhhbiB0aGUgaW5pdGlhbCB1c2VyIGJ1ZmZlciBmb3JcbjIwNzM6XHRcdCAqIEJQRiBwcm9ncmFtLiBUaGUgY2Fub25pY2FsIHVzZSBjYXNlIGlzIG92ZXJyaWRpbmdcbjIwNzQ6XHRcdCAqIFRDUF9DT05HRVNUSU9OKG52KSB0byBUQ1BfQ09OR0VTVElPTihjdWJpYykuXG4yMDc1Olx0XHQgKi9cbjIwNzY6XHRcdG1heF9vcHRsZW4gPSBtYXhfdChpbnQsIDE2LCAqb3B0bGVuKTtcbjIwNzc6XHRcdG1heF9vcHRsZW4gPSBzb2Nrb3B0X2FsbG9jX2J1ZihcdTAwMjZjdHgsIG1heF9vcHRsZW4sIFx1MDAyNmJ1Zik7XG4yMDc4Olx0XHRpZiAobWF4X29wdGxlbiBcdTAwM2MgMClcbjIwNzk6XHRcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDgwOlx0XG4yMDgxOlx0XHRjdHgub3B0bGVuID0gKm9wdGxlbjtcbjIwODI6XHRcbjIwODM6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXG4yMDg0Olx0XHRcdFx0ICAgICAgbWluKCpvcHRsZW4sIG1heF9vcHRsZW4pKSkge1xuMjA4NTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjA4NjpcdFx0XHRnb3RvIG91dDtcbjIwODc6XHRcdH1cbjIwODg6XHRcbjIwODk6XHRcdGxvY2tfc29jayhzayk7XG4yMDkwOlx0XHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXHUwMDI2Y2dycC1cdTAwM2VicGYsIENHUk9VUF9TRVRTT0NLT1BULFxuMjA5MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCAwLCBOVUxMKTtcbjIwOTI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yMDkzOlx0XG4yMDk0Olx0XHRpZiAocmV0KVxuMjA5NTpcdFx0XHRnb3RvIG91dDtcbjIwOTY6XHRcbjIwOTc6XHRcdGlmIChjdHgub3B0bGVuID09IC0xKSB7XG4yMDk4Olx0XHRcdC8qIG9wdGxlbiBzZXQgdG8gLTEsIGJ5cGFzcyBrZXJuZWwgKi9cbjIwOTk6XHRcdFx0cmV0ID0gMTtcbjIxMDA6XHRcdH0gZWxzZSBpZiAoY3R4Lm9wdGxlbiBcdTAwM2UgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuIFx1MDAzYyAtMSkge1xuMjEwMTpcdFx0XHQvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqL1xuMjEwMjpcdFx0XHRpZiAoKm9wdGxlbiBcdTAwM2UgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBjdHgub3B0bGVuIFx1MDAzZT0gMCkge1xuMjEwMzpcdFx0XHRcdHByX2luZm9fb25jZShcJiMzNDticGYgc2V0c29ja29wdDogaWdub3JpbmcgcHJvZ3JhbSBidWZmZXIgd2l0aCBvcHRsZW49JWQgKG1heF9vcHRsZW49JWQpXFxuXCYjMzQ7LFxuMjEwNDpcdFx0XHRcdFx0ICAgICBjdHgub3B0bGVuLCBtYXhfb3B0bGVuKTtcbjIxMDU6XHRcdFx0XHRyZXQgPSAwO1xuMjEwNjpcdFx0XHRcdGdvdG8gb3V0O1xuMjEwNzpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNvY2tvcHRfYWxsb2NfYnVmYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgYnVmZmVyLCBzcGVjaWZpY2FsbHkgc2l6ZWQgYnkgYG1heF9vcHRsZW5gLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgbmV4dCBzdGVwIGlzIGEgY2FsbCB0byBgY29weV9mcm9tX3NvY2twdHJgLCB3aGljaCBpcyBnb2luZyB0byBncmFiIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEFuZCB0aGUgc2l6ZSBvZiB0aGF0IGNodW5rPyBXZWxsLCBpdCYjMzk7cyB0aGUgKnNtYWxsZXIqIHZhbHVlIGJldHdlZW4gd2hhdCB0aGUgdXNlciBwcm92aWRlcyAoYCpvcHRsZW5gKSBhbmQgdGhhdCBgbWF4X29wdGxlbmAgd2UganVzdCBhbGxvY2F0ZWQuIE1ha2VzIHNlbnNlOyB3ZSBkb24mIzM5O3Qgd2FudCB0byBvdmVyZmxvdy4KCkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gSSYjMzk7bSB3b25kZXJpbmcgaG93IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgYWN0dWFsbHkgaGFuZGxlcyB0aGUgYnVmZmVyIGFsbG9jYXRpb24uIERvZXMgaXQgdXNlIGBrbWFsbG9jYD8gT3IgaXMgaXQgZmFsbGluZyBiYWNrIHRvIHRoYXQgc3RhY2stYmFzZWQgYGJ1ZmA/IFRoYXQmIzM5O3MgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLiBBbmQgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQsIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGl0IHplcm9lcyB0aGUgYnVmZmVyLiBJZiBub3QsIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSB2dWxuZXJhYmlsaXR5LCBsZXR0aW5nIGdhcmJhZ2UgZGF0YSBmcm9tIHRoZSBrZXJuZWwgbGVhayBiYWNrIGludG8gdXNlciBzcGFjZS4gVGhpcyBuZWVkcyBhIG11Y2ggY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAyMDpcdFx0XHQvKiBXZSBkb24mIzM5O3QgZXhwb3NlIG9wdHZhbHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIFBBR0VfU0laRVxuMjAyMTpcdFx0XHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXG4yMDIyOlx0XHRcdCAqL1xuMjAyMzpcdFx0XHRtYXhfb3B0bGVuID0gUEFHRV9TSVpFO1xuMjAyNDpcdFx0fVxuMjAyNTpcdFxuMjAyNjpcdFx0aWYgKG1heF9vcHRsZW4gXHUwMDNjPSBzaXplb2YoYnVmLVx1MDAzZWRhdGEpKSB7XG4yMDI3Olx0XHRcdC8qIFdoZW4gdGhlIG9wdHZhbCBmaXRzIGludG8gQlBGX1NPQ0tPUFRfS0VSTl9CVUZfU0laRVxuMjAyODpcdFx0XHQgKiBieXRlcyBhdm9pZCB0aGUgY29zdCBvZiBremFsbG9jLlxuMjAyOTpcdFx0XHQgKi9cbjIwMzA6XHRcdFx0Y3R4LVx1MDAzZW9wdHZhbCA9IGJ1Zi1cdTAwM2VkYXRhO1xuMjAzMTpcdFx0XHRjdHgtXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cdTAwM2VvcHR2YWwgJiM0MzsgbWF4X29wdGxlbjtcbjIwMzI6XHRcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDMzOlx0XHR9XG4yMDM0Olx0XG4yMDM1Olx0XHRjdHgtXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XG4yMDM2Olx0XHRpZiAoIWN0eC1cdTAwM2VvcHR2YWwpXG4yMDM3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzODpcdFxuMjAzOTpcdFx0Y3R4LVx1MDAzZW9wdHZhbF9lbmQgPSBjdHgtXHUwMDNlb3B0dmFsICYjNDM7IG1heF9vcHRsZW47XG4yMDQwOlx0XG4yMDQxOlx0XHRyZXR1cm4gbWF4X29wdGxlbjtcbjIwNDI6XHR9XG4yMDQzOlx0XG4yMDQ0Olx0c3RhdGljIHZvaWQgc29ja29wdF9mcmVlX2J1ZihzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxuMjA0NTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxuMjA0NjpcdHtcbjIwNDc6XHRcdGlmIChjdHgtXHUwMDNlb3B0dmFsID09IGJ1Zi1cdTAwM2VkYXRhKVxuMjA0ODpcdFx0XHRyZXR1cm47XG4yMDQ5Olx0XHRrZnJlZShjdHgtXHUwMDNlb3B0dmFsKTtcbjIwNTA6XHR9XG4yMDUxOlx0XG4yMDUyOlx0c3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXG4yMDUzOlx0XHRcdFx0XHQgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwNTQ6XHR7XG4yMDU1Olx0XHRyZXR1cm4gY3R4LVx1MDAzZW9wdHZhbCAhPSBidWYtXHUwMDNlZGF0YTtcbjIwNTY6XHR9XG4yMDU3Olx0XG4yMDU4Olx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbjIwNTk6XHRcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIHNldHNvY2tvcHQgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgYWxsb2NhdGVzIG1lbW9yeSwgYW5kIGl0IHVzZXMgYGt6YWxsb2NgIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMuIEJ1dCwgaWYgaXQmIzM5O3MgdXNpbmcgdGhlIHN0YWNrIGJ1ZmZlciBgYnVmLSZndDtkYXRhYCwgaXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSB6ZXJvIGl0LCB3aGljaCBtYWRlIG1lIHBhdXNlLiBBaCwgd2FpdCwgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBpbiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYWN0dWFsbHkgKmRvZXMqIHplcm8taW5pdGlhbGl6ZSB0aGF0IHN0YWNrIGJ1ZmZlci4gVGhhdCYjMzk7cyBnb29kOyB0aGUgYnVmZmVyIGlzICphbHdheXMqIGZ1bGx5IHplcm9lZCBhdCB0aGUgc3RhcnQuCgpTbywgd2UgY29weSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucyBpdHMgbWFnaWMuIE5vdywgaW5zaWRlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgSSYjMzk7bSBzZWVpbmcgdGhpczoKYGBgYwoJaWYgKGN0eC5vcHRsZW4gIT0gMCkgewoJCSpsZXZlbCA9IGN0eC5sZXZlbDsKCQkqb3B0bmFtZSA9IGN0eC5vcHRuYW1lOwoJCSpvcHRsZW4gPSBjdHgub3B0bGVuOwoJCSprZXJuZWxfb3B0dmFsID0gY3R4Lm9wdHZhbDsKCX0KYGBgCklmIGBjdHgub3B0bGVuYCBpcyBpbmNyZWFzZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCB0aGVuIGAqb3B0bGVuYCBnZXRzIHVwZGF0ZWQsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgKm9wdGxlbmAuIEJ1dCwgYG1heF9vcHRsZW5gIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIEhvbGQgb24uLi4gdGhlIEJQRiB2ZXJpZmllciBtYWtlcyBzdXJlIHRoZSBCUEYgcHJvZ3JhbSBjYW4mIzM5O3Qgc2V0IGBjdHgub3B0bGVuYCBsYXJnZXIgdGhhbiBgbWF4X29wdGxlbmAuIFRoZSBrZXJuZWwgY2hlY2tzIHRoaXMgYXMgd2VsbDoKYGBgYwoJfSBlbHNlIGlmIChjdHgub3B0bGVuICZndDsgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuICZsdDsgLTEpIHsKCQkvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqLwpgYGAKU28sIHRoYXQgYGN0eC5vcHRsZW5gIGlzIGJvdW5kZWQuCgpTaW5jZSB0aGUgYnVmZmVyIGlzIHplcm9lZCwgd2hldGhlciBieSBga3phbGxvY2Agb3IgdGhlIGB7fWAgaW5pdGlhbGl6YXRpb24sIGFueSBieXRlcyBiZXlvbmQgdGhlIG9yaWdpbmFsIGAqb3B0bGVuYCB1cCB0byBgY3R4Lm9wdGxlbmAgd2lsbCBiZSB6ZXJvLiBOaWNlLiBBbmQgdGhlbiBga2VybmVsX29wdHZhbGAgZ2V0cyBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIGBzZXRzb2Nrb3B0YCBoYW5kbGVyLiBUaGUgaGFuZGxlciByZWFkcyB1cCB0byBgKm9wdGxlbmAgYnl0ZXMgZnJvbSB0aGUgYGtlcm5lbF9vcHR2YWxgLiBCZWNhdXNlIHRoZSBidWZmZXIgaXMgemVyb2VkLCB0aGVyZSYjMzk7cyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIGxlYWtlZC4gRXhjZWxsZW50ISBUaGlzIHNlZW1zIHNhZmUuCgpOb3csIHdoYXQgYWJvdXQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgPyBJIG5lZWQgdG8gbG9vayBhdCB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MzpcdFx0aWYgKCFyZXR2YWwpIHtcbjIxNzQ6XHRcdFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxuMjE3NTpcdFx0XHQgKiBjb3B5IHdoYXRldmVyIHdhcyByZXR1cm5lZCB0byB0aGUgdXNlciBiYWNrXG4yMTc2Olx0XHRcdCAqIGludG8gb3VyIHRlbXBvcmFyeSBidWZmZXIuIFNldCBvcHRsZW4gdG8gdGhlXG4yMTc3Olx0XHRcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxuMjE3ODpcdFx0XHQgKiBCUEYgcHJvZ3JhbXMgaW5zcGVjdCB0aGUgdmFsdWUuXG4yMTc5Olx0XHRcdCAqL1xuMjE4MDpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Y3R4Lm9wdGxlbiwgb3B0bGVuLFxuMjE4MTpcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKGN0eC5vcHRsZW4pKSkge1xuMjE4MjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMTgzOlx0XHRcdFx0Z290byBvdXQ7XG4yMTg0Olx0XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdFx0aWYgKGN0eC5vcHRsZW4gXHUwMDNjIDApIHtcbjIxODc6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMjE4OTpcdFx0XHR9XG4yMTkwOlx0XHRcdG9yaWdfb3B0bGVuID0gY3R4Lm9wdGxlbjtcbjIxOTE6XHRcbjIxOTI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGN0eC5vcHR2YWwsIG9wdHZhbCxcbjIxOTM6XHRcdFx0XHRcdCAgICAgIG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKSkpIHtcbjIxOTQ6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE5NTpcdFx0XHRcdGdvdG8gb3V0O1xuMjE5NjpcdFx0XHR9XG4yMTk3Olx0XHR9XG4yMTk4Olx0XG4yMTk5Olx0XHRsb2NrX3NvY2soc2spO1xuMjIwMDpcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX2FycmF5X2NnKFx1MDAyNmNncnAtXHUwMDNlYnBmLCBDR1JPVVBfR0VUU09DS09QVCxcbjIyMDE6XHRcdFx0XHRcdCAgICBcdTAwMjZjdHgsIGJwZl9wcm9nX3J1biwgcmV0dmFsLCBOVUxMKTtcbjIyMDI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yMjAzOlx0XG4yMjA0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjIwNTpcdFx0XHRnb3RvIG91dDtcbjIyMDY6XHRcbjIyMDc6XHRcdGlmICghc29ja3B0cl9pc19udWxsKG9wdHZhbCkgXHUwMDI2XHUwMDI2XG4yMjA4Olx0XHQgICAgKGN0eC5vcHRsZW4gXHUwMDNlIG1heF9vcHRsZW4gfHwgY3R4Lm9wdGxlbiBcdTAwM2MgMCkpIHtcbjIyMDk6XHRcdFx0aWYgKG9yaWdfb3B0bGVuIFx1MDAzZSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGN0eC5vcHRsZW4gXHUwMDNlPSAwKSB7XG4yMjEwOlx0XHRcdFx0cHJfaW5mb19vbmNlKFwmIzM0O2JwZiBnZXRzb2Nrb3B0OiBpZ25vcmluZyBwcm9ncmFtIGJ1ZmZlciB3aXRoIG9wdGxlbj0lZCAobWF4X29wdGxlbj0lZClcXG5cJiMzNDssXG4yMjExOlx0XHRcdFx0XHQgICAgIGN0eC5vcHRsZW4sIG1heF9vcHRsZW4pO1xuMjIxMjpcdFx0XHRcdHJldCA9IHJldHZhbDtcbjIyMTM6XHRcdFx0XHRnb3RvIG91dDtcbjIyMTQ6XHRcdFx0fVxuMjIxNTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjIxNjpcdFx0XHRnb3RvIG91dDtcbjIyMTc6XHRcdH1cbjIyMTg6XHRcbjIyMTk6XHRcdGlmIChjdHgub3B0bGVuICE9IDApIHtcbjIyMjA6XHRcdFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcdTAwMjZcdTAwMjZcbjIyMjE6XHRcdFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGN0eC5vcHR2YWwsIGN0eC5vcHRsZW4pKSB7XG4yMjIyOlx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5OTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZXRzb2Nrb3B0IEJQRiBIb29rIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBoYW5kbGVzIGBnZXRzb2Nrb3B0YCBjYWxscywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKSW5pdGlhbGx5LCBgYnVmYCBpcyB6ZXJvZWQsIGFuZCBhc3N1bWluZyBgc29ja29wdF9hbGxvY19idWZgIHVzZXMgYGt6YWxsb2NgICh3aGljaCBzZWVtcyBsaWtlbHkpLCB0aGUgYnVmZmVyIGBjdHgub3B0dmFsYCBpcyB6ZXJvZWQuIFRoZW4sIHVzZXItc3BhY2UgZGF0YSBpcyBjb3BpZWQgKmludG8qIGBjdHgub3B0dmFsYCB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlIEJQRiBwcm9ncmFtIHJ1bnMsIGFuZCB0aGUgbW9kaWZpZWQgZGF0YSBpcyBjb3BpZWQgKmJhY2sqIHRvIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfdG9fc29ja3B0cmAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGFueSBieXRlcyBub3QgdG91Y2hlZCBieSBgY29weV9mcm9tX3NvY2twdHJgIG9yIHRoZSBCUEYgcHJvZ3JhbSByZW1haW4gemVyb2VkLiBTbywgdGhlIGluaXRpYWwgemVyb2luZyBwcm92aWRlcyBhIGNydWNpYWwgc2FmZWd1YXJkLgoKQnV0IHdoYXQgaGFwcGVucyBpZiB0aGUgb3JpZ2luYWwsIGtlcm5lbC1wcm92aWRlZCBvcHRpb24gbGVuZ3RoIChgb3JpZ19vcHRsZW5gKSBpcyBsZXNzIHRoYW4gYGN0eC5vcHRsZW5gIHdoaWNoIGlzIHBvdGVudGlhbGx5IG1vZGlmaWVkIGJ5IHRoZSBCUEYgcHJvZ3JhbT8gYGNvcHlfZnJvbV9zb2NrcHRyYCBvbmx5IGNvcGllcyBgbWluKGN0eC5vcHRsZW4sIG1heF9vcHRsZW4pYCBieXRlcy4gV2FpdCwgdGhhdCBgY3R4Lm9wdGxlbmAgY29tZXMgZnJvbSB1c2VyIHNwYWNlISBTcGVjaWZpY2FsbHksIHRoZSBrZXJuZWwmIzM5O3MgYGdldHNvY2tvcHRgIGhhbmRsZXIgd3JpdGVzIHRoZSAqYWN0dWFsKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gdGhlIGBvcHRsZW5gIHBvaW50ZXIgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSwgYW5kIHRoZW4gdGhlIEJQRiBjb2RlIHJlYWRzIGl0IGJhY2suIFRoZW4gdGhlIHNhbWUgdmFsdWUgb2YgYG9wdGxlbmAgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YSBmcm9tIHVzZXIgc3BhY2UgYmFjayBpbnRvIGBjdHgub3B0dmFsYC4gVGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucy4gQW5kIHRoZW4gdGhlIGNvZGUgY29waWVzIGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBpbmVmZmljaWVudCBiZWNhdXNlIHdlJiMzOTtyZSByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBzYW1lIGxlbmd0aCBmcm9tIHVzZXIgc3BhY2UsIGJ1dCB0aGlzIGlzIGhvdyBpdCB3b3Jrcy4gU2luY2UgYGN0eC5vcHR2YWxgIGlzIGluaXRpYWxseSB6ZXJvZWQgYW5kIG9ubHkgdGhlIGZpcnN0IGBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbilgIGJ5dGVzIGFyZSBvdmVyd3JpdHRlbiwgYW55IHRyYWlsaW5nIGJ5dGVzIHJlbWFpbiB6ZXJvLiBJZiB0aGUgQlBGIHByb2dyYW0gKmluY3JlYXNlcyogYGN0eC5vcHRsZW5gICh1cCB0byBgbWF4X29wdGxlbmApLCB0aGUgbmV3bHkgY29waWVkIGJ5dGVzIGFyZSBlaXRoZXIgemVybyBvciB3aGF0IHRoZSBCUEYgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgd3JvdGUuIFNvLCBubyB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpc19jb21wYXRgIHRvIGJvdGggYGJwZl9zb2Nrb3B0YCBhbmQgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdHVyZXMuIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCBhcmUgbW9kaWZpZWQgdG8gcGFzcyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzLCBlbmFibGluZyB0aGVzZSBob29rcyBmb3IgY29tcGF0IHNvY2tldHMuIENvdWxkIHRoZSBCUEYgcHJvZ3JhbXMgKnRoZW1zZWx2ZXMqIGJlIHRoZSBzb3VyY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgdGhlIEJQRiB2ZXJpZmllciBwcmV2ZW50cyBwcm9ncmFtcyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgaXNfY29tcGF0YCBmbGFnIHdpdGhpbiBgYnBmX3NvY2tvcHRfa2VybmAgaXMgYSBzaW1wbGUgYHMzMmAgKDQgYnl0ZXMpIGluaXRpYWxpemVkIHdpdGggdGhlIGBjb21wYXRgIHZhbHVlICgwIG9yIDEpLiBUaGUgcmVzdCBvZiBgYnBmX3NvY2tvcHRfa2VybmAgaXMgemVyb2VkIGR1ZSB0byB0aGUgZGVzaWduYXRlZCBpbml0aWFsaXplci4gU3BlY2lmaWNhbGx5LCBhbGwgb3RoZXIgZmllbGRzIGxpa2UgYHRtcF9yZWdgLCBgb3B0dmFsYCwgYG9wdHZhbF9lbmRgLCBhbmQgYG9wdGxlbmAgYXJlIHplcm9lZCB1bmxlc3MgZXhwbGljaXRseSBpbml0aWFsaXplZC4gV2FpdCwgbGF0ZXIgYG9wdGxlbmAgaXMgc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIHRvIGBtYXhfb3B0bGVuYC4gVGhpcyBwcm92aWRlcyBhIHZlcnkgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZSB0aGF0IHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgY29kZSBsZWFrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCBvbmUgbW9yZSB0aW1lLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Mzc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQzODpcdHtcbjI0Mzk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NDA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NDE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDQyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ0MzpcdFx0aW50IGVycjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NDY6XHRcdGlmIChlcnIpXG4yNDQ3Olx0XHRcdHJldHVybiBlcnI7XG4yNDQ4Olx0XG4yNDQ5Olx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbjI0NTA6XHRcbjI0NTE6XHRcdG9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4yNDUyOlx0XHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xuMjQ1MzpcdFx0XHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yNDU0Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcbjI0NTU6XHRcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuMjQ1NjpcdFx0XHRpZiAoZXJyKVxuMjQ1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4yNDU4Olx0XG4yNDU5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4yNDYwOlx0XG4yNDYxOlx0XHRcdC8qIEFsd2F5cyB3cml0ZSBiYWNrIG9wdGxlbiwgZXZlbiBvbiBmYWlsdXJlLiBTb21lIHByb3RvY29sc1xuMjQ2MjpcdFx0XHQgKiAoZS5nLiBDQU4gcmF3KSByZXR1cm4gLUVSQU5HRSBhbmQgc2V0IG9wdGxlbiB0byB0aGVcbjI0NjM6XHRcdFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cbjI0NjQ6XHRcdFx0ICovXG4yNDY1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4yNDY2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDY3Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0KSB7XG4yNDY4Olx0XHRcdGlmIChXQVJOX09OQ0Uob3B0dmFsLmlzX2tlcm5lbCB8fCBvcHRsZW4uaXNfa2VybmVsLFxuMjQ2OTpcdFx0XHRcdCAgICAgIFwmIzM0O0ludmFsaWQgYXJndW1lbnQgdHlwZVwmIzM0OykpXG4yNDcwOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMjQ3MTpcdFxuMjQ3MjpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLnVzZXIsXG4yNDczOlx0XHRcdFx0XHQgICAgICBvcHRsZW4udXNlcik7XG4yNDc0Olx0XHR9IGVsc2Uge1xuMjQ3NTpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjI0NzY6XHRcdH1cbjI0Nzc6XHRcbjI0Nzg6XHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuMjQ3OTpcdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxuMjQ4MDpcdFx0XHRcdFx0XHQgICAgIGVycik7XG4yNDgxOlx0XG4yNDgyOlx0XHRyZXR1cm4gZXJyO1xuMjQ4MzpcdH1cbjI0ODQ6XHRFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG4yNDg1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2V0c29ja29wdCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgZ2V0c29ja29wdGAgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYGRvX3NvY2tfZ2V0c29ja29wdGAuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGlzIGBjb3B5X2Zyb21fc29ja3B0cmAgY2FsbCB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIGdyYWIgdGhlIG9wdGlvbiBsZW5ndGgsIGBvcHRsZW5gLiBOb3csIGlmIHRoYXQgZmFpbHMsIGBtYXhfb3B0bGVuYCBnZXRzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlci4KCkRvd25zdHJlYW0sIHdlIHBhc3MgdGhpcyBgbWF4X29wdGxlbmAgdmFsdWUsIHBvdGVudGlhbGx5IHplcm8sIHRvIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBJbnNpZGUgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCB3ZSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYG1heF9vcHRsZW5gIGlzIHN0b3JlZCBpbiBgb3JpZ19vcHRsZW5gLCBhbmQgdGhlbiBwYXNzZWQgdG8gYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggaXMgcXVpdGUgaW50ZXJlc3RpbmcuIFRoZSBzaXplIG9mIHRoZSBvcHRpb24gYnVmZmVyIGlzIGRldGVybWluZWQgYnkgYHNvY2tvcHRfYWxsb2NfYnVmYC4KCkhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGluaXRpYWwgYG1heF9vcHRsZW5gICppcyogemVybywgdGhlbiBgc29ja29wdF9hbGxvY19idWZgIHdpbGwgYWxsb2NhdGUgYSB6ZXJvLXNpemVkIGJ1ZmZlciBvciBtYXliZSBqdXN0IHVzZSB0aGUgc3RhY2sgYnVmZmVyIGFuZCByZXR1cm4gMC4gVGhpcyBpcyBwcm9iYWJseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhlIGxvZ2ljIHNlZW1zIHJpZ2h0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc29ja29wdF9hbGxvY19idWZgIGl0c2VsZiBoYW5kbGVzIHRoZSB6ZXJvIGNhc2UgcHJvcGVybHk7IGFueSBvZmYtYnktb25lIGVycm9ycyB0aGVyZSB3b3VsZCBiZSBjcml0aWNhbC4gTGV0IG1lIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhZ2Fpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMDg6XHRcbjIwMDk6XHRcdHJldHVybiByZXQ7XG4yMDEwOlx0fVxuMjAxMTpcdFxuMjAxMjpcdCNpZmRlZiBDT05GSUdfTkVUXG4yMDEzOlx0c3RhdGljIGludCBzb2Nrb3B0X2FsbG9jX2J1ZihzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LCBpbnQgbWF4X29wdGxlbixcbjIwMTQ6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwMTU6XHR7XG4yMDE2Olx0XHRpZiAodW5saWtlbHkobWF4X29wdGxlbiBcdTAwM2MgMCkpXG4yMDE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAxODpcdFxuMjAxOTpcdFx0aWYgKHVubGlrZWx5KG1heF9vcHRsZW4gXHUwMDNlIFBBR0VfU0laRSkpIHtcbjIwMjA6XHRcdFx0LyogV2UgZG9uJiMzOTt0IGV4cG9zZSBvcHR2YWxzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBQQUdFX1NJWkVcbjIwMjE6XHRcdFx0ICogdG8gdGhlIEJQRiBwcm9ncmFtLlxuMjAyMjpcdFx0XHQgKi9cbjIwMjM6XHRcdFx0bWF4X29wdGxlbiA9IFBBR0VfU0laRTtcbjIwMjQ6XHRcdH1cbjIwMjU6XHRcbjIwMjY6XHRcdGlmIChtYXhfb3B0bGVuIFx1MDAzYz0gc2l6ZW9mKGJ1Zi1cdTAwM2VkYXRhKSkge1xuMjAyNzpcdFx0XHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcbjIwMjg6XHRcdFx0ICogYnl0ZXMgYXZvaWQgdGhlIGNvc3Qgb2Yga3phbGxvYy5cbjIwMjk6XHRcdFx0ICovXG4yMDMwOlx0XHRcdGN0eC1cdTAwM2VvcHR2YWwgPSBidWYtXHUwMDNlZGF0YTtcbjIwMzE6XHRcdFx0Y3R4LVx1MDAzZW9wdHZhbF9lbmQgPSBjdHgtXHUwMDNlb3B0dmFsICYjNDM7IG1heF9vcHRsZW47XG4yMDMyOlx0XHRcdHJldHVybiBtYXhfb3B0bGVuO1xuMjAzMzpcdFx0fVxuMjAzNDpcdFxuMjAzNTpcdFx0Y3R4LVx1MDAzZW9wdHZhbCA9IGt6YWxsb2MobWF4X29wdGxlbiwgR0ZQX1VTRVIpO1xuMjAzNjpcdFx0aWYgKCFjdHgtXHUwMDNlb3B0dmFsKVxuMjAzNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwMzg6XHRcbjIwMzk6XHRcdGN0eC1cdTAwM2VvcHR2YWxfZW5kID0gY3R4LVx1MDAzZW9wdHZhbCAmIzQzOyBtYXhfb3B0bGVuO1xuMjA0MDpcdFxuMjA0MTpcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDQyOlx0fVxuMjA0MzpcdFxuMjA0NDpcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbjIwNDU6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwNDY6XHR7XG4yMDQ3Olx0XHRpZiAoY3R4LVx1MDAzZW9wdHZhbCA9PSBidWYtXHUwMDNlZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2ODMKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMTU2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEJQRiBTb2Nrb3B0IEhvb2sgZm9yIENvbXBhdCBTeXNjYWxscyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgZXhwb3NpbmcgQlBGIGhvb2tzIHRvIGNvbXBhdCBzeXNjYWxscyB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY3J1eCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpc19jb21wYXRgIGZsYWcgYW5kIGVuYWJsaW5nIEJQRiBob29rcyB0aGF0IHdlcmUgcHJldmlvdXNseSBieXBhc3NlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBrZXJuZWwgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYG1heF9vcHRsZW5gIHNjZW5hcmlvLiBJZiBgbWF4X29wdGxlbmAgaXMgemVybywgYXMgdGhlIGNvZGUgZGVtb25zdHJhdGVzLCBhbmQgYHNvY2tvcHRfYWxsb2NfYnVmYCByZXR1cm5zIHplcm8sIHRoZSBzdWJzZXF1ZW50IGBjb3B5X2Zyb21fc29ja3B0cmAgd2lsbCBjb3B5IHplcm8gYnl0ZXMsIG1ha2luZyB0aGUgc2V0dXAgc2FmZS4gSSBjb25maXJtZWQgdGhhdCBgbWF4X29wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gd29ycmllcyBhYm91dCBpdCBiZWluZyB1bmluaXRpYWxpemVkIGluaXRpYWxseS4KCkkgdGhlbiBjb25zaWRlcmVkIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIGhhbmRsZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCBmb2N1c2luZyBvbiB3aGVyZSB0aGUgYnVmZmVyIGlzIGFsbG9jYXRlZC4gYHNvY2tvcHRfYWxsb2NfYnVmYCBpcyB0aGUga2V5LiBUaGUgY29kZSB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciwgZGVjbGFyZWQgYXMgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCB3aGljaCBJJiMzOTttIGNvbmZpZGVudCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3QsIG9yIGl0IHVzZXMgYGt6YWxsb2NgLCB3aGljaCBJIGtub3cgemVyb2VzIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgaG9va3MgYWxzbyB1c2UgYGNvcHlfZnJvbV9zb2NrcHRyYCBhbmQgYGNvcHlfdG9fc29ja3B0cmAuIFNpbmNlIHRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBhbnkgYnl0ZXMgbm90IG92ZXJ3cml0dGVuIGVpdGhlciBieSB1c2VyLXNwYWNlIG9yIHRoZSBCUEYgcHJvZ3JhbSB3aWxsIHJlbWFpbiB6ZXJvLCBwcmV2ZW50aW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLgoKSSBtb3ZlZCBvbiB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gbG9vayBhdCBob3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBUaGUgc2V0c29ja29wdCBoYW5kbGVyIGlzIGNhbGxlZCwgYW5kIHRoZSBrZXkgaXMgaWYgdGhlIEJQRiBwcm9ncmFtIHNldHMgYGtlcm5lbF9vcHR2YWxgLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgaXMgdXNlZCwgc28gaXQgaXMgZWl0aGVyIHplcm9lZCwgb3IgZmlsbGVkIGZyb20gdXNlciBzcGFjZS4gSW4gYGRvX3NvY2tfZ2V0c29ja29wdGAsIHRoZSBrZXJuZWwgaGFuZGxlciB3cml0ZXMgdG8gdGhlIGJ1ZmZlciwgQlBGIHByb2dyYW0gbWF5IG1vZGlmeSBpdCwgYW5kIHRoZW4gaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIGVpdGhlci4KCkkgYWxzbyBjaGVja2VkIG90aGVyIHBsYWNlcyB3aGVyZSBgY29tcGF0YCBpcyB1c2VkOiBpbiB0aGUgdmFyaW91cyBCUEYgaGVhZGVyIGZpbGVzIGFuZCBpbiB0aGUgdGVzdCBmaWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgY29uY2VybmluZyB1c2VzLgoKSSBoYWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IEMgaW5pdGlhbGl6YXRpb24sIGFuZCBjb25maXJtZWQgdGhhdCBhIHN0cnVjdCBpbml0aWFsaXplZCB3aXRoIGB7fWAgb3IgYHswfWAgemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcgYW5kIGFycmF5cy4gSSBhbHNvIHZlcmlmaWVkIHRoYXQgYGt6YWxsb2NgIGRvZXMsIGluIGZhY3QsIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgY2hlY2tlZCB0aGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eCA9IHsgLi4uIH07YCBpbml0aWFsaXphdGlvbiBhcyB3ZWxsOyBhbGwgZmllbGRzIHdlcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gdGhpcyBsb29rcyBzb2xpZC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBmZWF0dXJlIGFkZGl0aW9uIChvciBwZXJoYXBzIGEgYnVnIGZpeCksIHNvIHRoZSBzdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLiBUaGUgYnVmZmVycyBhcmUgZWl0aGVyIHN0YWNrLWFsbG9jYXRlZCBhbmQgemVyb2VkIG9yIGhlYXAtYWxsb2NhdGVkIGFuZCB6ZXJvZWQgdmlhIGBremFsbG9jYCwgYW5kIHRoZSBjb250ZXh0IGl0c2VsZiBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQsIHNvIG5vIGlzc3VlcyBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguMDAzMzI0MDAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTc0NTA5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfY29tcGF0YCBmaWVsZCB0byB0aGUgQlBGIHNvY2tvcHQgY29udGV4dCBhbmQgZW5hYmxlcyBCUEYgaG9va3MgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgc3lzY2FsbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzIGFuZCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMuIFRoZSBidWZmZXJzIHVzZWQgZm9yIEJQRiBzb2Nrb3B0IGhvb2tzIGFyZSBhbGxvY2F0ZWQgdmlhIGBzb2Nrb3B0X2FsbG9jX2J1ZmAsIHdoaWNoIHVzZXMgZWl0aGVyIGEgc3RhY2sgYnVmZmVyIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O2Agb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuIFRoZXJlZm9yZSwgYWxsIG1lbW9yeSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgcGFzc2VkIHRvIGtlcm5lbCBoYW5kbGVycywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIGNvbnRleHQgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggemVyby1maWxsIHRoZSB1bmFzc2lnbmVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODozOC4wMDMzMjk4MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjI4ODQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRjZmEwODU3MzY4ODE5MGM0M2Y5ZDc1NTMwOTkxNjkwZDU5MTQ2YzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxcbkBAIC0xMzgsMTQgKzEzOCwxNSBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxcbiBcXHRcXHRcXHRcXHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbiBcXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGludCAqbGV2ZWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpO1xcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgKmxldmVsLCBpbnQgKm9wdG5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgKm9wdGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcXG4gXFxuLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXR2YWwpO1xcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7XFxuIFxcbiBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCxcXG5AQCAtMzc2LDIxICszNzcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0X19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gfSlcXG4gXFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxcXFxuLVxcdFxcdFxcdFxcdCAgICAgICBrZXJuZWxfb3B0dmFsKVxcdFxcdFxcdCAgICAgICBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpXFx0XFx0ICAgICAgIFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRpbnQgX19yZXQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gXFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsXFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9wdGxlbixcXHQgICAgICAgXFxcXFxcbitcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAga2VybmVsX29wdHZhbCk7ICAgICBcXFxcXFxuIFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIH0pXFxuIFxcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcXFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbWF4X29wdGxlbiwgcmV0dmFsKVxcdFxcdCAgICAgICBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbClcXHQgICAgICAgXFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdGludCBfX3JldCA9IHJldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdCAgICAgICBcXFxcXFxuQEAgLTQwMCw3ICs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHRcXHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcdCAgICAgICBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdGxldmVsLCBvcHRuYW1lKSlcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoXFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0XFx0XFx0c29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLFxcdCAgICAgICBcXFxcXFxuK1xcdFxcdFxcdFxcdHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXFxcXFxcbiBcXHRcXHRcXHRcXHRtYXhfb3B0bGVuLCByZXR2YWwpO1xcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIH0pXFxuQEAgLTUwNCwxMSArNTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhzb2NrX29wcykgKHsgMDsgfSlcXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0RFVklDRV9DR1JPVVAoYXR5cGUsIG1ham9yLCBtaW5vciwgYWNjZXNzKSAoeyAwOyB9KVxcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG9wdGxlbiwgbWF4X29wdGxlbiwgcmV0dmFsKSAoeyByZXR2YWw7IH0pXFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgICBrZXJuZWxfb3B0dmFsKSAoeyAwOyB9KVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfQlBGICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbkBAIC0xNzAyLDYgKzE3MDIsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiB7XFxuIFxcdHMzMlxcdFxcdGxldmVsO1xcbiBcXHRzMzJcXHRcXHRvcHRuYW1lO1xcbiBcXHRzMzJcXHRcXHRvcHRsZW47XFxuK1xcdHMzMlxcdFxcdGlzX2NvbXBhdDtcXG4gXFx0LyogZm9yIHJldHZhbCBpbiBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHggKi9cXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XFxuIFxcdC8qIFRlbXBvcmFyeSBcXFwicmVnaXN0ZXJcXFwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcXG4gXFx0X19zMzJcXHRvcHRuYW1lO1xcbiBcXHRfX3MzMlxcdG9wdGxlbjtcXG4gXFx0X19zMzJcXHRyZXR2YWw7XFxuK1xcdF9fczMyXFx0aXNfY29tcGF0O1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5pbmRleCA4ZmJjOTQyYTFjYzNhLi45MTA4NzhlOTkxYTA0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuQEAgLTIwNTUsNyArMjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxcbiBcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHR2YWwgIT0gYnVmLVxcdTAwM2VkYXRhO1xcbiB9XFxuIFxcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXFxuK2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpXFxuIHtcXG5AQCAtMjA2NSw2ICsyMDY1LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxcbiBcXHRcXHQuc2sgPSBzayxcXG4gXFx0XFx0LmxldmVsID0gKmxldmVsLFxcbiBcXHRcXHQub3B0bmFtZSA9ICpvcHRuYW1lLFxcbitcXHRcXHQuaXNfY29tcGF0ID0gY29tcGF0LFxcbiBcXHR9O1xcbiBcXHRpbnQgcmV0LCBtYXhfb3B0bGVuO1xcbiBcXG5AQCAtMjE0Niw3ICsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXR2YWwpXFxuQEAgLTIxNTcsNiArMjE1OCw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbiBcXHRcXHQuc2sgPSBzayxcXG4gXFx0XFx0LmxldmVsID0gbGV2ZWwsXFxuIFxcdFxcdC5vcHRuYW1lID0gb3B0bmFtZSxcXG4rXFx0XFx0LmlzX2NvbXBhdCA9IGNvbXBhdCxcXG4gXFx0XFx0LmN1cnJlbnRfdGFzayA9IGN1cnJlbnQsXFxuIFxcdH07XFxuIFxcdGludCBvcmlnX29wdGxlbjtcXG5AQCAtMjcwNSw2ICsyNzA3LDkgQEAgc3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdCppbnNuKysgPSBDR19TT0NLT1BUX1JFQURfRklFTEQob3B0bGVuKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpOlxcbitcXHRcXHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKGlzX2NvbXBhdCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcXG4gXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMzQ2LDEwICsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbi1cXHRpZiAoIWNvbXBhdClcXG4tXFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgXFx1MDAyNm9wdGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuK1xcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgY29tcGF0LCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgXFx1MDAyNm9wdGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTI0NDcsOCArMjQ0Niw3IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmICghY29tcGF0KVxcbi1cXHRcXHRjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XFxuK1xcdGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcXG4gXFxuIFxcdG9wcyA9IFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpO1xcbiBcXHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xcbkBAIC0yNDc3LDEwICsyNDc1LDkgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjb21wYXQpXFxuLVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgbGV2ZWwsIG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4rXFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGVycik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTc2MTYsNiArNzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XFxuIFxcdF9fczMyXFx0b3B0bmFtZTtcXG4gXFx0X19zMzJcXHRvcHRsZW47XFxuIFxcdF9fczMyXFx0cmV0dmFsO1xcbitcXHRfX3MzMlxcdGlzX2NvbXBhdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xcbmluZGV4IGVhYWM4M2E3ZjM4OGIuLmM3ZGQyMmQwZTNmODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXFxuQEAgLTIxNSw2ICsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xcbiBcXHRcXHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXFxuIFxcdFxcdC5nZXRfb3B0bGVuID0gMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGVzY3IgPSBcXFwiZ2V0c29ja29wdDogcmVhZCBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogcjYgPSBjdHgtXFx1MDAzZWlzX2NvbXBhdCAqL1xcbitcXHRcXHRcXHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXFxuK1xcdFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxcbitcXG4rXFx0XFx0XFx0LyogaWYgKGN0eC1cXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cXG4rXFx0XFx0XFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2VyZXR2YWwgPSAwICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcXG4rXFx0XFx0XFx0LyogcmV0dXJuIDEgKi9cXG4rXFx0XFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxcbitcXHRcXHRcXHRCUEZfSk1QX0EoMSksXFxuK1xcdFxcdFxcdC8qIH0gZWxzZSB7ICovXFxuK1xcdFxcdFxcdC8qIHJldHVybiAwICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0XFx0LyogfSAqL1xcbitcXHRcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdH0sXFxuK1xcdFxcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcXG4rXFx0XFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxcbitcXG4rXFx0XFx0LmdldF9sZXZlbCA9IFNPTF9JUCxcXG4rXFx0XFx0LmdldF9vcHRuYW1lID0gSVBfVE9TLFxcbitcXHRcXHQuZ2V0X29wdGxlbiA9IDEsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2NyID0gXFxcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2Vpc19jb21wYXQgPSAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5lcnJvciA9IERFTllfTE9BRCxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzY3IgPSBcXFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cXHUwMDNlb3B0bmFtZVxcXCIsXFxuIFxcdFxcdC5pbnNucyA9IHtcXG5AQCAtNjA5LDYgKzY1Miw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XFxuIFxcdFxcdC5nZXRfb3B0dmFsID0geyAxIFxcdTAwM2NcXHUwMDNjIDMgfSxcXG4gXFx0XFx0LmdldF9vcHRsZW4gPSAxLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5kZXNjciA9IFxcXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cXHUwMDNlaXNfY29tcGF0XFxcIixcXG4rXFx0XFx0Lmluc25zID0ge1xcbitcXHRcXHRcXHQvKiByNiA9IGN0eC1cXHUwMDNlaXNfY29tcGF0ICovXFxuK1xcdFxcdFxcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcXG4rXFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXFxuK1xcbitcXHRcXHRcXHQvKiBpZiAoY3R4LVxcdTAwM2Vpc19jb21wYXQgPT0gMCkgeyAqL1xcbitcXHRcXHRcXHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxcbitcXHRcXHRcXHQvKiBjdHgtXFx1MDAzZW9wdGxlbiA9IC0xICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksXFxuK1xcdFxcdFxcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcXG4rXFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXFxuK1xcdFxcdFxcdC8qIHJldHVybiAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX0pNUF9BKDEpLFxcbitcXHRcXHRcXHQvKiB9IGVsc2UgeyAqL1xcbitcXHRcXHRcXHQvKiByZXR1cm4gMCAqL1xcbitcXHRcXHRcXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXFxuK1xcdFxcdFxcdC8qIH0gKi9cXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5zZXRfb3B0bmFtZSA9IDEyMyxcXG4rXFx0XFx0LnNldF9vcHRsZW4gPSAxLFxcbitcXHRcXHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2NyID0gXFxcInNldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2Vpc19jb21wYXQgPSAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5lcnJvciA9IERFTllfTE9BRCxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzY3IgPSBcXFwic2V0c29ja29wdDogcmVhZCBjdHgtXFx1MDAzZW9wdGxlblxcXCIsXFxuIFxcdFxcdC5pbnNucyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguNTA2NDQzMTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE4Mjg2NjgyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQ09NUEFUXCIsXG4gICAgXCJJQTMyX0VNVUxBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRcIixcbiAgICBcIl9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfc2V0c29ja29wdFwiLFxuICAgIFwiZG9fc29ja19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBjZ3JvdXAgc29ja29wdCBob29rcyB0byBleGVjdXRlIEJQRiBwcm9ncmFtcyBmb3IgY29tcGF0IHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgc3lzY2FsbHMuIFByZXZpb3VzbHksIEJQRiBjZ3JvdXAgcHJvZ3JhbXMgd2VyZSBieXBhc3NlZCBmb3IgY29tcGF0IHN5c2NhbGxzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIEJQRiBjZ3JvdXAgc29ja29wdCBob29rcyB0byBjb21wYXQgc3lzY2FsbHMuIFRoZSBgaXNfY29tcGF0YCBmbGFnIGlzIGFsc28gYWRkZWQgdG8gdGhlIEJQRiBjb250ZXh0IGFuZCBjYW4gYmUgcmVhZCBieSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgY29tcGF0IHNvY2tldCBvcHRpb24gaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZmEwODU3MzY4ODE5MGM0M2Y5ZDc1NTMwOTkxNjkwZDU5MTQ2YzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbkBAIC0xMzgsMTQgKzEzOCwxNSBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxuIFx0XHRcdFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGludCAqbGV2ZWwsXG4tXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLVx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCk7XG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGJvb2wgY29tcGF0LFxuK1x0XHRcdFx0ICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSxcbitcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgKm9wdGxlbixcbitcdFx0XHRcdCAgICAgICBjaGFyICoqa2VybmVsX29wdHZhbCk7XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tXHRcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IG1heF9vcHRsZW4sXG4tXHRcdFx0XHQgICAgICAgaW50IHJldHZhbCk7XG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCxcbitcdFx0XHRcdCAgICAgICBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuK1x0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG4rXHRcdFx0XHQgICAgICAgaW50IG1heF9vcHRsZW4sIGludCByZXR2YWwpO1xuIFxuIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHRcdCAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLFxuQEAgLTM3NiwyMSArMzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBrZXJuZWxfb3B0dmFsKVx0XHRcdCAgICAgICBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxuK1x0XHRcdFx0ICAgICAgIG9wdGxlbiwga2VybmVsX29wdHZhbClcdFx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IDA7XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuIFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcdFx0ICAgICAgIFxcXG4tXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCxcdCAgICAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bGVuLFx0ICAgICAgIFxcXG4rXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBjb21wYXQsICAgICAgIFxcXG4rXHRcdFx0XHRcdFx0XHQgICBsZXZlbCwgb3B0bmFtZSwgICAgIFxcXG4rXHRcdFx0XHRcdFx0XHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXG4gXHRcdFx0XHRcdFx0XHQgICBrZXJuZWxfb3B0dmFsKTsgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpXHRcdCAgICAgICBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxuK1x0XHRcdFx0ICAgICAgIG9wdGxlbiwgbWF4X29wdGxlbiwgcmV0dmFsKVx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IHJldHZhbDtcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX0dFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuQEAgLTQwMCw3ICs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFx0ICAgICAgIFxcXG4gXHRcdFx0XHRcdGxldmVsLCBvcHRuYW1lKSlcdFx0ICAgICAgIFxcXG4gXHRcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KFx0ICAgICAgIFxcXG4tXHRcdFx0XHRzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sXHQgICAgICAgXFxcbitcdFx0XHRcdHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXFxcbiBcdFx0XHRcdG1heF9vcHRsZW4sIHJldHZhbCk7XHRcdFx0ICAgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbkBAIC01MDQsMTEgKzUwNSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhzb2NrX29wcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NZU0NUTChoZWFkLHRhYmxlLHdyaXRlLGJ1Zixjb3VudCxwb3MpICh7IDA7IH0pXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHRcdCAgICBvcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbiBcdFx0XHRcdCAgICAgICBrZXJuZWxfb3B0dmFsKSAoeyAwOyB9KVxuIFxuICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCA0YTliYzZhODQ4ZjJlLi41YWI3ZDYwNmFlYTUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTE3MDIsNiArMTcwMiw3IEBAIHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcbiBcdHMzMlx0XHRsZXZlbDtcbiBcdHMzMlx0XHRvcHRuYW1lO1xuIFx0czMyXHRcdG9wdGxlbjtcbitcdHMzMlx0XHRpc19jb21wYXQ7XG4gXHQvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqL1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XG4gXHQvKiBUZW1wb3JhcnkgXCJyZWdpc3RlclwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTc2MTYsNiArNzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuK1x0X19zMzJcdGlzX2NvbXBhdDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMjA1NSw3ICsyMDU1LDcgQEAgc3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wdHZhbCAhPSBidWYtXHUwMDNlZGF0YTtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuK2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbClcbiB7XG5AQCAtMjA2NSw2ICsyMDY1LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0XHQuc2sgPSBzayxcbiBcdFx0LmxldmVsID0gKmxldmVsLFxuIFx0XHQub3B0bmFtZSA9ICpvcHRuYW1lLFxuK1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0fTtcbiBcdGludCByZXQsIG1heF9vcHRsZW47XG4gXG5AQCAtMjE0Niw3ICsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLFxuIFx0XHRcdFx0ICAgICAgIGludCByZXR2YWwpXG5AQCAtMjE1Nyw2ICsyMTU4LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdC5zayA9IHNrLFxuIFx0XHQubGV2ZWwgPSBsZXZlbCxcbiBcdFx0Lm9wdG5hbWUgPSBvcHRuYW1lLFxuK1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbiBcdH07XG4gXHRpbnQgb3JpZ19vcHRsZW47XG5AQCAtMjcwNSw2ICsyNzA3LDkgQEAgc3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRlbHNlXG4gXHRcdFx0Kmluc24rKyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pO1xuIFx0XHRicmVhaztcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpOlxuK1x0XHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKGlzX2NvbXBhdCk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIHJldHZhbCk6XG4gXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgYnBmX2NnX3J1bl9jdHgsIHJ1bl9jdHgpICE9IDApO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggNjNjNjlhMGZhNzRlMS4uZjQ1NDk5NzVmOThiOSAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtMjM0NiwxMCArMjM0Niw5IEBAIGludCBkb19zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmtlcm5lbF9vcHR2YWwpO1xuK1x0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGNvbXBhdCwgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4rXHRcdFx0XHRcdCAgICAgb3B0dmFsLCBcdTAwMjZvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMjQ0Nyw4ICsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbitcdGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xuIFxuIFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XG5AQCAtMjQ3NywxMCArMjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuK1x0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsXG4rXHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4rXHRcdFx0XHRcdCAgICAgZXJyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcbiBcdF9fczMyXHRvcHRuYW1lO1xuIFx0X19zMzJcdG9wdGxlbjtcbiBcdF9fczMyXHRyZXR2YWw7XG4rXHRfX3MzMlx0aXNfY29tcGF0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmNcbmluZGV4IGVhYWM4M2E3ZjM4OGIuLmM3ZGQyMmQwZTNmODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuQEAgLTIxNSw2ICsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xuIFx0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbitcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcbitcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4rXHRcdFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcbitcdFx0XHQvKiBjdHgtXHUwMDNlcmV0dmFsID0gMCAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcbitcdFx0XHQvKiByZXR1cm4gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfSk1QX0EoMSksXG4rXHRcdFx0LyogfSBlbHNlIHsgKi9cbitcdFx0XHQvKiByZXR1cm4gMCAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0XHQvKiB9ICovXG4rXHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0XHR9LFxuK1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4rXHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcbitcdFx0LmdldF9sZXZlbCA9IFNPTF9JUCxcbitcdFx0LmdldF9vcHRuYW1lID0gSVBfVE9TLFxuK1x0XHQuZ2V0X29wdGxlbiA9IDEsXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGVzY3IgPSBcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiBjdHgtXHUwMDNlaXNfY29tcGF0ID0gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1xuK1x0XHQuZXJyb3IgPSBERU5ZX0xPQUQsXG4rXHR9LFxuIFx0e1xuIFx0XHQuZGVzY3IgPSBcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlb3B0bmFtZVwiLFxuIFx0XHQuaW5zbnMgPSB7XG5AQCAtNjA5LDYgKzY1Miw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XG4gXHRcdC5nZXRfb3B0dmFsID0geyAxIFx1MDAzY1x1MDAzYyAzIH0sXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwic2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbitcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcbitcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4rXHRcdFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcbitcdFx0XHQvKiBjdHgtXHUwMDNlb3B0bGVuID0gLTEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLTEpLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIG9wdGxlbikpLFxuK1x0XHRcdC8qIHJldHVybiAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9KTVBfQSgxKSxcbitcdFx0XHQvKiB9IGVsc2UgeyAqL1xuK1x0XHRcdC8qIHJldHVybiAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdC8qIH0gKi9cbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1xuK1x0XHQuc2V0X29wdG5hbWUgPSAxMjMsXG4rXHRcdC5zZXRfb3B0bGVuID0gMSxcbitcdFx0LmlvX3VyaW5nX3N1cHBvcnQgPSB0cnVlLFxuK1x0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwiLFxuK1x0XHQuaW5zbnMgPSB7XG4rXHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXG4rXHRcdFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxuK1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4rXHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0XHR9LFxuK1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4rXHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcbitcdFx0LmVycm9yID0gREVOWV9MT0FELFxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2VvcHRsZW5cIixcbiBcdFx0Lmluc25zID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguNTA2NDQ1MTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4MDg4NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGJlaGF2ZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBjb21wYXRgIGZsYWcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGEgY2FyZWZ1bCBsb29rLiBMZXQncyBzZWUuLi5cblxuRnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGNsZWFyIHRoaXMgdG91Y2hlcyB0aGUgY29yZSBCUEYgY2dyb3VwIGluZnJhc3RydWN0dXJlIGluIGBicGYtY2dyb3VwLmhgIGFuZCBgY2dyb3VwLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQncyBhbHNvIG1vZGlmeWluZyBgc29ja2V0LmNgLCB3aGljaCBpcyB3aGVyZSB0aGUgc3lzY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBjcnVjaWFsbHksIGFkZGluZyBgaXNfY29tcGF0YCB0byB0aGUgYGJwZl9zb2Nrb3B0YCBzdHJ1Y3R1cmUuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBCUEYgcHJvZ3JhbXMgd2lsbCBub3cgYmUgaW52b2tlZCBpbiB0aGUgY29udGV4dCBvZiBgY29tcGF0YCBzeXN0ZW0gY2FsbHMuIFRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBpbiBgc29ja29wdC5jYCBpcyBpbXBvcnRhbnQsIHRob3VnaCwgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCByZW1vdmluZyB0aGUgYGlmICghY29tcGF0KWAgY2hlY2tzIGluIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gIFllcywgdGhlIGNvZGUgY29uZmlybXMgbXkgc3VzcGljaW9uLiBUaGUgcGF0Y2ggbm93IHVuY29uZGl0aW9uYWxseSBleGVjdXRlcyBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYCBhbmQgYEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVGAgcmVnYXJkbGVzcyBvZiB0aGUgYGNvbXBhdGAgZmxhZydzIHN0YXRlLCBhZnRlciBjaGVja2luZyBgbmV0L3NvY2tldC5jYCB0byBzZWUgaWYgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSBgY29tcGF0YCBhcyB3ZWxsLCBhcyB3aXRoIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBUaGlzIG1lYW5zIHRoYXQgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0ICpjb21wYXQqIHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgY2FsbHMuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuXG5cblRoaXMgb3BlbnMgdXAgYSBuZXcgc2V0IG9mIGNhcGFiaWxpdGllcyBmb3IgQlBGIHByb2dyYW1zLCBidXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGF0dGFjayB2ZWN0b3IuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0ZXN0IGNhcmVmdWxseS5cblxuTm93LCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSdkIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGFuIG9idmlvdXMgcHJlcmVxdWlzaXRlLiAgU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNvbXBhdCBzeXNjYWxscywgYENPTkZJR19DT01QQVRgIHdpbGwgYWxzbyBiZSByZXF1aXJlZC4gIExvb2tpbmcgYXQgdGhlIGBuZXQvc29ja2V0LmNgLCBJIHNlZSB0aGF0IGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGluZGVlZCBjYWxsZWQgYnkgYm90aCBgX19zeXNfc2V0c29ja29wdGAgYW5kIGBfX2NvbXBhdF9zeXNfc2V0c29ja29wdGAsIGNlbWVudGluZyB0aGUgaW1wb3J0YW5jZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjQ3Ljk4NzMzMzEzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zb2NrZXQuYz0yMzMwPXN0YXRpYyBib29sIHNvY2tfdXNlX2N1c3RvbV9zb2xfc29ja2V0KGNvbnN0IHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc29ja2V0LmMtMjMzNC1cXG5uZXQvc29ja2V0LmM6MjMzNTppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxubmV0L3NvY2tldC5jLTIzMzYtXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3NvY2tldC5jLTIzNzItfVxcbm5ldC9zb2NrZXQuYzoyMzczOkVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcXG5uZXQvc29ja2V0LmMtMjM3NC1cXG4tLVxcbm5ldC9zb2NrZXQuYz0yMzc4PWludCBfX3N5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKnVzZXJfb3B0dmFsLFxcbi0tXFxubmV0L3NvY2tldC5jLTIzOTEtXFxubmV0L3NvY2tldC5jOjIzOTI6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3NvY2tldC5jLTIzOTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODo0OC4wMzU2NzUwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUzNDQxMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHNldHNvY2tvcHRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGNvbmNlcm5lZCB3aXRoLCBhbmQgSSBrbm93IGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYF9fc3lzX3NldHNvY2tvcHRgIHN5c3RlbSBjYWxsIGhhbmRsZXIuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQgZnJvbSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgKmNhbGxpbmcqIGBfX3N5c19zZXRzb2Nrb3B0YC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYmVpbmcgY29uZmlndXJlZCBmcm9tIHRoZSB1c2VyIHNwYWNlLiBMZXQncyBzZWUgd2hvJ3MgbWFraW5nIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjUyLjA4OTEyMDE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N5c19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc29ja2V0LmM9MjM3Mz1FWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XFxuLS1cXG5uZXQvc29ja2V0LmMtMjM3Ny0gKi9cXG5uZXQvc29ja2V0LmM6MjM3ODppbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcXG5uZXQvc29ja2V0LmMtMjM3OS1cXHRcXHQgICAgIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvc29ja2V0LmM9MjM5NT1TWVNDQUxMX0RFRklORTUoc2V0c29ja29wdCwgaW50LCBmZCwgaW50LCBsZXZlbCwgaW50LCBvcHRuYW1lLFxcbi0tXFxubmV0L3NvY2tldC5jLTIzOTcte1xcbm5ldC9zb2NrZXQuYzoyMzk4OlxcdHJldHVybiBfX3N5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9zb2NrZXQuYy0yMzk5LX1cXG4tLVxcbm5ldC9zb2NrZXQuYz0zMTcwPVNZU0NBTExfREVGSU5FMihzb2NrZXRjYWxsLCBpbnQsIGNhbGwsIHVuc2lnbmVkIGxvbmcgX191c2VyICosIGFyZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmMtMzI0Ni1cXHRjYXNlIFNZU19TRVRTT0NLT1BUOlxcbm5ldC9zb2NrZXQuYzozMjQ3OlxcdFxcdGVyciA9IF9fc3lzX3NldHNvY2tvcHQoYTAsIGExLCBhWzJdLCAoY2hhciBfX3VzZXIgKilhWzNdLFxcbm5ldC9zb2NrZXQuYy0zMjQ4LVxcdFxcdFxcdFxcdCAgICAgICBhWzRdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6NTIuMTM2OTU5NzgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyODEzMjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIEtlcm5lbCBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBhIHNwZWNpZmljIHNvY2tldCBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdoZXJlIGBjb21wYXRgIGlzIHN1cHBvc2VkIHRvIGJlIHBhc3NlZCB0byBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLCByaWdodD8gSG1tLCBoYW5nIG9uIGEgc2Vjb25kLi4uIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBgX19zeXNfc2V0c29ja29wdGDigKYgbm9wZSwgaXQgZG9lc24ndCBldmVuICp0YWtlKiBhIGBjb21wYXRgIHBhcmFtZXRlciBkaXJlY3RseS4gVGhhdCdzIG9kZC5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cCBhIGJpdC4gU2luY2UgYF9fc3lzX3NldHNvY2tvcHRgIGlzIG9idmlvdXNseSB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlciwgdGhlcmUgbXVzdCBiZSBhbiBpbnRlcm1lZGlhdGUgZnVuY3Rpb24gY2FsbCB3aXRoaW4gaXQgdG8gaGFuZGxlIHRoZSBjb3JlIGxvZ2ljLiBPa2F5LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQgc291bmRzIHJpZ2h0LiBTbywgKnRoYXQncyogcHJvYmFibHkgd2hlcmUgYGNvbXBhdGAgaXMgZWl0aGVyIGJlaW5nIHVzZWQsIG9yIGJlaW5nIHBhc3NlZCBmdXJ0aGVyIGFsb25nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIGRpZyBpbnRvIGBfX3N5c19zZXRzb2Nrb3B0YCB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODo1Ni4xNjUwOTQ2NDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNzgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNzg6XFx0aW50IF9fc3lzX3NldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqdXNlcl9vcHR2YWwsXFxuMjM3OTpcXHRcXHRcXHQgICAgIGludCBvcHRsZW4pXFxuMjM4MDpcXHR7XFxuMjM4MTpcXHRcXHRzb2NrcHRyX3Qgb3B0dmFsID0gVVNFUl9TT0NLUFRSKHVzZXJfb3B0dmFsKTtcXG4yMzgyOlxcdFxcdGJvb2wgY29tcGF0ID0gaW5fY29tcGF0X3N5c2NhbGwoKTtcXG4yMzgzOlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuMjM4NDpcXHRcXHRDTEFTUyhmZCwgZikoZmQpO1xcbjIzODU6XFx0XFxuMjM4NjpcXHRcXHRpZiAoZmRfZW1wdHkoZikpXFxuMjM4NzpcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbjIzODg6XFx0XFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZkX2ZpbGUoZikpO1xcbjIzODk6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcXG4yMzkwOlxcdFxcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuMjM5MTpcXHRcXG4yMzkyOlxcdFxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjIzOTM6XFx0fVxcbjIzOTQ6XFx0XFxuMjM5NTpcXHRTWVNDQUxMX0RFRklORTUoc2V0c29ja29wdCwgaW50LCBmZCwgaW50LCBsZXZlbCwgaW50LCBvcHRuYW1lLFxcbjIzOTY6XFx0XFx0XFx0Y2hhciBfX3VzZXIgKiwgb3B0dmFsLCBpbnQsIG9wdGxlbilcXG4yMzk3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6NTYuMTY1MzI3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk0MTY1MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTZXRzb2Nrb3B0IENvbXBhdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYGluX2NvbXBhdF9zeXNjYWxsKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgY29tcGF0YCBzeXN0ZW0gY2FsbC4gVGhlIGV4aXN0aW5nIGBfX3N5c19zZXRzb2Nrb3B0YCBvYnZpb3VzbHkgaGFuZGxlcyBib3RoIGBjb21wYXRgIGFuZCBub24tYGNvbXBhdGAgY2FsbHMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCB0byBpbnZva2UgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgYW5kIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLCAqcmVnYXJkbGVzcyogb2Ygd2hldGhlciBgY29tcGF0YCBpcyB0cnVlLlxuXG5FZmZlY3RpdmVseSwgdGhpcyBtZWFucyB0aGF0IEJQRiBjZ3JvdXAgcHJvZ3JhbXMgY2FuIG5vdyBpbnRlcmNlcHQgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgY2FsbHMsIGV2ZW4gd2hlbiB0aGV5J3JlIGNvbWluZyBmcm9tIGEgYGNvbXBhdGAgY29udGV4dC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmaWx0ZXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZXNlIG9sZGVyIHN5c3RlbSBjYWxscyBpbiBhIGNncm91cCBjb250ZXh0LCB3aGljaCB3YXMgcHJldmlvdXNseSBub3QgcG9zc2libGUuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyBjaGFuZ2UgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhcyBhIGJhc2UgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gQW5kLCBzaW5jZSB0aGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGBpbl9jb21wYXRfc3lzY2FsbCgpYCByZXR1cm5pbmcgYHRydWVgIHVuZGVyIHRoZSByaWdodCBjaXJjdW1zdGFuY2VzLCBgQ09ORklHX0NPTVBBVGAgaXMgY2xlYXJseSBnb2luZyB0byBiZSBlc3NlbnRpYWwgYXMgd2VsbC5cblxuTmV4dCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIHRvIHNlZSB0aGUgZXhhY3QgZGV0YWlscyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGludGVyY2VwdGVkIGFuZCBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MDEuNzU5NDk2MDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU5ODUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0yMDUyPXN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMDU3LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjA1ODppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjA1OS1cXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOTowMS44MTIxMDcyNjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNTA1NzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgQlBGIFNvY2tldCBGaWx0ZXJpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhhdCBzZXQgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBCUEYgZmlsdGVyaW5nIGlzIGludGVncmF0ZWQgd2l0aCBzb2NrZXQgb3B0aW9ucywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkgdGhvdWdodCBJIHJlbWVtYmVyZWQgc2VlaW5nIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgdGhhdCBmYW1pbHkgYXMgaW50ZXJuYWwsIGJ1dCBpcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCdzIGRlZmluZWTigKYgcmlnaHQsIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gT2theSwgc28gaXTigJlzIG5vdCAqbGlrZWx5KiB0byBiZSBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBpdCdzIGdvdCB0aGUgYHN0YXRpY2Aga2V5d29yZCBhdHRhY2hlZCB0byBpdCwganVzdCB0byBiZSBzdXJlLi4uIG5vcGUsIG5vIGBzdGF0aWNgLiBMZXQncyBnZXQgdG8gd29yayBjaGVja2luZyBvdXQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDUxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA3LjI0NzE2Nzc2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1OTc1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MjA1OD1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTQ5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjE1MDppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTUxLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjIzNS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIyMzY6aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyMzctXFx0XFx0XFx0XFx0XFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyNTEtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjUyOlxcdC8qIE5vdGUgdGhhdCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0IGRvZXNuJ3QgY29weVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1My1cXHQgKiB1c2VyIGRhdGEgYmFjayBpbnRvIEJQRiBidWZmZXIgd2hlbiByZXZhbCAhPSAwLiBUaGlzIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA3LjI5Njc3MTAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ4MDk4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsIGluIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGV5J3JlIG5vdCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gYENPTkZJR19DR1JPVVBfQlBGYCBpcyB0aGUgb2J2aW91cyBrZXkgZW5hYmxpbmcgZmFjdG9yLiBCdXQgdG8gZXhwbG9yZSBtb3JlIGNvZGUsIEknbGwgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0NPTVBBVGAgaXMgY3JpdGljYWwgdG8gdHJpZ2dlciB0aGUgXCJjb21wYXRcIiBwYXRoLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19DT01QQVRgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0IGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB1c3VhbGx5IHRlbGxzIG1lIHRoYXQgYENPTkZJR19DT01QQVRgIHRlbmRzIHRvIGJlIGVuYWJsZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDMyLWJpdCBiaW5hcmllcy4gVG8gY29uZmlybSB0aGlzLCBJJ2xsIGNvbnN1bHQgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCByZXF1aXJlbWVudHMgZm9yIGBDT05GSUdfQ09NUEFUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MTMuNjQ0ODczNjg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU5MTc2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVQkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTc0Nj1jb25maWcgQVJNNjRfVEFHR0VEX0FERFJfQUJJXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cXG5hcmNoL2FybTY0L0tjb25maWc6MTc1NTptZW51Y29uZmlnIENPTVBBVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzU2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgRUwwXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MzA3OD1jb25maWcgTUlQUzMyX0NPTVBBVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cXG5hcmNoL21pcHMvS2NvbmZpZzozMDgxOmNvbmZpZyBDT01QQVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zMDgyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9MzU4PXNvdXJjZSBcXFwia2VybmVsL0tjb25maWcuaHpcXFwiXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNTktXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxcbmFyY2gvcGFyaXNjL0tjb25maWctMzYxLVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXFxcIlxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XFxuYXJjaC9zcGFyYy9LY29uZmlnLTQ0OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6NDQ5OmNvbmZpZyBDT01QQVRcXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MzExND1jb25maWcgQ09NUEFUXzMyXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTktXFxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjEtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToxNi4xMDQwNTcwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NjM1Nzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uIGZvciBDT01QQVQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBDT01QQVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gcmVjYWxsaW5nIHRoYXQgb24geDg2LCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09NUEFUYCBhcHBlYXJzIHRvIGJlIGEgYGRlZl9ib29sIHlgIChkZWZpbmVkIGJvb2xlYW4gJ3llcycpIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhlIHJlbGV2YW50IGNvbmRpdGlvbnMgYXJlIGlmIGVpdGhlciBgSUEzMl9FTVVMQVRJT05gICgzMi1iaXQgZW11bGF0aW9uIHN1cHBvcnQpIG9yIGBYODZfWDMyX0FCSWAgKHgzMiBBQkkgc3VwcG9ydCkgaXMgZW5hYmxlZC4gU28sIGluIG90aGVyIHdvcmRzLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggb2xkZXIgMzItYml0IGFwcGxpY2F0aW9ucyBvbiBhIDY0LWJpdCBzeXN0ZW0sIG9yIHRoZSB4MzIgQUJJLCB3ZSBsaWtlbHkgd2FudCBgQ09NUEFUYCB0byBiZSBlbmFibGVkLCBoZW5jZSB0aGUgJ3knLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGRpcmVjdGx5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQgbWUgcXVpY2tseSBnbyBjaGVjayBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25kaXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToyMS4xOTA0MTc0MjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzExNTpcXHRcXHRkZWZfYm9vbCB5XFxuMzExNjpcXHRcXHRkZXBlbmRzIG9uIElBMzJfRU1VTEFUSU9OIHx8IFg4Nl8zMlxcbjMxMTc6XFx0XFx0c2VsZWN0IEhBVkVfVUlEMTZcXG4zMTE4OlxcdFxcdHNlbGVjdCBPTERfU0lHU1VTUEVORDNcXG4zMTE5OlxcdFxcbjMxMjA6XFx0Y29uZmlnIENPTVBBVFxcbjMxMjE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjMxMjI6XFx0XFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfWDMyX0FCSVxcbjMxMjM6XFx0XFxuMzEyNDpcXHRjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXFxuMzEyNTpcXHRcXHRkZWZfYm9vbCB5XFxuMzEyNjpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbjMxMjc6XFx0XFxuMzEyODpcXHRlbmRtZW51XFxuMzEyOTpcXHRcXG4zMTMwOlxcdGNvbmZpZyBIQVZFX0FUT01JQ19JT01BUFxcbjMxMzE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjMxMzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfMzJcXG4zMTMzOlxcdFxcbjMxMzQ6XFx0c291cmNlIFxcXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MjEuMTkwNTY1NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDI1ODcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYENPTVBBVGAgZnVuY3Rpb25hbGl0eSBvbiB4ODYgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYElBMzJfRU1VTEFUSU9OYCBpcyBhY3RpdmUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYXJjaGl0ZWN0dXJlcyBvZnRlbiByZWxpZXMgb24gdGhpcyBraW5kIG9mIGNvbmRpdGlvbmFsIGVuYWJsaW5nLiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBib3RoIGBDR1JPVVBfQlBGYCBhbmQgYENPTVBBVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGlzIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IG91ciBidWlsZHMgYW5kIGNvbmZpZ3VyYXRpb25zIGxldmVyYWdlIHRoZSBhcHByb3ByaWF0ZSBmZWF0dXJlcy5cblxuSGFuZyBvbiBhIHNlY29uZOKApkkgc2VlIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJ3QganVzdCBlbmFibGUgZmVhdHVyZXMsIGl0J3MgKm1vZGlmeWluZyogY29yZSBCUEYgY29kZSB3aXRoaW4gdGhlIGNncm91cCBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGludGVyYWN0aW9uIG9mIHNvY2tldCBvcHRpb25zIGFuZCB0aGUgY2dyb3VwIEJQRi4gVGhpcyBjb3VsZCBiZSBhYm91dCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMuIEl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBhbmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MjYuNDkzMTU2MjM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM0NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MjYwNj1zdGF0aWMgYm9vbCBjZ19zb2Nrb3B0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY3OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI2ODA6c3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4MS1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc3MD1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc3Mi1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBjZ19zb2Nrb3B0X2lzX3ZhbGlkX2FjY2VzcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NzM6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzc0LVxcdC5nZW5fcHJvbG9ndWVcXHRcXHQ9IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToyNi41NDY1MDg3MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MDIxMjQ3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpcyBzdGF0aWMsIHNvIGRlZmluaXRlbHkgbm8gbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGF04oCZcyBhIG5vLWJyYWluZXIuIE5vdywgdGhlIGtleSBmdW5jdGlvbnMgdG8gemVybyBpbiBvbiBhcmU6IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLlxuXG5XYWl0IGEgbWludXRlLi4uIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgbmV0L3NvY2tldC5jYCwgYW5kIHRoZXkncmUgbm90IHN0YXRpYzsgdGhleSdyZSBleHBvcnRlZC4gUGVyZmVjdC4gVGhhdCdzIGdvb2QgaW50ZWwuIExldCdzIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBBbHJpZ2h0LCBgX19zeXNfc2V0c29ja29wdGAgYW5kIGBfX3N5c19nZXRzb2Nrb3B0YCBhcmUgaW4gdGhlIHBpY3R1cmUgdG9vLCBidXQgdGhleSdyZSBqdXN0IHRoaW4gd3JhcHBlcnMuIFNvLCBzdGljayB3aXRoIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhleSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IGBDR1JPVVBfQlBGYC4gWXVwLCB0aGF0J3MgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWU6IGBDT05GSUdfQ0dST1VQX0JQRmAuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgc3ltYm9scy5cblxuQWxyaWdodCwgdGltZSBmb3IgYSBjb25jaXNlIHN1bW1hcnkuXG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6XG4gICAgKiAgIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YFxuICAgICogICBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGBcbiAgICAqICAgYGRvX3NvY2tfc2V0c29ja29wdGBcbiAgICAqICAgYGRvX3NvY2tfZ2V0c29ja29wdGBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYENHUk9VUF9CUEZgXG4gICAgKiAgIGBDT01QQVRgIChpbXBvcnRhbnQgZm9yIGV4ZXJjaXNpbmcgdGhlIGNvbXBhdCBwYXRocylcblxuKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MuIEl0IG5vdyBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgZm9yICpjb21wYXQqIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLCB3aGVyZWFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IGJ5cGFzc2VkLiBUaGF0J3MgYSBodWdlIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdyBleHBvc2luZyB0aG9zZSBob29rcyB0byBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgc28gaXQncyBjcml0aWNhbCB0byBmdXp6IHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9ucy4gQWRkaW5nIHRoZSBgaXNfY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgY29udGV4dCBpcyBhbHNvIHNpZ25pZmljYW50LiBUaGF0J3MgYW5vdGhlciBwb3RlbnRpYWwgdmVjdG9yIGZvciBmdXp6aW5nLlxuXG5PaywganVzdCBxdWlja2x5IHZlcmlmeWluZyBgZG9fc29ja19nZXRzb2Nrb3B0YC4gQWxsIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjQzLjM0ODYzNzU5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzOTgyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NvY2tfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NvY2tldC5jPTI0MTA9c3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvc29ja2V0LmMtMjQzNS1cXG5uZXQvc29ja2V0LmM6MjQzNjppbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxubmV0L3NvY2tldC5jLTI0MzctXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbi0tXFxubmV0L3NvY2tldC5jLTI0ODMtfVxcbm5ldC9zb2NrZXQuYzoyNDg0OkVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG5uZXQvc29ja2V0LmMtMjQ4NS1cXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDkwPWludCBfX3N5c19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNTAxLVxcbm5ldC9zb2NrZXQuYzoyNTAyOlxcdHJldHVybiBkb19zb2NrX2dldHNvY2tvcHQoc29jaywgaW5fY29tcGF0X3N5c2NhbGwoKSwgbGV2ZWwsIG9wdG5hbWUsXFxubmV0L3NvY2tldC5jLTI1MDMtXFx0XFx0XFx0XFx0IFVTRVJfU09DS1BUUihvcHR2YWwpLCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjQzLjc2MjYyNjExOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1ODYwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBCUEYgQ2dyb3VwIFNvY2tvcHQgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSBjb25maXJtZWQgdGhhdCBgZG9fc29ja19nZXRzb2Nrb3B0YCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgQlBGIGNncm91cCBzb2Nrb3B0IGZ1bmN0aW9uYWxpdHkuIExldCBtZSBzZWUuLi4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIGFueSBCUEYgdXNhZ2UsIHNvIHRoYXQncyBkZWZpbml0ZWx5IG9uIHRoZSBjaGVja2xpc3QuIFRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHNwZWNpZmljYWxseSBuZWVkZWQgdG8gc3VwcG9ydCBCUEYgd2l0aCBjZ3JvdXBzLiBBbmQgd2FpdCwgdGhhdCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGFsc28gYENPTkZJR19DR1JPVVBTYC4gR290IGl0LiBTbywgdG8gZ2V0IHRoaXMgd29ya2luZywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHRocmVlIGFyZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NDguNjI4NDg5MDIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzMDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1NC1cXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzU2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NDguNjc2NjIzOTUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTgzNjU0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2AgZm9yIGBDR1JPVVBfQlBGYDpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBDR1JPVVBfQlBGKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUga2VybmVsLCBhbmQgYENHUk9VUF9CUEZgIGlzIGEgZnVuZGFtZW50YWwgZmVhdHVyZSwgc28gdGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dHMgb3IgY29tbWVudHMgdGhhdCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCwgYXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjU0LjE3NDk5MTYzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTU6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzU2OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU3OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU4OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM1OTpcXHRcXHRoZWxwXFxuMTM2MDpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzYxOlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2NDpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NTQuMTc1MTYyMzA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODkxODI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHRhY2tsaW5nIHRoaXMga2VybmVsIGNvbmZpZyBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ0dST1VQX0JQRmAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQlBGX1NZU0NBTExgLCBzbyBJJ2xsIGluY2x1ZGUgYm90aCwganVzdCB0byBiZSBzYWZlLiAgSSdsbCBhbHNvIHRocm93IGluIGBDR1JPVVBTYCBqdXN0IGluIGNhc2UsIHRob3VnaCBpdCdzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIE5vdywgdGhlIHJlYWwgY29udGVuZGVycyBoZXJlIGFyZSBgQ0dST1VQX0JQRmAgYW5kIGBDT01QQVRgLlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09NUEFUYCBpcyBzdWZmaWNpZW50LCBvciBpZiBJIGFsc28gbmVlZCBgSUEzMl9FTVVMQVRJT05gIGZvciB4ODYgc3lzdGVtcy4gIEFoYSwgYENPTVBBVGAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgd2hpY2ggZGVwZW5kcyBvbiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCBvciBgWDg2X1gzMl9BQklgLiBUaGlzIG1lYW5zIEkgY2FuJ3QganVzdCBlbmFibGUgYENPTVBBVGAgZGlyZWN0bHkgb24geDg2OyBJJ20gZ29pbmcgdG8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgSUEzMl9FTVVMQVRJT05gIHRvIHNhdGlzZnkgdGhhdCBkZXBlbmRlbmN5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02NCBhbmQgcG93ZXJwYywgYENPTVBBVGAgc2VlbXMgdG8gYmUgYSByZWd1bGFyIG1lbnVjb25maWcgb3B0aW9uLiBCdXQgb24geDg2LCBpdCdzIHRoYXQgYGRlZl9ib29sIHlgIHRpZWQgdG8gYElBMzJfRU1VTEFUSU9OYC4gU28sIHRvIGJlIGNvbXBsZXRlbHkgc2FmZSBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY292ZXJlZCwgSSdsbCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBDT01QQVRgIGFuZCBgSUEzMl9FTVVMQVRJT05gLiAgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgSUEzMl9FTVVMQVRJT05gIGRlZmluaXRpb24gaW4gYGFyY2gveDg2L0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MDAuNTY0MzQ4OTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY0OTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSUEzMl9FTVVMQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTMwNzg9bWVudSBcXFwiQmluYXJ5IEVtdWxhdGlvbnNcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy0zMDc5LVxcbmFyY2gveDg2L0tjb25maWc6MzA4MDpjb25maWcgSUEzMl9FTVVMQVRJT05cXG5hcmNoL3g4Ni9LY29uZmlnLTMwODEtXFx0Ym9vbCBcXFwiSUEzMiBFbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMwOTAtXFxuYXJjaC94ODYvS2NvbmZpZzozMDkxOmNvbmZpZyBJQTMyX0VNVUxBVElPTl9ERUZBVUxUX0RJU0FCTEVEXFxuYXJjaC94ODYvS2NvbmZpZy0zMDkyLVxcdGJvb2wgXFxcIklBMzIgZW11bGF0aW9uIGRpc2FibGVkIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjAwLjYxNjAwNTExNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQyNjM5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB4ODYgRW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBJQTMyX0VNVUxBVElPTmAgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGZvciB4ODYgZW11bGF0aW9uLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhhdCBkaXJlY3RseSB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBjYXVnaHQgbXkgYXR0ZW50aW9uOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGVudHJ5cG9pbnRzLiBUaGV5J3JlIGFsbCBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgY2FsbHMuIEkgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgYXJlIG5vdyBiZWluZyB0cmlnZ2VyZWQgYnkgY29tcGF0IHN5c2NhbGxzLiBJdCBtYWtlcyBzZW5zZSwgcHJldmlvdXNseSB3ZSB3ZXJlIGJ5cGFzc2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIE5vdywgd2UncmUgY29ycmVjdGx5IGV4cG9zaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgcHJvZ3JhbXMgdG8gdGhvc2UgY29tcGF0IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLiBXZSdyZSBmaWxsaW5nIHRoZSBnYXAuXG5cbkFscmlnaHQsIHdpdGggdGhhdCB1bmRlcnN0YW5kaW5nLCBJJ2xsIGdvIGFoZWFkIGFuZCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBmaW5hbGl6ZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk0NiwiT3V0cHV0VG9rZW5zIjoyMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTAuMjU4NjQ3Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NjA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoxMC4zMzUxMTUzMTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjQyNjc2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTAuMzM1NjcwMDUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzNjQyMTE3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuaW5kZXggNGQwY2M2NTk3NmExNC4uOTQzZWIwMjNiNTJiOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuQEAgLTEzOCwxNCArMTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXG4gXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXG4rXHRcdFx0XHQgICAgICAgaW50ICpsZXZlbCwgaW50ICpvcHRuYW1lLFxuK1x0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLFxuK1x0XHRcdFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbi1cdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKTtcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LFxuK1x0XHRcdFx0ICAgICAgIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4rXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbitcdFx0XHRcdCAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7XG4gXG4gaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0XHRcdFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXG5AQCAtMzc2LDIxICszNzcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuIFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxuLVx0XHRcdFx0ICAgICAgIGtlcm5lbF9vcHR2YWwpXHRcdFx0ICAgICAgIFxcXG4rI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4rXHRcdFx0XHQgICAgICAgb3B0bGVuLCBrZXJuZWxfb3B0dmFsKVx0XHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG4gXHQgICAgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc29jaywgQ0dST1VQX1NFVFNPQ0tPUFQpKVx0XHQgICAgICAgXFxcbi1cdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLFx0ICAgICAgIFxcXG4tXHRcdFx0XHRcdFx0XHQgICBvcHRuYW1lLCBvcHR2YWwsICAgIFxcXG4tXHRcdFx0XHRcdFx0XHQgICBvcHRsZW4sXHQgICAgICAgXFxcbitcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgICAgICAgXFxcbitcdFx0XHRcdFx0XHRcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcbitcdFx0XHRcdFx0XHRcdCAgIG9wdHZhbCwgb3B0bGVuLCAgICAgXFxcbiBcdFx0XHRcdFx0XHRcdCAgIGtlcm5lbF9vcHR2YWwpOyAgICAgXFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuIFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxuLVx0XHRcdFx0ICAgICAgIG1heF9vcHRsZW4sIHJldHZhbClcdFx0ICAgICAgIFxcXG4rI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4rXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpXHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gcmV0dmFsO1x0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfR0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG5AQCAtNDAwLDcgKzQwMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXHQgICAgICAgXFxcbiBcdFx0XHRcdFx0bGV2ZWwsIG9wdG5hbWUpKVx0XHQgICAgICAgXFxcbiBcdFx0XHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoXHQgICAgICAgXFxcbi1cdFx0XHRcdHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbixcdCAgICAgICBcXFxuK1x0XHRcdFx0c29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICBcXFxuIFx0XHRcdFx0bWF4X29wdGxlbiwgcmV0dmFsKTtcdFx0XHQgICAgICAgXFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuQEAgLTUwNCwxMSArNTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKHNvY2tfb3BzKSAoeyAwOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19ERVZJQ0VfQ0dST1VQKGF0eXBlLCBtYWpvciwgbWlub3IsIGFjY2VzcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbiBcdFx0XHRcdCAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbiBcdFx0XHRcdFx0ICAgIG9wdGxlbiwgcmV0dmFsKSAoeyByZXR2YWw7IH0pXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxuIFx0XHRcdFx0ICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pXG4gXG4gI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfQlBGICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRhOWJjNmE4NDhmMmUuLjVhYjdkNjA2YWVhNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTcwMiw2ICsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4ge1xuIFx0czMyXHRcdGxldmVsO1xuIFx0czMyXHRcdG9wdG5hbWU7XG4gXHRzMzJcdFx0b3B0bGVuO1xuK1x0czMyXHRcdGlzX2NvbXBhdDtcbiBcdC8qIGZvciByZXR2YWwgaW4gc3RydWN0IGJwZl9jZ19ydW5fY3R4ICovXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfdGFzaztcbiBcdC8qIFRlbXBvcmFyeSBcInJlZ2lzdGVyXCIgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcbiBcdF9fczMyXHRvcHRuYW1lO1xuIFx0X19zMzJcdG9wdGxlbjtcbiBcdF9fczMyXHRyZXR2YWw7XG4rXHRfX3MzMlx0aXNfY29tcGF0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggOGZiYzk0MmExY2MzYS4uOTEwODc4ZTk5MWEwNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcbisrKyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBzdGF0aWMgYm9vbCBzb2Nrb3B0X2J1Zl9hbGxvY2F0ZWQoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbiBcdHJldHVybiBjdHgtXHUwMDNlb3B0dmFsICE9IGJ1Zi1cdTAwM2VkYXRhO1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbiBcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxuIHtcbkBAIC0yMDY1LDYgKzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4gXHRcdC5zayA9IHNrLFxuIFx0XHQubGV2ZWwgPSAqbGV2ZWwsXG4gXHRcdC5vcHRuYW1lID0gKm9wdG5hbWUsXG4rXHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHR9O1xuIFx0aW50IHJldCwgbWF4X29wdGxlbjtcbiBcbkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IG1heF9vcHRsZW4sXG4gXHRcdFx0XHQgICAgICAgaW50IHJldHZhbClcbkBAIC0yMTU3LDYgKzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9IGxldmVsLFxuIFx0XHQub3B0bmFtZSA9IG9wdG5hbWUsXG4rXHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHRcdC5jdXJyZW50X3Rhc2sgPSBjdXJyZW50LFxuIFx0fTtcbiBcdGludCBvcmlnX29wdGxlbjtcbkBAIC0yNzA1LDYgKzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4gXHRcdGVsc2VcbiBcdFx0XHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKG9wdGxlbik7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6XG4rXHRcdCppbnNuKysgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcbiBcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMzQ2LDEwICsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuLVx0aWYgKCFjb21wYXQpXG4tXHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgXHUwMDI2b3B0bGVuLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4rXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbitcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0yNDQ3LDggKzI0NDYsNyBAQCBpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFjb21wYXQpXG4tXHRcdGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xuK1x0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbkBAIC0yNDc3LDEwICsyNDc1LDkgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgbGV2ZWwsIG9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIGVycik7XG4rXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbitcdFx0XHRcdFx0ICAgICBlcnIpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC03NjE2LDYgKzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQge1xuIFx0X19zMzJcdG9wdG5hbWU7XG4gXHRfX3MzMlx0b3B0bGVuO1xuIFx0X19zMzJcdHJldHZhbDtcbitcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXG5AQCAtMjE1LDYgKzIxNSw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XG4gXHRcdC5nZXRfb3B0bmFtZSA9IElQX1RPUyxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJnZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuK1x0XHRcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1xuK1x0XHRcdC8qIGlmIChjdHgtXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cbitcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuK1x0XHRcdC8qIGN0eC1cdTAwM2VyZXR2YWwgPSAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIHJldHZhbCkpLFxuK1x0XHRcdC8qIHJldHVybiAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9KTVBfQSgxKSxcbitcdFx0XHQvKiB9IGVsc2UgeyAqL1xuK1x0XHRcdC8qIHJldHVybiAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdC8qIH0gKi9cbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1xuK1x0XHQuZ2V0X2xldmVsID0gU09MX0lQLFxuK1x0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4rXHRcdC5nZXRfb3B0bGVuID0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIGN0eC1cdTAwM2Vpc19jb21wYXQgPSAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0fSxcbitcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4rXG4rXHRcdC5lcnJvciA9IERFTllfTE9BRCxcbitcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cdTAwM2VvcHRuYW1lXCIsXG4gXHRcdC5pbnNucyA9IHtcbkBAIC02MDksNiArNjUyLDQ5IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbiBcdFx0LmdldF9vcHR2YWwgPSB7IDEgXHUwMDNjXHUwMDNjIDMgfSxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuK1x0XHRcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1xuK1x0XHRcdC8qIGlmIChjdHgtXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cbitcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuK1x0XHRcdC8qIGN0eC1cdTAwM2VvcHRsZW4gPSAtMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksXG4rXHRcdFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxuK1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXG4rXHRcdFx0LyogcmV0dXJuIDEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXG4rXHRcdFx0QlBGX0pNUF9BKDEpLFxuK1x0XHRcdC8qIH0gZWxzZSB7ICovXG4rXHRcdFx0LyogcmV0dXJuIDAgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdFx0LyogfSAqL1xuK1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0fSxcbitcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4rXG4rXHRcdC5zZXRfb3B0bmFtZSA9IDEyMyxcbitcdFx0LnNldF9vcHRsZW4gPSAxLFxuK1x0XHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGVzY3IgPSBcInNldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiBjdHgtXHUwMDNlaXNfY29tcGF0ID0gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1xuK1x0XHQuZXJyb3IgPSBERU5ZX0xPQUQsXG4rXHR9LFxuIFx0e1xuIFx0XHQuZGVzY3IgPSBcInNldHNvY2tvcHQ6IHJlYWQgY3R4LVx1MDAzZW9wdGxlblwiLFxuIFx0XHQuaW5zbnMgPSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoxMC4zMzU2NzA3ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3Nzg5NjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gQlBGIEhvb2tzIGluIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhbiBgaXNfY29tcGF0YCBmaWVsZCBpbnRvIHRoZSBgYnBmX3NvY2tvcHRgIHN0cnVjdHVyZXMuIFRoaXMsIGluIHR1cm4sIGlzIGJlaW5nIHBhc3NlZCBkb3duIHRvIHRoZSBCUEYgaG9vayBleGVjdXRpb24gZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLlxuXG5QcmV2aW91c2x5LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHRoZSBCUEYgaG9va3Mgd2VyZSAqc2tpcHBlZCogZW50aXJlbHkgaWYgdGhlIGBjb21wYXRgIGZsYWcgd2FzIHNldC4gVGhlIGNvZGUgZXhwbGljaXRseSBieXBhc3NlZCB0aGUgQlBGIGV4ZWN1dGlvbiBpbiB0aG9zZSBjYXNlcy4gVGhlIGRpZmYgc2hvd3MgdGhpcyBxdWl0ZSBjbGVhcmx5LiAgRXNzZW50aWFsbHksIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgZnVuY3Rpb25zIHdlcmUgd3JhcHBlZCBpbiBgaWYgKCFjb21wYXQpYCBjb25kaXRpb25zLlxuXG5Ob3csIGhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgdGhhdCBjb25kaXRpb25hbCBoYXMgYmVlbiByZW1vdmVkLiBUaGUgQlBGIGhvb2tzIGFyZSAqYWx3YXlzKiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYGNvbXBhdGAgc2V0dGluZy4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBtZWFucyBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbmZsdWVuY2UgYW5kIHBvdGVudGlhbGx5IGV2ZW4gYmxvY2sgb3IgbW9kaWZ5IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIGNhbGxzIG1hZGUgaW4gY29tcGF0aWJpbGl0eSBtb2RlLlxuXG5UaGVyZSdzIG9uZSBtb3JlIHRoaW5nIHRoYXQncyBjYXVnaHQgbXkgYXR0ZW50aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIG1vcmUgY2FyZWZ1bGx5LiBQcmV2aW91c2x5LCB0aGUgYGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO2AgbGluZSBpbiBgZG9fc29ja19nZXRzb2Nrb3B0YCB3YXMgYWxzbyB3cmFwcGVkIGluIGBpZiAoIWNvbXBhdClgLiAgVGhhdCdzIG5vdyBnb25lLCBtZWFuaW5nIHRoaXMgY29weSAqYWx3YXlzKiBoYXBwZW5zLCBldmVuIGZvciBjb21wYXQgY2FsbHMuIFdhaXQsIGBvcHRsZW5gIGlzIGEgYHNvY2twdHJfdGAsIHNvIGl0J3MgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnkuICBJcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb3B5X2Zyb21fc29ja3B0cmAgY2hlY2tlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzZWN1cml0eSBpc3N1ZSBpZiB0aGUgY29weSBmYWlscyBhbmQgYSBnYXJiYWdlIHZhbHVlIGdldHMgdXNlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjE4LjQxMzU3MDE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NjQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9mcm9tX3NvY2twdHIuKm1heF9vcHRsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zb2NrZXQuYz0yNDM2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDQ4LVxcbm5ldC9zb2NrZXQuYzoyNDQ5OlxcdGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcXG5uZXQvc29ja2V0LmMtMjQ1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTguNDY1NDM5MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzODUyMDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZG9fc29ja19nZXRzb2Nrb3B0YCoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIHplcm8gaW4gb24gYGRvX3NvY2tfZ2V0c29ja29wdGAuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIGFyY2hpdGVjdHVyZSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHNvY2tldCBvcHRpb25zLiBGaXJzdCwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBiYXNpYyBjb250cm9sIGZsb3cuIEknbSBsb29raW5nIGZvciB0aGUgc3dpdGNoIHN0YXRlbWVudCDigJMgdGhhdCdzIHRoZSBoZWFydCBvZiBvcHRpb24gZGlzcGF0Y2guIEkgYmV0IGl0J3MgYSBtdWx0aS1sYXllcmVkIHN3aXRjaCwgaGFuZGxpbmcgdGhlIHNvY2tldCBsZXZlbCAoU09MX1NPQ0tFVCwgZXRjLikgYW5kIHRoZW4gdGhlIHNwZWNpZmljIG9wdGlvbiB3aXRoaW4gdGhhdCBsZXZlbC5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBwYXJzaW5nLiBTcGVjaWZpY2FsbHksIHdoYXQncyBwYXNzZWQgdG8gYG9wdGxlbmAgYW5kIGBvcHR2YWxgLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHZ1bG5lcmFiaWxpdGllcyBwcmVzZW50IGluIGl0cyBoYW5kbGluZz8gSSdsbCBwcm9iYWJseSBhbHNvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgdmFyaW91cyBgZ2V0c29ja29wdGAgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGNvcHlpbmcgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHByZXNlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzP1xuXG5GdXJ0aGVybW9yZSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBhbmQgaG93IHRoZSBkaWZmZXJlbnQgc29ja2V0IHR5cGVzIGFuZCBwcm90b2NvbHMgYXJlIHRyZWF0ZWQuIERvZXMgaXQgY29ycmVjdGx5IGNoZWNrIGZvciBpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbnM/IEFyZSB0aGVyZSBhbnkgcGxhY2VzIHdoZXJlIGl0IG1pZ2h0IHJldHVybiBhbiBpbmNvcnJlY3QgZXJyb3IgY29kZT8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzIGdyYWNlZnVsbHkuIFRoZSBnb2FsIGhlcmUgaXMgYSBxdWljayBidXQgdGhvcm91Z2ggb3ZlcnZpZXcgdG8gc3BvdCBhbnkgb2J2aW91cyBpc3N1ZXMgb3IgYXJlYXMgdGhhdCByZXF1aXJlIGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjIzLjEwMzk2MjU4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Mzc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Mzg6XFx0e1xcbjI0Mzk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcbjI0NDA6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjI0NDE6XFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4yNDQyOlxcdFxcdHNvY2tvcHRfdCBvcHQ7XFxuMjQ0MzpcXHRcXHRpbnQgZXJyO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjQ0NjpcXHRcXHRpZiAoZXJyKVxcbjI0NDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDQ4OlxcdFxcbjI0NDk6XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDUyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ1MzpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0NTQ6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0NTU6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ1NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0NTc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDU4OlxcdFxcbjI0NTk6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0NjA6XFx0XFxuMjQ2MTpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDYyOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0NjM6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDY0OlxcdFxcdFxcdCAqL1xcbjI0NjU6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDY3OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ2ODpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNDY5OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNDc0OlxcdFxcdH0gZWxzZSB7XFxuMjQ3NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNDc2OlxcdFxcdH1cXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbjI0Nzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNDgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNDgxOlxcdFxcbjI0ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4yNDgzOlxcdH1cXG4yNDg0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG4yNDg1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoyMy4xMDQxODY0NTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MzU3NzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7YCBjYWxsLi4uIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgdGhhdCBpdCdzIGlnbm9yaW5nIHRoZSByZXR1cm4gdmFsdWUuIElmIGBvcHRsZW5gIGlzIGdhcmJhZ2UsIHRoZW4gYG1heF9vcHRsZW5gIHdpbGwgcmVtYWluIGF0IHplcm8sIHdoaWNoIGlzIGhvdyBpdCB3YXMgaW5pdGlhbGl6ZWQuIFRoZW4gdGhhdCB6ZXJvIHZhbHVlIGdldHMgcGFzc2VkIHRvIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaGFzIHNvbWUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbldhaXQsIGxvb2tpbmcgYXQgaXQgYWdhaW4sIGBtYXhfb3B0bGVuYCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGFkZHJlc3NlcyB0aGUgaW1tZWRpYXRlIFwidW5pbml0aWFsaXplZCBtZW1vcnlcIiBjb25jZXJuLiBUaGUgcmVhbCBzaGlmdCBoYXBwZW5zIHdpdGggdGhlIHBhdGNoLCB3aGljaCByZW1vdmVzIHRoZSBgaWYgKCFjb21wYXQpYCBjb25kaXRpb24gYW5kIGxldHMgYG1heF9vcHRsZW5gIGJlIHJlYWQgZnJvbSB1c2VyIHNwYWNlIGZvciBjb21wYXQgZ2V0c29ja29wdC4gTm93LCBmb3IgY29tcGF0IGdldHNvY2tvcHQsIHRoZSBgb3B0bGVuYCB2YXJpYWJsZSBwb2ludHMgdG8gYSAzMi1iaXQgaW50ZWdlciBpbiB1c2VyIHNwYWNlLCBhbmQgc2luY2UgYHNpemVvZihpbnQpYCBpcyBpbmRlZWQgNCBieXRlcywgYGNvcHlfZnJvbV9zb2NrcHRyYCByZWFkcyA0IGJ5dGVzLiBPa2F5LCB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuIFN0aWxsLCBJIHNob3VsZCBleHBsb3JlIHRoaXMgd2l0aCB0aGUgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjI4LjI0Nzc2NzUyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQ3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTQ3OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0ODpcXHR9XFxuMjE0OTpcXHRcXG4yMTUwOlxcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4yMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgcmV0dmFsKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycCA9IHNvY2tfY2dyb3VwX3B0cihcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjE1NjpcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O1xcbjIxNTc6XFx0XFx0c3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gY3R4ID0ge1xcbjIxNTg6XFx0XFx0XFx0LnNrID0gc2ssXFxuMjE1OTpcXHRcXHRcXHQubGV2ZWwgPSBsZXZlbCxcXG4yMTYwOlxcdFxcdFxcdC5vcHRuYW1lID0gb3B0bmFtZSxcXG4yMTYxOlxcdFxcdFxcdC5pc19jb21wYXQgPSBjb21wYXQsXFxuMjE2MjpcXHRcXHRcXHQuY3VycmVudF90YXNrID0gY3VycmVudCxcXG4yMTYzOlxcdFxcdH07XFxuMjE2NDpcXHRcXHRpbnQgb3JpZ19vcHRsZW47XFxuMjE2NTpcXHRcXHRpbnQgcmV0O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRvcmlnX29wdGxlbiA9IG1heF9vcHRsZW47XFxuMjE2ODpcXHRcXHRjdHgub3B0bGVuID0gbWF4X29wdGxlbjtcXG4yMTY5OlxcdFxcdG1heF9vcHRsZW4gPSBzb2Nrb3B0X2FsbG9jX2J1ZihcXHUwMDI2Y3R4LCBtYXhfb3B0bGVuLCBcXHUwMDI2YnVmKTtcXG4yMTcwOlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2MgMClcXG4yMTcxOlxcdFxcdFxcdHJldHVybiBtYXhfb3B0bGVuO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHRpZiAoIXJldHZhbCkge1xcbjIxNzQ6XFx0XFx0XFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxcbjIxNzU6XFx0XFx0XFx0ICogY29weSB3aGF0ZXZlciB3YXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgYmFja1xcbjIxNzY6XFx0XFx0XFx0ICogaW50byBvdXIgdGVtcG9yYXJ5IGJ1ZmZlci4gU2V0IG9wdGxlbiB0byB0aGVcXG4yMTc3OlxcdFxcdFxcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxcbjIxNzg6XFx0XFx0XFx0ICogQlBGIHByb2dyYW1zIGluc3BlY3QgdGhlIHZhbHVlLlxcbjIxNzk6XFx0XFx0XFx0ICovXFxuMjE4MDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmN0eC5vcHRsZW4sIG9wdGxlbixcXG4yMTgxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihjdHgub3B0bGVuKSkpIHtcXG4yMTgyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjE4MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTg0OlxcdFxcdFxcdH1cXG4yMTg1OlxcdFxcbjIxODY6XFx0XFx0XFx0aWYgKGN0eC5vcHRsZW4gXFx1MDAzYyAwKSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE4OTpcXHRcXHRcXHR9XFxuMjE5MDpcXHRcXHRcXHRvcmlnX29wdGxlbiA9IGN0eC5vcHRsZW47XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjE5NDpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxOTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE5NjpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjI4LjI0Nzk2NjgzOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDI1NzU3MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIGFuZCBDb21wYXRpYmlsaXR5IEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHhgIGFuZCBpdCBzZWVtcyB0byBiZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gVGhhdCBtZWFucyBzb21lIGZpZWxkcyBnZXQgc3BlY2lmaWMgdmFsdWVzLCBhbmQgdGhlIHJlc3QgZ2V0IHplcm9lZCBvdXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGtleSB0aGluZyBJJ20gZm9jdXNpbmcgb24gbm93IGlzIHRoaXMgYGlzX2NvbXBhdGAgZmllbGQsIHdoaWNoIGlzIGFwcGFyZW50bHkgYSAqbmV3KiBhZGRpdGlvbiB0byBib3RoIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgYW5kIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGhhcyBpbXBsaWNhdGlvbnMgb24gaG93IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNpbXBseSAqYWRkaW5nKiBgaXNfY29tcGF0YCB0byB0aGUgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYWRkaXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBuZXcgYGlzX2NvbXBhdGAgZmllbGQgaXMgcmVsYXRlZCB0byBoYW5kbGluZyBjb21wYXRpYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zIG9yIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiBpdHMgbmFtZS4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IGNoYW5nZSBvciBpZiBvdGhlciBmaWVsZHMgd2VyZSBhZmZlY3RlZC5cblxuRmluYWxseSwgSSBoYXZlIGEgcXVpY2sgdGhvdWdodCBvbiB0aGUgYHN0cnVjdCBicGZfc29ja29wdGAuIFBhZGRpbmcgaW4gc3RydWN0cyBpcyBhbHdheXMgYSBjb25jZXJuIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHBhY2tlZCBzdHJ1Y3R1cmVzIG9yIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEl0J3MgYSBxdWljayBxdWVzdGlvbiwgYnV0IGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgdGhlIHN0cnVjdCBoYXMgYW55IGtpbmQgb2Ygc3BlY2lhbCBwYWNraW5nIHJ1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjMzLjY3MzcyNjM0NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2MTA6XFx0c3RydWN0IGJwZl9zb2Nrb3B0IHtcXG43NjExOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX3NvY2sgKiwgc2spO1xcbjc2MTI6XFx0XFx0X19icGZfbWRfcHRyKHZvaWQgKiwgb3B0dmFsKTtcXG43NjEzOlxcdFxcdF9fYnBmX21kX3B0cih2b2lkICosIG9wdHZhbF9lbmQpO1xcbjc2MTQ6XFx0XFxuNzYxNTpcXHRcXHRfX3MzMlxcdGxldmVsO1xcbjc2MTY6XFx0XFx0X19zMzJcXHRvcHRuYW1lO1xcbjc2MTc6XFx0XFx0X19zMzJcXHRvcHRsZW47XFxuNzYxODpcXHRcXHRfX3MzMlxcdHJldHZhbDtcXG43NjE5OlxcdFxcdF9fczMyXFx0aXNfY29tcGF0O1xcbjc2MjA6XFx0fTtcXG43NjIxOlxcdFxcbjc2MjI6XFx0c3RydWN0IGJwZl9waWRuc19pbmZvIHtcXG43NjIzOlxcdFxcdF9fdTMyIHBpZDtcXG43NjI0OlxcdFxcdF9fdTMyIHRnaWQ7XFxuNzYyNTpcXHR9O1xcbjc2MjY6XFx0XFxuNzYyNzpcXHQvKiBVc2VyIGFjY2Vzc2libGUgZGF0YSBmb3IgU0tfTE9PS1VQIHByb2dyYW1zLiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLiAqL1xcbjc2Mjg6XFx0c3RydWN0IGJwZl9za19sb29rdXAge1xcbjc2Mjk6XFx0XFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDozMy42NzQzMDE0MzZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MjU4NjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb250ZXh0IGZvciBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBicGZfc29ja29wdGAuIEl0J3MgYSBVc2VyIEFQSSBzdHJ1Y3R1cmUsIGJ1dCBpdCBhbHNvIHNlcnZlcyBhcyB0aGUgY29udGV4dCBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBhIGtleSBkZXRhaWwuIFRoZSB2ZXJpZmllciBpcyB0aGUga2V5IHRvIGVuc3VyaW5nIGFsbCB0aGUgcnVsZXMgYXJlIGZvbGxvd2VkIHdoZW4gQlBGIHByb2dyYW1zIGFjY2VzcyB0aGlzIHN0cnVjdHVyZSAtIHNwZWNpZmljYWxseSBpdCByZXdyaXRlcyBhY2Nlc3NlcyB0byBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gLiBUaGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBpc19jb21wYXRgIHRvIGJvdGggdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbCB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGVhbGluZyB3aXRoIGNvbXBhdGliaWxpdHkgZmxhZ3MuXG5cbkxvb2tpbmcgYXQgdGhlIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgZnVuY3Rpb24sIGl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgQlBGIGNvbnRleHQgYWNjZXNzIGNvbnZlcnNpb24uIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBpc19jb21wYXRgIGZpZWxkOiB3ZSdyZSB1c2luZyBgQ0dfU09DS09QVF9SRUFEX0ZJRUxEYCB0byBoYW5kbGUgdGhlIHJlYWQgb3BlcmF0aW9uLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCAtIG5vIHJlZCBmbGFncyB0aGVyZSwgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSB2ZXJpZmllciB0YWtlcyBjYXJlIG9mIGVuZm9yY2luZyB0aGUgYm91bmRhcmllcyBzbyBvbmx5IGV4cGxpY2l0bHkgaGFuZGxlZCBmaWVsZHMgYXJlIGFjY2Vzc2libGUsIGtlZXBpbmcgdGhpbmdzIHNlY3VyZS5cblxuQnV0Li4ud2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoaXMuLi53aGF0IGFib3V0IHRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIHZlcnNpb24/IExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBjaGFuZ2UgaXMgd2VsbC1kZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjM4Ljg2Njg4OTg5MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjk1OlxcdFxcdHU4XFx0XFx0ZGF0YVtCUEZfU09DS09QVF9LRVJOX0JVRl9TSVpFXTtcXG4xNjk2OlxcdH07XFxuMTY5NzpcXHRcXG4xNjk4OlxcdHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcXG4xNjk5OlxcdFxcdHN0cnVjdCBzb2NrXFx0KnNrO1xcbjE3MDA6XFx0XFx0dThcXHRcXHQqb3B0dmFsO1xcbjE3MDE6XFx0XFx0dThcXHRcXHQqb3B0dmFsX2VuZDtcXG4xNzAyOlxcdFxcdHMzMlxcdFxcdGxldmVsO1xcbjE3MDM6XFx0XFx0czMyXFx0XFx0b3B0bmFtZTtcXG4xNzA0OlxcdFxcdHMzMlxcdFxcdG9wdGxlbjtcXG4xNzA1OlxcdFxcdHMzMlxcdFxcdGlzX2NvbXBhdDtcXG4xNzA2OlxcdFxcdC8qIGZvciByZXR2YWwgaW4gc3RydWN0IGJwZl9jZ19ydW5fY3R4ICovXFxuMTcwNzpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfdGFzaztcXG4xNzA4OlxcdFxcdC8qIFRlbXBvcmFyeSBcXFwicmVnaXN0ZXJcXFwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cXG4xNzA5OlxcdFxcdHU2NFxcdFxcdHRtcF9yZWc7XFxuMTcxMDpcXHR9O1xcbjE3MTE6XFx0XFxuMTcxMjpcXHRpbnQgY29weV9icGZfZnByb2dfZnJvbV91c2VyKHN0cnVjdCBzb2NrX2Zwcm9nICpkc3QsIHNvY2twdHJfdCBzcmMsIGludCBsZW4pO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MzguODY3MDY0ODQxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTI2MDA0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja29wdF9rZXJuYCBTdHJ1Y3QqKlxuXG5Pa2F5LCBzbyB0aGV5J3ZlIGFkZGVkIGBpc19jb21wYXRgIHRvIHRoZSBgYnBmX3NvY2tvcHRfa2VybmAgc3RydWN0dXJlLiBJIHNlZSB0aGF0IGl0J3MgaW5pdGlhbGl6ZWQgd2l0aGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGUgaW5pdGlhbGl6YXRpb24gbG9va3MgcHJldHR5IHN0YW5kYXJkOyB0aGV5J3JlIHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyAoYHNrYCwgYGxldmVsYCwgYG9wdG5hbWVgLCBhbmQgYGlzX2NvbXBhdGApIGRpcmVjdGx5LCBhbmQgdGhlIHJlc3Qgd2lsbCBiZSB6ZXJvZWQgb3V0IGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGUgemVyby1pbml0aWFsaXphdGlvbiB0cmlnZ2VyZWQgYSB0aG91Z2h0OiBpcyB0aGVyZSBhbnkgY2hhbmNlIHdlJ3JlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gSSBtZWFuLCB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgdGhhdCdzIGEgc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWEuXG5cbkJ1dCwgaG9sZCBvbi4uLiBubywgdGhhdCBzaG91bGRuJ3QgYmUgYSBjb25jZXJuIGhlcmUuIFRoaXMgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdCAqaXNuJ3QqIHBhc3NlZCBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJdCdzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIHVzZWQgc29sZWx5IHdpdGhpbiB0aGUgQlBGIGV4ZWN1dGlvbiBjb250ZXh0LiBCUEYgcHJvZ3JhbXMgKmNhbiogcmVhZCBgaXNfY29tcGF0YCwgYW5kIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgdHJhbnNsYXRlcyB0aG9zZSByZWFkcyB0byBgY3R4LVx1MDAzZWlzX2NvbXBhdGAuIFNvIHdlIHNob3VsZCBiZSBmaW5lIHRoZXJlLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuIFRoYXQgbG9va3MgZ29vZCwgYnV0IHdoYXQgYWJvdXQgYGRvX3NvY2tfc2V0c29ja29wdGA/IFdlIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NDYuNDE5NjY3OTg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMzNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMzNjpcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuMjMzNzpcXHR7XFxuMjMzODpcXHRcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XFxuMjMzOTpcXHRcXHRjaGFyICprZXJuZWxfb3B0dmFsID0gTlVMTDtcXG4yMzQwOlxcdFxcdGludCBlcnI7XFxuMjM0MTpcXHRcXG4yMzQyOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAwKVxcbjIzNDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjM0NDpcXHRcXG4yMzQ1OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcXG4yMzQ2OlxcdFxcdGlmIChlcnIpXFxuMjM0NzpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuMjM0ODpcXHRcXG4yMzQ5OlxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgY29tcGF0LCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbjIzNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sXFxuMjM1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZrZXJuZWxfb3B0dmFsKTtcXG4yMzUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjIzNTM6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG4yMzU1OlxcdFxcdFxcdGVyciA9IDA7XFxuMjM1NjpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuMjM1NzpcXHRcXHR9XFxuMjM1ODpcXHRcXG4yMzU5OlxcdFxcdGlmIChrZXJuZWxfb3B0dmFsKVxcbjIzNjA6XFx0XFx0XFx0b3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoa2VybmVsX29wdHZhbCk7XFxuMjM2MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yMzYyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFxcdTAwMjZcXHUwMDI2ICFzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChzb2NrKSlcXG4yMzYzOlxcdFxcdFxcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjIzNjQ6XFx0XFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cXHUwMDNlc2V0c29ja29wdCkpXFxuMjM2NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NDYuNDE5ODQ5MTY2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTM2ODIzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlIGluIGBkb19zb2NrX3NldHNvY2tvcHRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0IHNlZW1zIHRoYXQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbm93IGJlaW5nIGNhbGxlZCBmb3IgY29tcGF0IHNvY2tldHMsIHdoaWNoIHdhc24ndCB0aGUgY2FzZSBwcmV2aW91c2x5LiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIENvdWxkIHRoaXMgaW50cm9kdWN0aW9uIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT9cblxuVGhlIGNvZGUgcGF0aCBpczogYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgdHJpZ2dlcmVkLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YC4gUmlnaHQsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIEl0IGFsbG9jYXRlcyBhIGJ1ZmZlciwgY29waWVzIGBvcHR2YWxgIOKAkyB0aGF0IGlzLCB0aGUgb3B0aW9uIHZhbHVlIOKAkyBmcm9tIHVzZXIgc3BhY2UgaW50byBpdCwgcnVucyB0aGUgQlBGIHByb2dyYW0sIGFuZCB0aGVuIHJldHVybnMgdGhlICptb2RpZmllZCogYnVmZmVyIHZpYSBga2VybmVsX29wdHZhbGAuXG5cbldhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4gYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIGNvcHlpbmcgYG9wdHZhbGAgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlbiB3b3JraW5nIG9uIHRoZSAqY29weSogb2YgaXQuIFNvIGV2ZW4gaWYgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGhhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCdzIG9rYXksIGJlY2F1c2Ugd2hhdGV2ZXIgaXMgcmV0dXJuZWQgYnkgdGhlIEJQRiBwcm9ncmFtIGludG8gdGhlIGBrZXJuZWxfb3B0dmFsYCB3aWxsIG92ZXJ3cml0ZSB0aGUgYnVmZmVyPyBBbHJpZ2h0LCBJJ20gcHJldHR5IHN1cmUsIGJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NTEuNDEzNTMzNjY3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNTg6XFx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcXG4yMDU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuMjA2MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxcbjIwNjE6XFx0e1xcbjIwNjI6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycCA9IHNvY2tfY2dyb3VwX3B0cihcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjA2MzpcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O1xcbjIwNjQ6XFx0XFx0c3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gY3R4ID0ge1xcbjIwNjU6XFx0XFx0XFx0LnNrID0gc2ssXFxuMjA2NjpcXHRcXHRcXHQubGV2ZWwgPSAqbGV2ZWwsXFxuMjA2NzpcXHRcXHRcXHQub3B0bmFtZSA9ICpvcHRuYW1lLFxcbjIwNjg6XFx0XFx0XFx0LmlzX2NvbXBhdCA9IGNvbXBhdCxcXG4yMDY5OlxcdFxcdH07XFxuMjA3MDpcXHRcXHRpbnQgcmV0LCBtYXhfb3B0bGVuO1xcbjIwNzE6XFx0XFxuMjA3MjpcXHRcXHQvKiBBbGxvY2F0ZSBhIGJpdCBtb3JlIHRoYW4gdGhlIGluaXRpYWwgdXNlciBidWZmZXIgZm9yXFxuMjA3MzpcXHRcXHQgKiBCUEYgcHJvZ3JhbS4gVGhlIGNhbm9uaWNhbCB1c2UgY2FzZSBpcyBvdmVycmlkaW5nXFxuMjA3NDpcXHRcXHQgKiBUQ1BfQ09OR0VTVElPTihudikgdG8gVENQX0NPTkdFU1RJT04oY3ViaWMpLlxcbjIwNzU6XFx0XFx0ICovXFxuMjA3NjpcXHRcXHRtYXhfb3B0bGVuID0gbWF4X3QoaW50LCAxNiwgKm9wdGxlbik7XFxuMjA3NzpcXHRcXHRtYXhfb3B0bGVuID0gc29ja29wdF9hbGxvY19idWYoXFx1MDAyNmN0eCwgbWF4X29wdGxlbiwgXFx1MDAyNmJ1Zik7XFxuMjA3ODpcXHRcXHRpZiAobWF4X29wdGxlbiBcXHUwMDNjIDApXFxuMjA3OTpcXHRcXHRcXHRyZXR1cm4gbWF4X29wdGxlbjtcXG4yMDgwOlxcdFxcbjIwODE6XFx0XFx0Y3R4Lm9wdGxlbiA9ICpvcHRsZW47XFxuMjA4MjpcXHRcXG4yMDgzOlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjA4NDpcXHRcXHRcXHRcXHQgICAgICBtaW4oKm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjA4NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwODY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA4NzpcXHRcXHR9XFxuMjA4ODpcXHRcXG4yMDg5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjA5MDpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXFx1MDAyNmNncnAtXFx1MDAzZWJwZiwgQ0dST1VQX1NFVFNPQ0tPUFQsXFxuMjA5MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCAwLCBOVUxMKTtcXG4yMDkyOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMjA5MzpcXHRcXG4yMDk0OlxcdFxcdGlmIChyZXQpXFxuMjA5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMDk2OlxcdFxcbjIwOTc6XFx0XFx0aWYgKGN0eC5vcHRsZW4gPT0gLTEpIHtcXG4yMDk4OlxcdFxcdFxcdC8qIG9wdGxlbiBzZXQgdG8gLTEsIGJ5cGFzcyBrZXJuZWwgKi9cXG4yMDk5OlxcdFxcdFxcdHJldCA9IDE7XFxuMjEwMDpcXHRcXHR9IGVsc2UgaWYgKGN0eC5vcHRsZW4gXFx1MDAzZSBtYXhfb3B0bGVuIHx8IGN0eC5vcHRsZW4gXFx1MDAzYyAtMSkge1xcbjIxMDE6XFx0XFx0XFx0Lyogb3B0bGVuIGlzIG91dCBvZiBib3VuZHMgKi9cXG4yMTAyOlxcdFxcdFxcdGlmICgqb3B0bGVuIFxcdTAwM2UgUEFHRV9TSVpFIFxcdTAwMjZcXHUwMDI2IGN0eC5vcHRsZW4gXFx1MDAzZT0gMCkge1xcbjIxMDM6XFx0XFx0XFx0XFx0cHJfaW5mb19vbmNlKFxcXCJicGYgc2V0c29ja29wdDogaWdub3JpbmcgcHJvZ3JhbSBidWZmZXIgd2l0aCBvcHRsZW49JWQgKG1heF9vcHRsZW49JWQpXFxcXG5cXFwiLFxcbjIxMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICBjdHgub3B0bGVuLCBtYXhfb3B0bGVuKTtcXG4yMTA1OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMjEwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTA3OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NTEuNDEzNjcxNDI2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDA2MjY0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgYnVmZmVyLCBzcGVjaWZpY2FsbHkgc2l6ZWQgYnkgYG1heF9vcHRsZW5gLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgbmV4dCBzdGVwIGlzIGEgY2FsbCB0byBgY29weV9mcm9tX3NvY2twdHJgLCB3aGljaCBpcyBnb2luZyB0byBncmFiIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEFuZCB0aGUgc2l6ZSBvZiB0aGF0IGNodW5rPyBXZWxsLCBpdCdzIHRoZSAqc21hbGxlciogdmFsdWUgYmV0d2VlbiB3aGF0IHRoZSB1c2VyIHByb3ZpZGVzIChgKm9wdGxlbmApIGFuZCB0aGF0IGBtYXhfb3B0bGVuYCB3ZSBqdXN0IGFsbG9jYXRlZC4gTWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gb3ZlcmZsb3cuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gSSdtIHdvbmRlcmluZyBob3cgYHNvY2tvcHRfYWxsb2NfYnVmYCBhY3R1YWxseSBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gRG9lcyBpdCB1c2UgYGttYWxsb2NgPyBPciBpcyBpdCBmYWxsaW5nIGJhY2sgdG8gdGhhdCBzdGFjay1iYXNlZCBgYnVmYD8gVGhhdCdzIGNydWNpYWwgZm9yIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZS4gQW5kIGFub3RoZXIgaW1wb3J0YW50IHBvaW50LCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiBpdCB6ZXJvZXMgdGhlIGJ1ZmZlci4gSWYgbm90LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSB2dWxuZXJhYmlsaXR5LCBsZXR0aW5nIGdhcmJhZ2UgZGF0YSBmcm9tIHRoZSBrZXJuZWwgbGVhayBiYWNrIGludG8gdXNlciBzcGFjZS4gVGhpcyBuZWVkcyBhIG11Y2ggY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDo1Ny4wNTQzMDExNzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRcXHQvKiBXZSBkb24ndCBleHBvc2Ugb3B0dmFscyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gUEFHRV9TSVpFXFxuMjAyMTpcXHRcXHRcXHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXFxuMjAyMjpcXHRcXHRcXHQgKi9cXG4yMDIzOlxcdFxcdFxcdG1heF9vcHRsZW4gPSBQQUdFX1NJWkU7XFxuMjAyNDpcXHRcXHR9XFxuMjAyNTpcXHRcXG4yMDI2OlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2M9IHNpemVvZihidWYtXFx1MDAzZWRhdGEpKSB7XFxuMjAyNzpcXHRcXHRcXHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcXG4yMDI4OlxcdFxcdFxcdCAqIGJ5dGVzIGF2b2lkIHRoZSBjb3N0IG9mIGt6YWxsb2MuXFxuMjAyOTpcXHRcXHRcXHQgKi9cXG4yMDMwOlxcdFxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0gYnVmLVxcdTAwM2VkYXRhO1xcbjIwMzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHR2YWxfZW5kID0gY3R4LVxcdTAwM2VvcHR2YWwgKyBtYXhfb3B0bGVuO1xcbjIwMzI6XFx0XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjAzMzpcXHRcXHR9XFxuMjAzNDpcXHRcXG4yMDM1OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XFxuMjAzNjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlb3B0dmFsKVxcbjIwMzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cXHUwMDNlb3B0dmFsICsgbWF4X29wdGxlbjtcXG4yMDQwOlxcdFxcbjIwNDE6XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjA0MjpcXHR9XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcXG4yMDQ1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxcbjIwNDY6XFx0e1xcbjIwNDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3B0dmFsID09IGJ1Zi1cXHUwMDNlZGF0YSlcXG4yMDQ4OlxcdFxcdFxcdHJldHVybjtcXG4yMDQ5OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3B0dmFsKTtcXG4yMDUwOlxcdH1cXG4yMDUxOlxcdFxcbjIwNTI6XFx0c3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXFxuMjA1MzpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcXG4yMDU0OlxcdHtcXG4yMDU1OlxcdFxcdHJldHVybiBjdHgtXFx1MDAzZW9wdHZhbCAhPSBidWYtXFx1MDAzZWRhdGE7XFxuMjA1NjpcXHR9XFxuMjA1NzpcXHRcXG4yMDU4OlxcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXFxuMjA1OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDo1Ny4wNTQ2NDg5NjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NjQzMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBzZXRzb2Nrb3B0IEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHNvY2tvcHRfYWxsb2NfYnVmYCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaXQgdXNlcyBga3phbGxvY2Agd2hpY2ggemVyby1pbml0aWFsaXplcy4gQnV0LCBpZiBpdCdzIHVzaW5nIHRoZSBzdGFjayBidWZmZXIgYGJ1Zi1cdTAwM2VkYXRhYCwgaXQgZG9lc24ndCBleHBsaWNpdGx5IHplcm8gaXQsIHdoaWNoIG1hZGUgbWUgcGF1c2UuIEFoLCB3YWl0LCBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhY3R1YWxseSAqZG9lcyogemVyby1pbml0aWFsaXplIHRoYXQgc3RhY2sgYnVmZmVyLiBUaGF0J3MgZ29vZDsgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBmdWxseSB6ZXJvZWQgYXQgdGhlIHN0YXJ0LlxuXG5Tbywgd2UgY29weSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucyBpdHMgbWFnaWMuIE5vdywgaW5zaWRlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgSSdtIHNlZWluZyB0aGlzOlxuYGBgY1xuXHRpZiAoY3R4Lm9wdGxlbiAhPSAwKSB7XG5cdFx0KmxldmVsID0gY3R4LmxldmVsO1xuXHRcdCpvcHRuYW1lID0gY3R4Lm9wdG5hbWU7XG5cdFx0Km9wdGxlbiA9IGN0eC5vcHRsZW47XG5cdFx0Kmtlcm5lbF9vcHR2YWwgPSBjdHgub3B0dmFsO1xuXHR9XG5gYGBcbklmIGBjdHgub3B0bGVuYCBpcyBpbmNyZWFzZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCB0aGVuIGAqb3B0bGVuYCBnZXRzIHVwZGF0ZWQsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgKm9wdGxlbmAuIEJ1dCwgYG1heF9vcHRsZW5gIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIEhvbGQgb24uLi4gdGhlIEJQRiB2ZXJpZmllciBtYWtlcyBzdXJlIHRoZSBCUEYgcHJvZ3JhbSBjYW4ndCBzZXQgYGN0eC5vcHRsZW5gIGxhcmdlciB0aGFuIGBtYXhfb3B0bGVuYC4gVGhlIGtlcm5lbCBjaGVja3MgdGhpcyBhcyB3ZWxsOlxuYGBgY1xuXHR9IGVsc2UgaWYgKGN0eC5vcHRsZW4gXHUwMDNlIG1heF9vcHRsZW4gfHwgY3R4Lm9wdGxlbiBcdTAwM2MgLTEpIHtcblx0XHQvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqL1xuYGBgXG5TbywgdGhhdCBgY3R4Lm9wdGxlbmAgaXMgYm91bmRlZC5cblxuU2luY2UgdGhlIGJ1ZmZlciBpcyB6ZXJvZWQsIHdoZXRoZXIgYnkgYGt6YWxsb2NgIG9yIHRoZSBge31gIGluaXRpYWxpemF0aW9uLCBhbnkgYnl0ZXMgYmV5b25kIHRoZSBvcmlnaW5hbCBgKm9wdGxlbmAgdXAgdG8gYGN0eC5vcHRsZW5gIHdpbGwgYmUgemVyby4gTmljZS4gQW5kIHRoZW4gYGtlcm5lbF9vcHR2YWxgIGdldHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBgc2V0c29ja29wdGAgaGFuZGxlci4gVGhlIGhhbmRsZXIgcmVhZHMgdXAgdG8gYCpvcHRsZW5gIGJ5dGVzIGZyb20gdGhlIGBrZXJuZWxfb3B0dmFsYC4gQmVjYXVzZSB0aGUgYnVmZmVyIGlzIHplcm9lZCwgdGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIGxlYWtlZC4gRXhjZWxsZW50ISBUaGlzIHNlZW1zIHNhZmUuXG5cbk5vdywgd2hhdCBhYm91dCBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGA/IEkgbmVlZCB0byBsb29rIGF0IHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMTowNS4yMTEwODQwNzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MzpcXHRcXHRpZiAoIXJldHZhbCkge1xcbjIxNzQ6XFx0XFx0XFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxcbjIxNzU6XFx0XFx0XFx0ICogY29weSB3aGF0ZXZlciB3YXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgYmFja1xcbjIxNzY6XFx0XFx0XFx0ICogaW50byBvdXIgdGVtcG9yYXJ5IGJ1ZmZlci4gU2V0IG9wdGxlbiB0byB0aGVcXG4yMTc3OlxcdFxcdFxcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxcbjIxNzg6XFx0XFx0XFx0ICogQlBGIHByb2dyYW1zIGluc3BlY3QgdGhlIHZhbHVlLlxcbjIxNzk6XFx0XFx0XFx0ICovXFxuMjE4MDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmN0eC5vcHRsZW4sIG9wdGxlbixcXG4yMTgxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihjdHgub3B0bGVuKSkpIHtcXG4yMTgyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjE4MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTg0OlxcdFxcdFxcdH1cXG4yMTg1OlxcdFxcbjIxODY6XFx0XFx0XFx0aWYgKGN0eC5vcHRsZW4gXFx1MDAzYyAwKSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE4OTpcXHRcXHRcXHR9XFxuMjE5MDpcXHRcXHRcXHRvcmlnX29wdGxlbiA9IGN0eC5vcHRsZW47XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjE5NDpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxOTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE5NjpcXHRcXHRcXHR9XFxuMjE5NzpcXHRcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjIwMDpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXFx1MDAyNmNncnAtXFx1MDAzZWJwZiwgQ0dST1VQX0dFVFNPQ0tPUFQsXFxuMjIwMTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCByZXR2YWwsIE5VTEwpO1xcbjIyMDI6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4yMjAzOlxcdFxcbjIyMDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjIwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjA2OlxcdFxcbjIyMDc6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcXHUwMDI2XFx1MDAyNlxcbjIyMDg6XFx0XFx0ICAgIChjdHgub3B0bGVuIFxcdTAwM2UgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuIFxcdTAwM2MgMCkpIHtcXG4yMjA5OlxcdFxcdFxcdGlmIChvcmlnX29wdGxlbiBcXHUwMDNlIFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiBjdHgub3B0bGVuIFxcdTAwM2U9IDApIHtcXG4yMjEwOlxcdFxcdFxcdFxcdHByX2luZm9fb25jZShcXFwiYnBmIGdldHNvY2tvcHQ6IGlnbm9yaW5nIHByb2dyYW0gYnVmZmVyIHdpdGggb3B0bGVuPSVkIChtYXhfb3B0bGVuPSVkKVxcXFxuXFxcIixcXG4yMjExOlxcdFxcdFxcdFxcdFxcdCAgICAgY3R4Lm9wdGxlbiwgbWF4X29wdGxlbik7XFxuMjIxMjpcXHRcXHRcXHRcXHRyZXQgPSByZXR2YWw7XFxuMjIxMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjE0OlxcdFxcdFxcdH1cXG4yMjE1OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjIxNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjE3OlxcdFxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0aWYgKGN0eC5vcHRsZW4gIT0gMCkge1xcbjIyMjA6XFx0XFx0XFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcXHUwMDI2XFx1MDAyNlxcbjIyMjE6XFx0XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGN0eC5vcHR2YWwsIGN0eC5vcHRsZW4pKSB7XFxuMjIyMjpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMTowNS4yMTEyOTUzMDVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MDUxMTc3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZXRzb2Nrb3B0IEJQRiBIb29rIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBoYW5kbGVzIGBnZXRzb2Nrb3B0YCBjYWxscywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5Jbml0aWFsbHksIGBidWZgIGlzIHplcm9lZCwgYW5kIGFzc3VtaW5nIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgdXNlcyBga3phbGxvY2AgKHdoaWNoIHNlZW1zIGxpa2VseSksIHRoZSBidWZmZXIgYGN0eC5vcHR2YWxgIGlzIHplcm9lZC4gVGhlbiwgdXNlci1zcGFjZSBkYXRhIGlzIGNvcGllZCAqaW50byogYGN0eC5vcHR2YWxgIHZpYSBgY29weV9mcm9tX3NvY2twdHJgLCB0aGUgQlBGIHByb2dyYW0gcnVucywgYW5kIHRoZSBtb2RpZmllZCBkYXRhIGlzIGNvcGllZCAqYmFjayogdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b19zb2NrcHRyYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYW55IGJ5dGVzIG5vdCB0b3VjaGVkIGJ5IGBjb3B5X2Zyb21fc29ja3B0cmAgb3IgdGhlIEJQRiBwcm9ncmFtIHJlbWFpbiB6ZXJvZWQuIFNvLCB0aGUgaW5pdGlhbCB6ZXJvaW5nIHByb3ZpZGVzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuXG5cbkJ1dCB3aGF0IGhhcHBlbnMgaWYgdGhlIG9yaWdpbmFsLCBrZXJuZWwtcHJvdmlkZWQgb3B0aW9uIGxlbmd0aCAoYG9yaWdfb3B0bGVuYCkgaXMgbGVzcyB0aGFuIGBjdHgub3B0bGVuYCB3aGljaCBpcyBwb3RlbnRpYWxseSBtb2RpZmllZCBieSB0aGUgQlBGIHByb2dyYW0/IGBjb3B5X2Zyb21fc29ja3B0cmAgb25seSBjb3BpZXMgYG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKWAgYnl0ZXMuIFdhaXQsIHRoYXQgYGN0eC5vcHRsZW5gIGNvbWVzIGZyb20gdXNlciBzcGFjZSEgU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsJ3MgYGdldHNvY2tvcHRgIGhhbmRsZXIgd3JpdGVzIHRoZSAqYWN0dWFsKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gdGhlIGBvcHRsZW5gIHBvaW50ZXIgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSwgYW5kIHRoZW4gdGhlIEJQRiBjb2RlIHJlYWRzIGl0IGJhY2suIFRoZW4gdGhlIHNhbWUgdmFsdWUgb2YgYG9wdGxlbmAgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YSBmcm9tIHVzZXIgc3BhY2UgYmFjayBpbnRvIGBjdHgub3B0dmFsYC4gVGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucy4gQW5kIHRoZW4gdGhlIGNvZGUgY29waWVzIGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBpbmVmZmljaWVudCBiZWNhdXNlIHdlJ3JlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHNhbWUgbGVuZ3RoIGZyb20gdXNlciBzcGFjZSwgYnV0IHRoaXMgaXMgaG93IGl0IHdvcmtzLiBTaW5jZSBgY3R4Lm9wdHZhbGAgaXMgaW5pdGlhbGx5IHplcm9lZCBhbmQgb25seSB0aGUgZmlyc3QgYG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKWAgYnl0ZXMgYXJlIG92ZXJ3cml0dGVuLCBhbnkgdHJhaWxpbmcgYnl0ZXMgcmVtYWluIHplcm8uIElmIHRoZSBCUEYgcHJvZ3JhbSAqaW5jcmVhc2VzKiBgY3R4Lm9wdGxlbmAgKHVwIHRvIGBtYXhfb3B0bGVuYCksIHRoZSBuZXdseSBjb3BpZWQgYnl0ZXMgYXJlIGVpdGhlciB6ZXJvIG9yIHdoYXQgdGhlIEJQRiBwcm9ncmFtIHNwZWNpZmljYWxseSB3cm90ZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGlzX2NvbXBhdGAgdG8gYm90aCBgYnBmX3NvY2tvcHRgIGFuZCBgYnBmX3NvY2tvcHRfa2VybmAgc3RydWN0dXJlcy4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgIGFyZSBtb2RpZmllZCB0byBwYXNzIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MsIGVuYWJsaW5nIHRoZXNlIGhvb2tzIGZvciBjb21wYXQgc29ja2V0cy4gQ291bGQgdGhlIEJQRiBwcm9ncmFtcyAqdGhlbXNlbHZlcyogYmUgdGhlIHNvdXJjZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgYmVjYXVzZSB0aGUgQlBGIHZlcmlmaWVyIHByZXZlbnRzIHByb2dyYW1zIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBpc19jb21wYXRgIGZsYWcgd2l0aGluIGBicGZfc29ja29wdF9rZXJuYCBpcyBhIHNpbXBsZSBgczMyYCAoNCBieXRlcykgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGNvbXBhdGAgdmFsdWUgKDAgb3IgMSkuIFRoZSByZXN0IG9mIGBicGZfc29ja29wdF9rZXJuYCBpcyB6ZXJvZWQgZHVlIHRvIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBTcGVjaWZpY2FsbHksIGFsbCBvdGhlciBmaWVsZHMgbGlrZSBgdG1wX3JlZ2AsIGBvcHR2YWxgLCBgb3B0dmFsX2VuZGAsIGFuZCBgb3B0bGVuYCBhcmUgemVyb2VkIHVubGVzcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXYWl0LCBsYXRlciBgb3B0bGVuYCBpcyBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gYG1heF9vcHRsZW5gLiBUaGlzIHByb3ZpZGVzIGEgdmVyeSBoaWdoIGRlZ3JlZSBvZiBjb25maWRlbmNlIHRoYXQgdGhlcmUncyBubyB3YXkgdGhlIGNvZGUgbGVha3MgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCBvbmUgbW9yZSB0aW1lLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIxOjE3LjkxNjQxNjY3NloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Mzc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Mzg6XFx0e1xcbjI0Mzk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcbjI0NDA6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjI0NDE6XFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4yNDQyOlxcdFxcdHNvY2tvcHRfdCBvcHQ7XFxuMjQ0MzpcXHRcXHRpbnQgZXJyO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjQ0NjpcXHRcXHRpZiAoZXJyKVxcbjI0NDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDQ4OlxcdFxcbjI0NDk6XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDUyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ1MzpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0NTQ6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0NTU6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ1NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0NTc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDU4OlxcdFxcbjI0NTk6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0NjA6XFx0XFxuMjQ2MTpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDYyOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0NjM6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDY0OlxcdFxcdFxcdCAqL1xcbjI0NjU6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDY3OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ2ODpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNDY5OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNDc0OlxcdFxcdH0gZWxzZSB7XFxuMjQ3NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNDc2OlxcdFxcdH1cXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbjI0Nzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNDgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNDgxOlxcdFxcbjI0ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4yNDgzOlxcdH1cXG4yNDg0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG4yNDg1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMToxNy45MTY2OTAwOTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxODk4ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdldHNvY2tvcHQgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBnZXRzb2Nrb3B0YCBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoaXMgYGNvcHlfZnJvbV9zb2NrcHRyYCBjYWxsIHRoYXQncyBzdXBwb3NlZCB0byBncmFiIHRoZSBvcHRpb24gbGVuZ3RoLCBgb3B0bGVuYC4gTm93LCBpZiB0aGF0IGZhaWxzLCBgbWF4X29wdGxlbmAgZ2V0cyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlci5cblxuRG93bnN0cmVhbSwgd2UgcGFzcyB0aGlzIGBtYXhfb3B0bGVuYCB2YWx1ZSwgcG90ZW50aWFsbHkgemVybywgdG8gYEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVGAuIEluc2lkZSBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAsIHdlIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgbWF4X29wdGxlbmAgaXMgc3RvcmVkIGluIGBvcmlnX29wdGxlbmAsIGFuZCB0aGVuIHBhc3NlZCB0byBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCBpcyBxdWl0ZSBpbnRlcmVzdGluZy4gVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBidWZmZXIgaXMgZGV0ZXJtaW5lZCBieSBgc29ja29wdF9hbGxvY19idWZgLlxuXG5IZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGluaXRpYWwgYG1heF9vcHRsZW5gICppcyogemVybywgdGhlbiBgc29ja29wdF9hbGxvY19idWZgIHdpbGwgYWxsb2NhdGUgYSB6ZXJvLXNpemVkIGJ1ZmZlciBvciBtYXliZSBqdXN0IHVzZSB0aGUgc3RhY2sgYnVmZmVyIGFuZCByZXR1cm4gMC4gVGhpcyBpcyBwcm9iYWJseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhlIGxvZ2ljIHNlZW1zIHJpZ2h0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc29ja29wdF9hbGxvY19idWZgIGl0c2VsZiBoYW5kbGVzIHRoZSB6ZXJvIGNhc2UgcHJvcGVybHk7IGFueSBvZmYtYnktb25lIGVycm9ycyB0aGVyZSB3b3VsZCBiZSBjcml0aWNhbC4gTGV0IG1lIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhZ2Fpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIxOjIzLjUzNTY4MTkzOFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDA4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDA4OlxcdFxcbjIwMDk6XFx0XFx0cmV0dXJuIHJldDtcXG4yMDEwOlxcdH1cXG4yMDExOlxcdFxcbjIwMTI6XFx0I2lmZGVmIENPTkZJR19ORVRcXG4yMDEzOlxcdHN0YXRpYyBpbnQgc29ja29wdF9hbGxvY19idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCwgaW50IG1heF9vcHRsZW4sXFxuMjAxNDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcXG4yMDE1OlxcdHtcXG4yMDE2OlxcdFxcdGlmICh1bmxpa2VseShtYXhfb3B0bGVuIFxcdTAwM2MgMCkpXFxuMjAxNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDE4OlxcdFxcbjIwMTk6XFx0XFx0aWYgKHVubGlrZWx5KG1heF9vcHRsZW4gXFx1MDAzZSBQQUdFX1NJWkUpKSB7XFxuMjAyMDpcXHRcXHRcXHQvKiBXZSBkb24ndCBleHBvc2Ugb3B0dmFscyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gUEFHRV9TSVpFXFxuMjAyMTpcXHRcXHRcXHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXFxuMjAyMjpcXHRcXHRcXHQgKi9cXG4yMDIzOlxcdFxcdFxcdG1heF9vcHRsZW4gPSBQQUdFX1NJWkU7XFxuMjAyNDpcXHRcXHR9XFxuMjAyNTpcXHRcXG4yMDI2OlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2M9IHNpemVvZihidWYtXFx1MDAzZWRhdGEpKSB7XFxuMjAyNzpcXHRcXHRcXHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcXG4yMDI4OlxcdFxcdFxcdCAqIGJ5dGVzIGF2b2lkIHRoZSBjb3N0IG9mIGt6YWxsb2MuXFxuMjAyOTpcXHRcXHRcXHQgKi9cXG4yMDMwOlxcdFxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0gYnVmLVxcdTAwM2VkYXRhO1xcbjIwMzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHR2YWxfZW5kID0gY3R4LVxcdTAwM2VvcHR2YWwgKyBtYXhfb3B0bGVuO1xcbjIwMzI6XFx0XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjAzMzpcXHRcXHR9XFxuMjAzNDpcXHRcXG4yMDM1OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XFxuMjAzNjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlb3B0dmFsKVxcbjIwMzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cXHUwMDNlb3B0dmFsICsgbWF4X29wdGxlbjtcXG4yMDQwOlxcdFxcbjIwNDE6XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjA0MjpcXHR9XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcXG4yMDQ1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxcbjIwNDY6XFx0e1xcbjIwNDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3B0dmFsID09IGJ1Zi1cXHUwMDNlZGF0YSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjE6MjMuNTM1ODg0MzI4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDQxODY4OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gQlBGIFNvY2tvcHQgSG9vayBmb3IgQ29tcGF0IFN5c2NhbGxzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgZXhwb3NpbmcgQlBGIGhvb2tzIHRvIGNvbXBhdCBzeXNjYWxscyB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY3J1eCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpc19jb21wYXRgIGZsYWcgYW5kIGVuYWJsaW5nIEJQRiBob29rcyB0aGF0IHdlcmUgcHJldmlvdXNseSBieXBhc3NlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgY3JlYXRlIGFueSBsZWFrIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGtlcm5lbCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBtYXhfb3B0bGVuYCBzY2VuYXJpby4gSWYgYG1heF9vcHRsZW5gIGlzIHplcm8sIGFzIHRoZSBjb2RlIGRlbW9uc3RyYXRlcywgYW5kIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgcmV0dXJucyB6ZXJvLCB0aGUgc3Vic2VxdWVudCBgY29weV9mcm9tX3NvY2twdHJgIHdpbGwgY29weSB6ZXJvIGJ5dGVzLCBtYWtpbmcgdGhlIHNldHVwIHNhZmUuIEkgY29uZmlybWVkIHRoYXQgYG1heF9vcHRsZW5gIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHNvIG5vIHdvcnJpZXMgYWJvdXQgaXQgYmVpbmcgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuXG5cbkkgdGhlbiBjb25zaWRlcmVkIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIGhhbmRsZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCBmb2N1c2luZyBvbiB3aGVyZSB0aGUgYnVmZmVyIGlzIGFsbG9jYXRlZC4gYHNvY2tvcHRfYWxsb2NfYnVmYCBpcyB0aGUga2V5LiBUaGUgY29kZSB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciwgZGVjbGFyZWQgYXMgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCB3aGljaCBJJ20gY29uZmlkZW50IHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdCwgb3IgaXQgdXNlcyBga3phbGxvY2AsIHdoaWNoIEkga25vdyB6ZXJvZXMgdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuVGhlIGhvb2tzIGFsc28gdXNlIGBjb3B5X2Zyb21fc29ja3B0cmAgYW5kIGBjb3B5X3RvX3NvY2twdHJgLiBTaW5jZSB0aGUgYnVmZmVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgYW55IGJ5dGVzIG5vdCBvdmVyd3JpdHRlbiBlaXRoZXIgYnkgdXNlci1zcGFjZSBvciB0aGUgQlBGIHByb2dyYW0gd2lsbCByZW1haW4gemVybywgcHJldmVudGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay5cblxuSSBtb3ZlZCBvbiB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gbG9vayBhdCBob3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBUaGUgc2V0c29ja29wdCBoYW5kbGVyIGlzIGNhbGxlZCwgYW5kIHRoZSBrZXkgaXMgaWYgdGhlIEJQRiBwcm9ncmFtIHNldHMgYGtlcm5lbF9vcHR2YWxgLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgaXMgdXNlZCwgc28gaXQgaXMgZWl0aGVyIHplcm9lZCwgb3IgZmlsbGVkIGZyb20gdXNlciBzcGFjZS4gSW4gYGRvX3NvY2tfZ2V0c29ja29wdGAsIHRoZSBrZXJuZWwgaGFuZGxlciB3cml0ZXMgdG8gdGhlIGJ1ZmZlciwgQlBGIHByb2dyYW0gbWF5IG1vZGlmeSBpdCwgYW5kIHRoZW4gaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIGVpdGhlci5cblxuSSBhbHNvIGNoZWNrZWQgb3RoZXIgcGxhY2VzIHdoZXJlIGBjb21wYXRgIGlzIHVzZWQ6IGluIHRoZSB2YXJpb3VzIEJQRiBoZWFkZXIgZmlsZXMgYW5kIGluIHRoZSB0ZXN0IGZpbGVzLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBkb24ndCBzZWUgYW55IG90aGVyIGNvbmNlcm5pbmcgdXNlcy5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IEMgaW5pdGlhbGl6YXRpb24sIGFuZCBjb25maXJtZWQgdGhhdCBhIHN0cnVjdCBpbml0aWFsaXplZCB3aXRoIGB7fWAgb3IgYHswfWAgemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcgYW5kIGFycmF5cy4gSSBhbHNvIHZlcmlmaWVkIHRoYXQgYGt6YWxsb2NgIGRvZXMsIGluIGZhY3QsIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgY2hlY2tlZCB0aGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eCA9IHsgLi4uIH07YCBpbml0aWFsaXphdGlvbiBhcyB3ZWxsOyBhbGwgZmllbGRzIHdlcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gdGhpcyBsb29rcyBzb2xpZC5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJdCdzIHJlYWxseSBqdXN0IGEgZmVhdHVyZSBhZGRpdGlvbiAob3IgcGVyaGFwcyBhIGJ1ZyBmaXgpLCBzbyB0aGUgc3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gVGhlIGJ1ZmZlcnMgYXJlIGVpdGhlciBzdGFjay1hbGxvY2F0ZWQgYW5kIHplcm9lZCBvciBoZWFwLWFsbG9jYXRlZCBhbmQgemVyb2VkIHZpYSBga3phbGxvY2AsIGFuZCB0aGUgY29udGV4dCBpdHNlbGYgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLCBzbyBubyBpc3N1ZXMgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY4MywiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjE6NDMuOTc3NzU3OTI5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfY29tcGF0YCBmaWVsZCB0byB0aGUgQlBGIHNvY2tvcHQgY29udGV4dCBhbmQgZW5hYmxlcyBCUEYgaG9va3MgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgc3lzY2FsbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzIGFuZCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMuIFRoZSBidWZmZXJzIHVzZWQgZm9yIEJQRiBzb2Nrb3B0IGhvb2tzIGFyZSBhbGxvY2F0ZWQgdmlhIGBzb2Nrb3B0X2FsbG9jX2J1ZmAsIHdoaWNoIHVzZXMgZWl0aGVyIGEgc3RhY2sgYnVmZmVyIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O2Agb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuIFRoZXJlZm9yZSwgYWxsIG1lbW9yeSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgcGFzc2VkIHRvIGtlcm5lbCBoYW5kbGVycywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIGNvbnRleHQgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggemVyby1maWxsIHRoZSB1bmFzc2lnbmVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdrw8f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 12:00:53 +0000 UTC FinishedAt: 2026-08-13 12:21:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "COMPAT", "IA32_EMULATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "COMPAT", "IA32_EMULATION" ], "series_id": "c6228b20-fecb-4635-8e52-9e2ba88baf0d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "__cgroup_bpf_run_filter_setsockopt", "__cgroup_bpf_run_filter_getsockopt", "do_sock_setsockopt", "do_sock_getsockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7Q09NUEFUJiMzNDssCiAgICAmIzM0O0lBMzJfRU1VTEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX2dldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbkBAIC0xMzgsMTQgJiM0MzsxMzgsMTUgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbiBcdFx0XHRcdCAgIGNoYXIgKipidWYsIHNpemVfdCAqcGNvdW50LCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xuIFxuLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBpbnQgKmxldmVsLFxuLVx0XHRcdFx0ICAgICAgIGludCAqb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpO1xuJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgaW50ICpvcHRsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbi1cdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKTtcbiYjNDM7aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1heF9vcHRsZW4sIGludCByZXR2YWwpO1xuIFxuIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHRcdCAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLFxuQEAgLTM3NiwyMSAmIzQzOzM3NywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIH0pXG4gXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFxcXG4tXHRcdFx0XHQgICAgICAga2VybmVsX29wdHZhbClcdFx0XHQgICAgICAgXFxcbiYjNDM7I2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4mIzQzO1x0XHRcdFx0ICAgICAgIG9wdGxlbiwga2VybmVsX29wdHZhbClcdFx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IDA7XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuIFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcdFx0ICAgICAgIFxcXG4tXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCxcdCAgICAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bGVuLFx0ICAgICAgIFxcXG4mIzQzO1x0XHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcXFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXG4gXHRcdFx0XHRcdFx0XHQgICBrZXJuZWxfb3B0dmFsKTsgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpXHRcdCAgICAgICBcXFxuJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsICAgXFxcbiYjNDM7XHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpXHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gcmV0dmFsO1x0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfR0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG5AQCAtNDAwLDcgJiM0Mzs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFx0ICAgICAgIFxcXG4gXHRcdFx0XHRcdGxldmVsLCBvcHRuYW1lKSlcdFx0ICAgICAgIFxcXG4gXHRcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KFx0ICAgICAgIFxcXG4tXHRcdFx0XHRzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sXHQgICAgICAgXFxcbiYjNDM7XHRcdFx0XHRzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgIFxcXG4gXHRcdFx0XHRtYXhfb3B0bGVuLCByZXR2YWwpO1x0XHRcdCAgICAgICBcXFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIH0pXG5AQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKHNvY2tfb3BzKSAoeyAwOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19ERVZJQ0VfQ0dST1VQKGF0eXBlLCBtYWpvciwgbWlub3IsIGFjY2VzcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcXFxuJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHRcdCAgICBvcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbiYjNDM7I2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sIFxcXG4gXHRcdFx0XHQgICAgICAga2VybmVsX29wdHZhbCkgKHsgMDsgfSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9CUEYgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4ge1xuIFx0czMyXHRcdGxldmVsO1xuIFx0czMyXHRcdG9wdG5hbWU7XG4gXHRzMzJcdFx0b3B0bGVuO1xuJiM0MztcdHMzMlx0XHRpc19jb21wYXQ7XG4gXHQvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqL1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XG4gXHQvKiBUZW1wb3JhcnkgXCYjMzQ7cmVnaXN0ZXJcJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICYjNDM7NzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuJiM0MztcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA4ZmJjOTQyYTFjYzNhLi45MTA4NzhlOTkxYTA0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTIwNTUsNyAmIzQzOzIwNTUsNyBAQCBzdGF0aWMgYm9vbCBzb2Nrb3B0X2J1Zl9hbGxvY2F0ZWQoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbiBcdHJldHVybiBjdHgtXHUwMDNlb3B0dmFsICE9IGJ1Zi1cdTAwM2VkYXRhO1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4mIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbClcbiB7XG5AQCAtMjA2NSw2ICYjNDM7MjA2NSw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9ICpsZXZlbCxcbiBcdFx0Lm9wdG5hbWUgPSAqb3B0bmFtZSxcbiYjNDM7XHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHR9O1xuIFx0aW50IHJldCwgbWF4X29wdGxlbjtcbiBcbkBAIC0yMTQ2LDcgJiM0MzsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4mIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbiBcdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKVxuQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9IGxldmVsLFxuIFx0XHQub3B0bmFtZSA9IG9wdG5hbWUsXG4mIzQzO1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbiBcdH07XG4gXHRpbnQgb3JpZ19vcHRsZW47XG5AQCAtMjcwNSw2ICYjNDM7MjcwNyw5IEBAIHN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdCppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KTpcbiYjNDM7XHRcdCppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChpc19jb21wYXQpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcbiBcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMzQ2LDEwICYjNDM7MjM0Niw5IEBAIGludCBkb19zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmtlcm5lbF9vcHR2YWwpO1xuJiM0MztcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIFx1MDAyNmxldmVsLCBcdTAwMjZvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMjQ0Nyw4ICYjNDM7MjQ0Niw3IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4mIzQzO1x0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuJiM0MztcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgZXJyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICYjNDM7NzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuJiM0MztcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXG5AQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xuIFx0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2NyID0gXCYjMzQ7Z2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCYjMzQ7LFxuJiM0MztcdFx0Lmluc25zID0ge1xuJiM0MztcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbiYjNDM7XHRcdFx0QlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLFxuJiM0MztcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuJiM0MztcbiYjNDM7XHRcdFx0LyogaWYgKGN0eC1cdTAwM2Vpc19jb21wYXQgPT0gMCkgeyAqL1xuJiM0MztcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuJiM0MztcdFx0XHQvKiBjdHgtXHUwMDNlcmV0dmFsID0gMCAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbiYjNDM7XHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcbiYjNDM7XHRcdFx0LyogcmV0dXJuIDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfSk1QX0EoMSksXG4mIzQzO1x0XHRcdC8qIH0gZWxzZSB7ICovXG4mIzQzO1x0XHRcdC8qIHJldHVybiAwICovXG4mIzQzO1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbiYjNDM7XHRcdFx0LyogfSAqL1xuJiM0MztcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuJiM0MztcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuJiM0MztcbiYjNDM7XHRcdC5nZXRfbGV2ZWwgPSBTT0xfSVAsXG4mIzQzO1x0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4mIzQzO1x0XHQuZ2V0X29wdGxlbiA9IDEsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtnZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwmIzM0OyxcbiYjNDM7XHRcdC5pbnNucyA9IHtcbiYjNDM7XHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4mIzQzO1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4mIzQzO1xuJiM0MztcdFx0LmVycm9yID0gREVOWV9MT0FELFxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlb3B0bmFtZVwmIzM0OyxcbiBcdFx0Lmluc25zID0ge1xuQEAgLTYwOSw2ICYjNDM7NjUyLDQ5IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbiBcdFx0LmdldF9vcHR2YWwgPSB7IDEgXHUwMDNjXHUwMDNjIDMgfSxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcJiMzNDssXG4mIzQzO1x0XHQuaW5zbnMgPSB7XG4mIzQzO1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuJiM0MztcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1xuJiM0MztcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4mIzQzO1x0XHRcdEJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksXG4mIzQzO1x0XHRcdC8qIGN0eC1cdTAwM2VvcHRsZW4gPSAtMSAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLTEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXG4mIzQzO1x0XHRcdC8qIHJldHVybiAxICovXG4mIzQzO1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiYjNDM7XHRcdFx0QlBGX0pNUF9BKDEpLFxuJiM0MztcdFx0XHQvKiB9IGVsc2UgeyAqL1xuJiM0MztcdFx0XHQvKiByZXR1cm4gMCAqL1xuJiM0MztcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRcdC8qIH0gKi9cbiYjNDM7XHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbiYjNDM7XHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbiYjNDM7XG4mIzQzO1x0XHQuc2V0X29wdG5hbWUgPSAxMjMsXG4mIzQzO1x0XHQuc2V0X29wdGxlbiA9IDEsXG4mIzQzO1x0XHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzY3IgPSBcJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwmIzM0OyxcbiYjNDM7XHRcdC5pbnNucyA9IHtcbiYjNDM7XHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbiYjNDM7XHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuJiM0MztcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4mIzQzO1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4mIzQzO1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4mIzQzO1xuJiM0MztcdFx0LmVycm9yID0gREVOWV9MT0FELFxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LVx1MDAzZW9wdGxlblwmIzM0OyxcbiBcdFx0Lmluc25zID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAppbmRleCA0ZDBjYzY1OTc2YTE0Li45NDNlYjAyM2I1MmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaApAQCAtMTM4LDE0ICYjNDM7MTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsCiAJCQkJICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcywKIAkJCQkgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCwKLQkJCQkgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJCSAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwomIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBib29sIGNvbXBhdCwKJiM0MzsJCQkJICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLAomIzQzOwkJCQkgICAgICAgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKLQkJCQkgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLAotCQkJCSAgICAgICBpbnQgcmV0dmFsKTsKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LAomIzQzOwkJCQkgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkJCSAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7CiAKIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCQkJCSAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLApAQCAtMzc2LDIxICYjNDM7Mzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssCiAJX19yZXQ7CQkJCQkJCQkgICAgICAgXAogfSkKIAotI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFwKLQkJCQkgICAgICAga2VybmVsX29wdHZhbCkJCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpCQkgICAgICAgXAogKHsJCQkJCQkJCQkgICAgICAgXAogCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgICBcCiAJaWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgJmFtcDsmYW1wOwkJCSAgICAgICBcCiAJICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSkJCSAgICAgICBcCi0JCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCwJICAgICAgIFwKLQkJCQkJCQkgICBvcHRuYW1lLCBvcHR2YWwsICAgIFwKLQkJCQkJCQkgICBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQlfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcCiYjNDM7CQkJCQkJCSAgIGxldmVsLCBvcHRuYW1lLCAgICAgXAomIzQzOwkJCQkJCQkgICBvcHR2YWwsIG9wdGxlbiwgICAgIFwKIAkJCQkJCQkgICBrZXJuZWxfb3B0dmFsKTsgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQogCi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXAotCQkJCSAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkJICAgICAgIFwKICh7CQkJCQkJCQkJICAgICAgIFwKIAlpbnQgX19yZXQgPSByZXR2YWw7CQkJCQkJICAgICAgIFwKIAlpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSAmYW1wOyZhbXA7CQkJICAgICAgIFwKQEAgLTQwMCw3ICYjNDM7NDAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCwJICAgICAgIFwKIAkJCQkJbGV2ZWwsIG9wdG5hbWUpKQkJICAgICAgIFwKIAkJCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCgJICAgICAgIFwKLQkJCQlzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQkJCXNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXAogCQkJCW1heF9vcHRsZW4sIHJldHZhbCk7CQkJICAgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQpAQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFMoc29ja19vcHMpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKIAkJCQkgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAogCQkJCQkgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcCiAJCQkJICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pCiAKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gewogCXMzMgkJbGV2ZWw7CiAJczMyCQlvcHRuYW1lOwogCXMzMgkJb3B0bGVuOwomIzQzOwlzMzIJCWlzX2NvbXBhdDsKIAkvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrOwogCS8qIFRlbXBvcmFyeSAmIzM0O3JlZ2lzdGVyJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTc2MTYsNiAmIzQzOzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQgewogCV9fczMyCW9wdG5hbWU7CiAJX19zMzIJb3B0bGVuOwogCV9fczMyCXJldHZhbDsKJiM0MzsJX19zMzIJaXNfY29tcGF0OwogfTsKIAogc3RydWN0IGJwZl9waWRuc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMjA1NSw3ICYjNDM7MjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LAogCXJldHVybiBjdHgtJmd0O29wdHZhbCAhPSBidWYtJmd0O2RhdGE7CiB9CiAKLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLAogCQkJCSAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCkKIHsKQEAgLTIwNjUsNiAmIzQzOzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsCiAJCS5zayA9IHNrLAogCQkubGV2ZWwgPSAqbGV2ZWwsCiAJCS5vcHRuYW1lID0gKm9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCX07CiAJaW50IHJldCwgbWF4X29wdGxlbjsKIApAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbiwKIAkJCQkgICAgICAgaW50IHJldHZhbCkKQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJLnNrID0gc2ssCiAJCS5sZXZlbCA9IGxldmVsLAogCQkub3B0bmFtZSA9IG9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCQkuY3VycmVudF90YXNrID0gY3VycmVudCwKIAl9OwogCWludCBvcmlnX29wdGxlbjsKQEAgLTI3MDUsNiAmIzQzOzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWVsc2UKIAkJCSppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pOwogCQlicmVhazsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6CiYjNDM7CQkqaW5zbiYjNDM7JiM0MzsgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTsKJiM0MzsJCWJyZWFrOwogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpOgogCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KSAhPSAwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmY0NTQ5OTc1Zjk4YjkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIzNDYsMTAgJiM0MzsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWlmICghY29tcGF0KQotCQllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKLQkJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKLQkJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKJiM0MzsJZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stJmd0O3NrLCBjb21wYXQsICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKJiM0MzsJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKJiM0MzsJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0OwogCWlmIChlcnIgJmd0OyAwKSB7CkBAIC0yNDQ3LDggJiM0MzsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWNvbXBhdCkKLQkJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKJiM0MzsJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKIAogCW9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7CkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCwKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKCFjb21wYXQpCi0JCWVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLSZndDtzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAotCQkJCQkJICAgICBlcnIpOwomIzQzOwllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsCiYjNDM7CQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAomIzQzOwkJCQkJICAgICBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC03NjE2LDYgJiM0Mzs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHsKIAlfX3MzMglvcHRuYW1lOwogCV9fczMyCW9wdGxlbjsKIAlfX3MzMglyZXR2YWw7CiYjNDM7CV9fczMyCWlzX2NvbXBhdDsKIH07CiAKIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMKaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYwpAQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdG5hbWUgPSBJUF9UT1MsCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtyZXR2YWwgPSAwICovCiYjNDM7CQkJQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLAomIzQzOwkJCUJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKSksCiYjNDM7CQkJLyogcmV0dXJuIDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX0pNUF9BKDEpLAomIzQzOwkJCS8qIH0gZWxzZSB7ICovCiYjNDM7CQkJLyogcmV0dXJuIDAgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQkJLyogfSAqLwomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZ2V0X2xldmVsID0gU09MX0lQLAomIzQzOwkJLmdldF9vcHRuYW1lID0gSVBfVE9TLAomIzQzOwkJLmdldF9vcHRsZW4gPSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O2lzX2NvbXBhdCYjMzQ7LAomIzQzOwkJLmluc25zID0gewomIzQzOwkJCS8qIGN0eC0mZ3Q7aXNfY29tcGF0ID0gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsCiYjNDM7CQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLAomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZXJyb3IgPSBERU5ZX0xPQUQsCiYjNDM7CX0sCiAJewogCQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O29wdG5hbWUmIzM0OywKIAkJLmluc25zID0gewpAQCAtNjA5LDYgJiM0Mzs2NTIsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdHZhbCA9IHsgMSAmbHQ7Jmx0OyAzIH0sCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtvcHRsZW4gPSAtMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBvcHRsZW4pKSwKJiM0MzsJCQkvKiByZXR1cm4gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfSk1QX0EoMSksCiYjNDM7CQkJLyogfSBlbHNlIHsgKi8KJiM0MzsJCQkvKiByZXR1cm4gMCAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSwKJiM0MzsJCQkvKiB9ICovCiYjNDM7CQkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwkJfSwKJiM0MzsJCS5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsJCS5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsKJiM0MzsJCS5zZXRfb3B0bmFtZSA9IDEyMywKJiM0MzsJCS5zZXRfb3B0bGVuID0gMSwKJiM0MzsJCS5pb191cmluZ19zdXBwb3J0ID0gdHJ1ZSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiBjdHgtJmd0O2lzX2NvbXBhdCA9IDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsJCQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQl9LAomIzQzOwkJLmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwkJLmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwomIzQzOwkJLmVycm9yID0gREVOWV9MT0FELAomIzQzOwl9LAogCXsKIAkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC0mZ3Q7b3B0bGVuJiMzNDssCiAJCS5pbnNucyA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGJlaGF2ZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBjb21wYXRgIGZsYWcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGEgY2FyZWZ1bCBsb29rLiBMZXQmIzM5O3Mgc2VlLi4uCgpGcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgdG91Y2hlcyB0aGUgY29yZSBCUEYgY2dyb3VwIGluZnJhc3RydWN0dXJlIGluIGBicGYtY2dyb3VwLmhgIGFuZCBgY2dyb3VwLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYHNvY2tldC5jYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHN5c2NhbGxzIGFyZSBoYW5kbGVkLCBhbmQgY3J1Y2lhbGx5LCBhZGRpbmcgYGlzX2NvbXBhdGAgdG8gdGhlIGBicGZfc29ja29wdGAgc3RydWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgQlBGIHByb2dyYW1zIHdpbGwgbm93IGJlIGludm9rZWQgaW4gdGhlIGNvbnRleHQgb2YgYGNvbXBhdGAgc3lzdGVtIGNhbGxzLiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgaW4gYHNvY2tvcHQuY2AgaXMgaW1wb3J0YW50LCB0aG91Z2gsIHRvIGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlbW92aW5nIHRoZSBgaWYgKCFjb21wYXQpYCBjaGVja3MgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiAgWWVzLCB0aGUgY29kZSBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBwYXRjaCBub3cgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVzIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgIGFuZCBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYCByZWdhcmRsZXNzIG9mIHRoZSBgY29tcGF0YCBmbGFnJiMzOTtzIHN0YXRlLCBhZnRlciBjaGVja2luZyBgbmV0L3NvY2tldC5jYCB0byBzZWUgaWYgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSBgY29tcGF0YCBhcyB3ZWxsLCBhcyB3aXRoIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBUaGlzIG1lYW5zIHRoYXQgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0ICpjb21wYXQqIHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgY2FsbHMuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuCgpUaGlzIG9wZW5zIHVwIGEgbmV3IHNldCBvZiBjYXBhYmlsaXRpZXMgZm9yIEJQRiBwcm9ncmFtcywgYnV0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdCBjYXJlZnVsbHkuCgpOb3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTtkIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGFuIG9idmlvdXMgcHJlcmVxdWlzaXRlLiAgU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb21wYXQgc3lzY2FsbHMsIGBDT05GSUdfQ09NUEFUYCB3aWxsIGFsc28gYmUgcmVxdWlyZWQuICBMb29raW5nIGF0IHRoZSBgbmV0L3NvY2tldC5jYCwgSSBzZWUgdGhhdCBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyBpbmRlZWQgY2FsbGVkIGJ5IGJvdGggYF9fc3lzX3NldHNvY2tvcHRgIGFuZCBgX19jb21wYXRfc3lzX3NldHNvY2tvcHRgLCBjZW1lbnRpbmcgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yMzMwPXN0YXRpYyBib29sIHNvY2tfdXNlX2N1c3RvbV9zb2xfc29ja2V0KGNvbnN0IHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3NvY2tldC5jLTIzMzQtXG5uZXQvc29ja2V0LmM6MjMzNTppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG5uZXQvc29ja2V0LmMtMjMzNi1cdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9zb2NrZXQuYy0yMzcyLX1cbm5ldC9zb2NrZXQuYzoyMzczOkVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcbm5ldC9zb2NrZXQuYy0yMzc0LVxuLS1cbm5ldC9zb2NrZXQuYz0yMzc4PWludCBfX3N5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKnVzZXJfb3B0dmFsLFxuLS1cbm5ldC9zb2NrZXQuYy0yMzkxLVxubmV0L3NvY2tldC5jOjIzOTI6XHRyZXR1cm4gZG9fc29ja19zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9zb2NrZXQuYy0yMzkzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCwgYW5kIEkga25vdyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19zeXNfc2V0c29ja29wdGAgc3lzdGVtIGNhbGwgaGFuZGxlci4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQgZnJvbSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzICpjYWxsaW5nKiBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzb2NrZXRzIGFyZSBiZWluZyBjb25maWd1cmVkIGZyb20gdGhlIHVzZXIgc3BhY2UuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIG1ha2luZyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zeXNfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc29ja2V0LmM9MjM3Mz1FWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XG4tLVxubmV0L3NvY2tldC5jLTIzNzctICovXG5uZXQvc29ja2V0LmM6MjM3ODppbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbm5ldC9zb2NrZXQuYy0yMzc5LVx0XHQgICAgIGludCBvcHRsZW4pXG4tLVxubmV0L3NvY2tldC5jPTIzOTU9U1lTQ0FMTF9ERUZJTkU1KHNldHNvY2tvcHQsIGludCwgZmQsIGludCwgbGV2ZWwsIGludCwgb3B0bmFtZSxcbi0tXG5uZXQvc29ja2V0LmMtMjM5Ny17XG5uZXQvc29ja2V0LmM6MjM5ODpcdHJldHVybiBfX3N5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3NvY2tldC5jLTIzOTktfVxuLS1cbm5ldC9zb2NrZXQuYz0zMTcwPVNZU0NBTExfREVGSU5FMihzb2NrZXRjYWxsLCBpbnQsIGNhbGwsIHVuc2lnbmVkIGxvbmcgX191c2VyICosIGFyZ3MpXG4tLVxubmV0L3NvY2tldC5jLTMyNDYtXHRjYXNlIFNZU19TRVRTT0NLT1BUOlxubmV0L3NvY2tldC5jOjMyNDc6XHRcdGVyciA9IF9fc3lzX3NldHNvY2tvcHQoYTAsIGExLCBhWzJdLCAoY2hhciBfX3VzZXIgKilhWzNdLFxubmV0L3NvY2tldC5jLTMyNDgtXHRcdFx0XHQgICAgICAgYVs0XSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBLZXJuZWwgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBhIHNwZWNpZmljIHNvY2tldCBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdoZXJlIGBjb21wYXRgIGlzIHN1cHBvc2VkIHRvIGJlIHBhc3NlZCB0byBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgcmlnaHQ/IEhtbSwgaGFuZyBvbiBhIHNlY29uZC4uLiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYF9fc3lzX3NldHNvY2tvcHRg4oCmIG5vcGUsIGl0IGRvZXNuJiMzOTt0IGV2ZW4gKnRha2UqIGEgYGNvbXBhdGAgcGFyYW1ldGVyIGRpcmVjdGx5LiBUaGF0JiMzOTtzIG9kZC4KCkFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0LiBTaW5jZSBgX19zeXNfc2V0c29ja29wdGAgaXMgb2J2aW91c2x5IHRoZSBzeXN0ZW0gY2FsbCB3cmFwcGVyLCB0aGVyZSBtdXN0IGJlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbiBjYWxsIHdpdGhpbiBpdCB0byBoYW5kbGUgdGhlIGNvcmUgbG9naWMuIE9rYXksIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgZG9fc29ja19zZXRzb2Nrb3B0YCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVGhhdCBzb3VuZHMgcmlnaHQuIFNvLCAqdGhhdCYjMzk7cyogcHJvYmFibHkgd2hlcmUgYGNvbXBhdGAgaXMgZWl0aGVyIGJlaW5nIHVzZWQsIG9yIGJlaW5nIHBhc3NlZCBmdXJ0aGVyIGFsb25nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIGRpZyBpbnRvIGBfX3N5c19zZXRzb2Nrb3B0YCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNzg6XHRpbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcbjIzNzk6XHRcdFx0ICAgICBpbnQgb3B0bGVuKVxuMjM4MDpcdHtcbjIzODE6XHRcdHNvY2twdHJfdCBvcHR2YWwgPSBVU0VSX1NPQ0tQVFIodXNlcl9vcHR2YWwpO1xuMjM4MjpcdFx0Ym9vbCBjb21wYXQgPSBpbl9jb21wYXRfc3lzY2FsbCgpO1xuMjM4MzpcdFx0c3RydWN0IHNvY2tldCAqc29jaztcbjIzODQ6XHRcdENMQVNTKGZkLCBmKShmZCk7XG4yMzg1Olx0XG4yMzg2Olx0XHRpZiAoZmRfZW1wdHkoZikpXG4yMzg3Olx0XHRcdHJldHVybiAtRUJBREY7XG4yMzg4Olx0XHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmRfZmlsZShmKSk7XG4yMzg5Olx0XHRpZiAodW5saWtlbHkoIXNvY2spKVxuMjM5MDpcdFx0XHRyZXR1cm4gLUVOT1RTT0NLO1xuMjM5MTpcdFxuMjM5MjpcdFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yMzkzOlx0fVxuMjM5NDpcdFxuMjM5NTpcdFNZU0NBTExfREVGSU5FNShzZXRzb2Nrb3B0LCBpbnQsIGZkLCBpbnQsIGxldmVsLCBpbnQsIG9wdG5hbWUsXG4yMzk2Olx0XHRcdGNoYXIgX191c2VyICosIG9wdHZhbCwgaW50LCBvcHRsZW4pXG4yMzk3Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNldHNvY2tvcHQgQ29tcGF0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYGluX2NvbXBhdF9zeXNjYWxsKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYGNvbXBhdGAgc3lzdGVtIGNhbGwuIFRoZSBleGlzdGluZyBgX19zeXNfc2V0c29ja29wdGAgb2J2aW91c2x5IGhhbmRsZXMgYm90aCBgY29tcGF0YCBhbmQgbm9uLWBjb21wYXRgIGNhbGxzLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gaW52b2tlIGBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFRgIGFuZCBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYCwgKnJlZ2FyZGxlc3MqIG9mIHdoZXRoZXIgYGNvbXBhdGAgaXMgdHJ1ZS4KCkVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgQlBGIGNncm91cCBwcm9ncmFtcyBjYW4gbm93IGludGVyY2VwdCBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBjYWxscywgZXZlbiB3aGVuIHRoZXkmIzM5O3JlIGNvbWluZyBmcm9tIGEgYGNvbXBhdGAgY29udGV4dC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmaWx0ZXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZXNlIG9sZGVyIHN5c3RlbSBjYWxscyBpbiBhIGNncm91cCBjb250ZXh0LCB3aGljaCB3YXMgcHJldmlvdXNseSBub3QgcG9zc2libGUuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIGNoYW5nZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhcyBhIGJhc2UgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gQW5kLCBzaW5jZSB0aGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGBpbl9jb21wYXRfc3lzY2FsbCgpYCByZXR1cm5pbmcgYHRydWVgIHVuZGVyIHRoZSByaWdodCBjaXJjdW1zdGFuY2VzLCBgQ09ORklHX0NPTVBBVGAgaXMgY2xlYXJseSBnb2luZyB0byBiZSBlc3NlbnRpYWwgYXMgd2VsbC4KCk5leHQsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCB0byBzZWUgdGhlIGV4YWN0IGRldGFpbHMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBpbnRlcmNlcHRlZCBhbmQgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0yMDUyPXN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjA1Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjA1ODppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMDU5LVx0XHRcdFx0ICAgICAgIGludCAqb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgQlBGIFNvY2tldCBGaWx0ZXJpbmcgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGF0IHNldCBsb29rcyBsaWtlIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gaG93IEJQRiBmaWx0ZXJpbmcgaXMgaW50ZWdyYXRlZCB3aXRoIHNvY2tldCBvcHRpb25zLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGFuZCB0aGF0IGZhbWlseSBhcyBpbnRlcm5hbCwgYnV0IGlzIGl0IGFjdHVhbGx5IGV4cG9ydGVkPyBMZXQgbWUganVzdCBjb25maXJtIHdoZXJlIGl0JiMzOTtzIGRlZmluZWTigKYgcmlnaHQsIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gT2theSwgc28gaXTigJlzIG5vdCAqbGlrZWx5KiB0byBiZSBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBpdCYjMzk7cyBnb3QgdGhlIGBzdGF0aWNgIGtleXdvcmQgYXR0YWNoZWQgdG8gaXQsIGp1c3QgdG8gYmUgc3VyZS4uLiBub3BlLCBubyBgc3RhdGljYC4gTGV0JiMzOTtzIGdldCB0byB3b3JrIGNoZWNraW5nIG91dCBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0yMDU4PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTQ5LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMTUwOmludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjE1MS1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyMzUtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIyMzY6aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjIzNy1cdFx0XHRcdFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjUxLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjUyOlx0LyogTm90ZSB0aGF0IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQgZG9lc24mIzM5O3QgY29weVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMjUzLVx0ICogdXNlciBkYXRhIGJhY2sgaW50byBCUEYgYnVmZmVyIHdoZW4gcmV2YWwgIT0gMC4gVGhpcyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbCBpbiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGV5JiMzOTtyZSBub3Qgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gYENPTkZJR19DR1JPVVBfQlBGYCBpcyB0aGUgb2J2aW91cyBrZXkgZW5hYmxpbmcgZmFjdG9yLiBCdXQgdG8gZXhwbG9yZSBtb3JlIGNvZGUsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19DT01QQVRgIGlzIGNyaXRpY2FsIHRvIHRyaWdnZXIgdGhlICYjMzQ7Y29tcGF0JiMzNDsgcGF0aC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19DT01QQVRgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0IGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB1c3VhbGx5IHRlbGxzIG1lIHRoYXQgYENPTkZJR19DT01QQVRgIHRlbmRzIHRvIGJlIGVuYWJsZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDMyLWJpdCBiaW5hcmllcy4gVG8gY29uZmlybSB0aGlzLCBJJiMzOTtsbCBjb25zdWx0IHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB0aGUgZXhhY3QgcmVxdWlyZW1lbnRzIGZvciBgQ09ORklHX0NPTVBBVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQVQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xNzQ2PWNvbmZpZyBBUk02NF9UQUdHRURfQUREUl9BQklcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzU1Om1lbnVjb25maWcgQ09NUEFUXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBFTDBcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0zMDc4PWNvbmZpZyBNSVBTMzJfQ09NUEFUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cbmFyY2gvbWlwcy9LY29uZmlnOjMwODE6Y29uZmlnIENPTVBBVFxuYXJjaC9taXBzL0tjb25maWctMzA4Mi1cdGJvb2xcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTM1OD1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvcGFyaXNjL0tjb25maWctMzU5LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNjEtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0zNTEtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE0LVxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XG5hcmNoL3NwYXJjL0tjb25maWctNDQ4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjQ0OTpjb25maWcgQ09NUEFUXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWc9MzExND1jb25maWcgQ09NUEFUXzMyXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMTE5LVxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcbmFyY2gveDg2L0tjb25maWctMzEyMS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24gZm9yIENPTVBBVCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgQ09NUEFUYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBvbiB4ODYsIHRoZSBkZWZpbml0aW9uIG9mIGBDT01QQVRgIGFwcGVhcnMgdG8gYmUgYSBgZGVmX2Jvb2wgeWAgKGRlZmluZWQgYm9vbGVhbiAmIzM5O3llcyYjMzk7KSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIFRoZSByZWxldmFudCBjb25kaXRpb25zIGFyZSBpZiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCAoMzItYml0IGVtdWxhdGlvbiBzdXBwb3J0KSBvciBgWDg2X1gzMl9BQklgICh4MzIgQUJJIHN1cHBvcnQpIGlzIGVuYWJsZWQuIFNvLCBpbiBvdGhlciB3b3JkcywgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvbGRlciAzMi1iaXQgYXBwbGljYXRpb25zIG9uIGEgNjQtYml0IHN5c3RlbSwgb3IgdGhlIHgzMiBBQkksIHdlIGxpa2VseSB3YW50IGBDT01QQVRgIHRvIGJlIGVuYWJsZWQsIGhlbmNlIHRoZSAmIzM5O3kmIzM5Oy4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhpcyBieSBkaXJlY3RseSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gTGV0IG1lIHF1aWNrbHkgZ28gY2hlY2sgYGFyY2gveDg2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlc2UgY29uZGl0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzExNTpcdFx0ZGVmX2Jvb2wgeVxuMzExNjpcdFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfMzJcbjMxMTc6XHRcdHNlbGVjdCBIQVZFX1VJRDE2XG4zMTE4Olx0XHRzZWxlY3QgT0xEX1NJR1NVU1BFTkQzXG4zMTE5Olx0XG4zMTIwOlx0Y29uZmlnIENPTVBBVFxuMzEyMTpcdFx0ZGVmX2Jvb2wgeVxuMzEyMjpcdFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfWDMyX0FCSVxuMzEyMzpcdFxuMzEyNDpcdGNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcbjMxMjU6XHRcdGRlZl9ib29sIHlcbjMxMjY6XHRcdGRlcGVuZHMgb24gQ09NUEFUXG4zMTI3Olx0XG4zMTI4Olx0ZW5kbWVudVxuMzEyOTpcdFxuMzEzMDpcdGNvbmZpZyBIQVZFX0FUT01JQ19JT01BUFxuMzEzMTpcdFx0ZGVmX2Jvb2wgeVxuMzEzMjpcdFx0ZGVwZW5kcyBvbiBYODZfMzJcbjMxMzM6XHRcbjMxMzQ6XHRzb3VyY2UgXCYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipSZWZsZWN0aW5nIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyBgQ09NUEFUYCBmdW5jdGlvbmFsaXR5IG9uIHg4NiBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSUEzMl9FTVVMQVRJT05gIGlzIGFjdGl2ZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBhcmNoaXRlY3R1cmVzIG9mdGVuIHJlbGllcyBvbiB0aGlzIGtpbmQgb2YgY29uZGl0aW9uYWwgZW5hYmxpbmcuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGJvdGggYENHUk9VUF9CUEZgIGFuZCBgQ09NUEFUYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgaXMga2V5IHRvIGVuc3VyaW5nIHRoYXQgb3VyIGJ1aWxkcyBhbmQgY29uZmlndXJhdGlvbnMgbGV2ZXJhZ2UgdGhlIGFwcHJvcHJpYXRlIGZlYXR1cmVzLgoKSGFuZyBvbiBhIHNlY29uZOKApkkgc2VlIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGp1c3QgZW5hYmxlIGZlYXR1cmVzLCBpdCYjMzk7cyAqbW9kaWZ5aW5nKiBjb3JlIEJQRiBjb2RlIHdpdGhpbiB0aGUgY2dyb3VwIGNvbnRleHQuIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgaW50ZXJhY3Rpb24gb2Ygc29ja2V0IG9wdGlvbnMgYW5kIHRoZSBjZ3JvdXAgQlBGLiBUaGlzIGNvdWxkIGJlIGFib3V0IHNlY3VyaXR5IGltcGxpY2F0aW9ucywgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9yIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucy4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGFuZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTI2MDY9c3RhdGljIGJvb2wgY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjc5LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjgwOnN0YXRpYyB1MzIgY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4MS1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzcwPWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc3Mi1cdC5pc192YWxpZF9hY2Nlc3NcdD0gY2dfc29ja29wdF9pc192YWxpZF9hY2Nlc3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NzM6XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzc0LVx0Lmdlbl9wcm9sb2d1ZVx0XHQ9IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQ2dyb3VwIFNvY2tvcHQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG5vIG5lZWQgdG8gaW5jbHVkZSBpdCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhhdOKAmXMgYSBuby1icmFpbmVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHplcm8gaW4gb24gYXJlOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4KCldhaXQgYSBtaW51dGUuLi4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgIGFyZSBhY3R1YWxseSBkZWZpbmVkIGluIGBuZXQvc29ja2V0LmNgLCBhbmQgdGhleSYjMzk7cmUgbm90IHN0YXRpYzsgdGhleSYjMzk7cmUgZXhwb3J0ZWQuIFBlcmZlY3QuIFRoYXQmIzM5O3MgZ29vZCBpbnRlbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gQWxyaWdodCwgYF9fc3lzX3NldHNvY2tvcHRgIGFuZCBgX19zeXNfZ2V0c29ja29wdGAgYXJlIGluIHRoZSBwaWN0dXJlIHRvbywgYnV0IHRoZXkmIzM5O3JlIGp1c3QgdGhpbiB3cmFwcGVycy4gU28sIHN0aWNrIHdpdGggYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGV5IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBgQ0dST1VQX0JQRmAuIFl1cCwgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBjb25maWcgbmFtZTogYENPTkZJR19DR1JPVVBfQlBGYC4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBzeW1ib2xzLgoKQWxyaWdodCwgdGltZSBmb3IgYSBjb25jaXNlIHN1bW1hcnkuCgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS4KKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgCiAgICAqICAgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgCiAgICAqICAgYGRvX3NvY2tfc2V0c29ja29wdGAKICAgICogICBgZG9fc29ja19nZXRzb2Nrb3B0YAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYENHUk9VUF9CUEZgCiAgICAqICAgYENPTVBBVGAgKGltcG9ydGFudCBmb3IgZXhlcmNpc2luZyB0aGUgY29tcGF0IHBhdGhzKQoKKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MuIEl0IG5vdyBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgZm9yICpjb21wYXQqIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLCB3aGVyZWFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IGJ5cGFzc2VkLiBUaGF0JiMzOTtzIGEgaHVnZSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgbm93IGV4cG9zaW5nIHRob3NlIGhvb2tzIHRvIGEgbmV3IGF0dGFjayBzdXJmYWNlLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byBmdXp6IHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9ucy4gQWRkaW5nIHRoZSBgaXNfY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgY29udGV4dCBpcyBhbHNvIHNpZ25pZmljYW50LiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIHZlY3RvciBmb3IgZnV6emluZy4KCk9rLCBqdXN0IHF1aWNrbHkgdmVyaWZ5aW5nIGBkb19zb2NrX2dldHNvY2tvcHRgLiBBbGwgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yNDEwPXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDM1LVxubmV0L3NvY2tldC5jOjI0MzY6aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxubmV0L3NvY2tldC5jLTI0MzctXHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvc29ja2V0LmMtMjQ4My19XG5uZXQvc29ja2V0LmM6MjQ4NDpFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG5uZXQvc29ja2V0LmMtMjQ4NS1cbi0tXG5uZXQvc29ja2V0LmM9MjQ5MD1pbnQgX19zeXNfZ2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxubmV0L3NvY2tldC5jLTI1MDEtXG5uZXQvc29ja2V0LmM6MjUwMjpcdHJldHVybiBkb19zb2NrX2dldHNvY2tvcHQoc29jaywgaW5fY29tcGF0X3N5c2NhbGwoKSwgbGV2ZWwsIG9wdG5hbWUsXG5uZXQvc29ja2V0LmMtMjUwMy1cdFx0XHRcdCBVU0VSX1NPQ0tQVFIob3B0dmFsKSwgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEJQRiBDZ3JvdXAgU29ja29wdCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSBjb25maXJtZWQgdGhhdCBgZG9fc29ja19nZXRzb2Nrb3B0YCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgQlBGIGNncm91cCBzb2Nrb3B0IGZ1bmN0aW9uYWxpdHkuIExldCBtZSBzZWUuLi4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIGFueSBCUEYgdXNhZ2UsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgY2hlY2tsaXN0LiBUaGVuLCBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIHRvIHN1cHBvcnQgQlBGIHdpdGggY2dyb3Vwcy4gQW5kIHdhaXQsIHRoYXQgZGVwZW5kcyBvbiBib3RoIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBhbHNvIGBDT05GSUdfQ0dST1VQU2AuIEdvdCBpdC4gU28sIHRvIGdldCB0aGlzIHdvcmtpbmcsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSB0aHJlZSBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM0ND1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM1NC1cbmluaXQvS2NvbmZpZzoxMzU1OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1Ni1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBpbml0L0tjb25maWdgIGZvciBgQ0dST1VQX0JQRmA6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIENHUk9VUF9CUEYqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIGtlcm5lbCwgYW5kIGBDR1JPVVBfQlBGYCBpcyBhIGZ1bmRhbWVudGFsIGZlYXR1cmUsIHNvIHRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dHMgb3IgY29tbWVudHMgdGhhdCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCwgYXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1NTpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzU2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1NzpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1ODpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNTk6XHRcdGhlbHBcbjEzNjA6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM2MTpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM2MjpcdFxuMTM2MzpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzY0Olx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gdGFja2xpbmcgdGhpcyBrZXJuZWwgY29uZmlnIGlzc3VlLiBJdCBsb29rcyBsaWtlIGBDR1JPVVBfQlBGYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBCUEZfU1lTQ0FMTGAsIHNvIEkmIzM5O2xsIGluY2x1ZGUgYm90aCwganVzdCB0byBiZSBzYWZlLiAgSSYjMzk7bGwgYWxzbyB0aHJvdyBpbiBgQ0dST1VQU2AganVzdCBpbiBjYXNlLCB0aG91Z2ggaXQmIzM5O3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gTm93LCB0aGUgcmVhbCBjb250ZW5kZXJzIGhlcmUgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYENPTVBBVGAuCgpJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09NUEFUYCBpcyBzdWZmaWNpZW50LCBvciBpZiBJIGFsc28gbmVlZCBgSUEzMl9FTVVMQVRJT05gIGZvciB4ODYgc3lzdGVtcy4gIEFoYSwgYENPTVBBVGAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgd2hpY2ggZGVwZW5kcyBvbiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCBvciBgWDg2X1gzMl9BQklgLiBUaGlzIG1lYW5zIEkgY2FuJiMzOTt0IGp1c3QgZW5hYmxlIGBDT01QQVRgIGRpcmVjdGx5IG9uIHg4NjsgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBJQTMyX0VNVUxBVElPTmAgdG8gc2F0aXNmeSB0aGF0IGRlcGVuZGVuY3kuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02NCBhbmQgcG93ZXJwYywgYENPTVBBVGAgc2VlbXMgdG8gYmUgYSByZWd1bGFyIG1lbnVjb25maWcgb3B0aW9uLiBCdXQgb24geDg2LCBpdCYjMzk7cyB0aGF0IGBkZWZfYm9vbCB5YCB0aWVkIHRvIGBJQTMyX0VNVUxBVElPTmAuIFNvLCB0byBiZSBjb21wbGV0ZWx5IHNhZmUgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGJvdGggYENPTVBBVGAgYW5kIGBJQTMyX0VNVUxBVElPTmAuICBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBJQTMyX0VNVUxBVElPTmAgZGVmaW5pdGlvbiBpbiBgYXJjaC94ODYvS2NvbmZpZ2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJQTMyX0VNVUxBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0zMDc4PW1lbnUgXCYjMzQ7QmluYXJ5IEVtdWxhdGlvbnNcJiMzNDtcbmFyY2gveDg2L0tjb25maWctMzA3OS1cbmFyY2gveDg2L0tjb25maWc6MzA4MDpjb25maWcgSUEzMl9FTVVMQVRJT05cbmFyY2gveDg2L0tjb25maWctMzA4MS1cdGJvb2wgXCYjMzQ7SUEzMiBFbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTMwOTAtXG5hcmNoL3g4Ni9LY29uZmlnOjMwOTE6Y29uZmlnIElBMzJfRU1VTEFUSU9OX0RFRkFVTFRfRElTQUJMRURcbmFyY2gveDg2L0tjb25maWctMzA5Mi1cdGJvb2wgXCYjMzQ7SUEzMiBlbXVsYXRpb24gZGlzYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk0NgoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHg4NiBFbXVsYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSUEzMl9FTVVMQVRJT05gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBmb3IgeDg2IGVtdWxhdGlvbi4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aGF0IGRpcmVjdGx5IHRvIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGNhdWdodCBteSBhdHRlbnRpb246IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZW50cnlwb2ludHMuIFRoZXkmIzM5O3JlIGFsbCBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgY2FsbHMuIEkgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGFyZSBub3cgYmVpbmcgdHJpZ2dlcmVkIGJ5IGNvbXBhdCBzeXNjYWxscy4gSXQgbWFrZXMgc2Vuc2UsIHByZXZpb3VzbHkgd2Ugd2VyZSBieXBhc3NpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBOb3csIHdlJiMzOTtyZSBjb3JyZWN0bHkgZXhwb3NpbmcgdGhlIEJQRiBjZ3JvdXAgc29ja29wdCBwcm9ncmFtcyB0byB0aG9zZSBjb21wYXQgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgc3lzY2FsbHMuIFdlJiMzOTtyZSBmaWxsaW5nIHRoZSBnYXAuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGZpbmFsaXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0NPTVBBVCYjMzQ7LAogICAgJiMzNDtJQTMyX0VNVUxBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7X19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtkb19zb2NrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7ZG9fc29ja19nZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAppbmRleCA0ZDBjYzY1OTc2YTE0Li45NDNlYjAyM2I1MmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaApAQCAtMTM4LDE0ICYjNDM7MTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsCiAJCQkJICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcywKIAkJCQkgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCwKLQkJCQkgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJCSAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwomIzQzO2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzb2NrLCBib29sIGNvbXBhdCwKJiM0MzsJCQkJICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLAomIzQzOwkJCQkgICAgICAgY2hhciAqKmtlcm5lbF9vcHR2YWwpOwogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKLQkJCQkgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLAotCQkJCSAgICAgICBpbnQgcmV0dmFsKTsKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LAomIzQzOwkJCQkgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkJCSAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7CiAKIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCQkJCSAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLApAQCAtMzc2LDIxICYjNDM7Mzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssCiAJX19yZXQ7CQkJCQkJCQkgICAgICAgXAogfSkKIAotI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgIFwKLQkJCQkgICAgICAga2VybmVsX29wdHZhbCkJCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpCQkgICAgICAgXAogKHsJCQkJCQkJCQkgICAgICAgXAogCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgICBcCiAJaWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgJmFtcDsmYW1wOwkJCSAgICAgICBcCiAJICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSkJCSAgICAgICBcCi0JCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCwJICAgICAgIFwKLQkJCQkJCQkgICBvcHRuYW1lLCBvcHR2YWwsICAgIFwKLQkJCQkJCQkgICBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQlfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcCiYjNDM7CQkJCQkJCSAgIGxldmVsLCBvcHRuYW1lLCAgICAgXAomIzQzOwkJCQkJCQkgICBvcHR2YWwsIG9wdGxlbiwgICAgIFwKIAkJCQkJCQkgICBrZXJuZWxfb3B0dmFsKTsgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQogCi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXAotCQkJCSAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpCQkgICAgICAgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcCiYjNDM7CQkJCSAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkJICAgICAgIFwKICh7CQkJCQkJCQkJICAgICAgIFwKIAlpbnQgX19yZXQgPSByZXR2YWw7CQkJCQkJICAgICAgIFwKIAlpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSAmYW1wOyZhbXA7CQkJICAgICAgIFwKQEAgLTQwMCw3ICYjNDM7NDAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCwJICAgICAgIFwKIAkJCQkJbGV2ZWwsIG9wdG5hbWUpKQkJICAgICAgIFwKIAkJCV9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdCgJICAgICAgIFwKLQkJCQlzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCSAgICAgICBcCiYjNDM7CQkJCXNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXAogCQkJCW1heF9vcHRsZW4sIHJldHZhbCk7CQkJICAgICAgIFwKIAlfX3JldDsJCQkJCQkJCSAgICAgICBcCiB9KQpAQCAtNTA0LDExICYjNDM7NTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU09DS19PUFMoc29ja19vcHMpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pCiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKJiM0MzsjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKIAkJCQkgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAogCQkJCQkgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSkKLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXAomIzQzOyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcCiAJCQkJICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pCiAKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gewogCXMzMgkJbGV2ZWw7CiAJczMyCQlvcHRuYW1lOwogCXMzMgkJb3B0bGVuOwomIzQzOwlzMzIJCWlzX2NvbXBhdDsKIAkvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrOwogCS8qIFRlbXBvcmFyeSAmIzM0O3JlZ2lzdGVyJiMzNDsgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTc2MTYsNiAmIzQzOzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQgewogCV9fczMyCW9wdG5hbWU7CiAJX19zMzIJb3B0bGVuOwogCV9fczMyCXJldHZhbDsKJiM0MzsJX19zMzIJaXNfY29tcGF0OwogfTsKIAogc3RydWN0IGJwZl9waWRuc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMjA1NSw3ICYjNDM7MjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LAogCXJldHVybiBjdHgtJmd0O29wdHZhbCAhPSBidWYtJmd0O2RhdGE7CiB9CiAKLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLAogCQkJCSAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCkKIHsKQEAgLTIwNjUsNiAmIzQzOzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsCiAJCS5zayA9IHNrLAogCQkubGV2ZWwgPSAqbGV2ZWwsCiAJCS5vcHRuYW1lID0gKm9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCX07CiAJaW50IHJldCwgbWF4X29wdGxlbjsKIApAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50ICpsZXZlbCwKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKJiM0MztpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbiwKIAkJCQkgICAgICAgaW50IHJldHZhbCkKQEAgLTIxNTcsNiAmIzQzOzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJLnNrID0gc2ssCiAJCS5sZXZlbCA9IGxldmVsLAogCQkub3B0bmFtZSA9IG9wdG5hbWUsCiYjNDM7CQkuaXNfY29tcGF0ID0gY29tcGF0LAogCQkuY3VycmVudF90YXNrID0gY3VycmVudCwKIAl9OwogCWludCBvcmlnX29wdGxlbjsKQEAgLTI3MDUsNiAmIzQzOzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsCiAJCWVsc2UKIAkJCSppbnNuJiM0MzsmIzQzOyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pOwogCQlicmVhazsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6CiYjNDM7CQkqaW5zbiYjNDM7JiM0MzsgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTsKJiM0MzsJCWJyZWFrOwogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpOgogCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KSAhPSAwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmY0NTQ5OTc1Zjk4YjkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIzNDYsMTAgJiM0MzsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKIAotCWlmICghY29tcGF0KQotCQllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKLQkJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKLQkJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKJiM0MzsJZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stJmd0O3NrLCBjb21wYXQsICZhbXA7bGV2ZWwsICZhbXA7b3B0bmFtZSwKJiM0MzsJCQkJCSAgICAgb3B0dmFsLCAmYW1wO29wdGxlbiwKJiM0MzsJCQkJCSAgICAgJmFtcDtrZXJuZWxfb3B0dmFsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBvdXRfcHV0OwogCWlmIChlcnIgJmd0OyAwKSB7CkBAIC0yNDQ3LDggJiM0MzsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWNvbXBhdCkKLQkJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKJiM0MzsJY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTsKIAogCW9wcyA9IFJFQURfT05DRShzb2NrLSZndDtvcHMpOwogCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7CkBAIC0yNDc3LDEwICYjNDM7MjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCwKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKCFjb21wYXQpCi0JCWVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLSZndDtzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAotCQkJCQkJICAgICBlcnIpOwomIzQzOwllcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay0mZ3Q7c2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsCiYjNDM7CQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLAomIzQzOwkJCQkJICAgICBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC03NjE2LDYgJiM0Mzs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHsKIAlfX3MzMglvcHRuYW1lOwogCV9fczMyCW9wdGxlbjsKIAlfX3MzMglyZXR2YWw7CiYjNDM7CV9fczMyCWlzX2NvbXBhdDsKIH07CiAKIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMKaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYwpAQCAtMjE1LDYgJiM0MzsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdG5hbWUgPSBJUF9UT1MsCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtyZXR2YWwgPSAwICovCiYjNDM7CQkJQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLAomIzQzOwkJCUJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKSksCiYjNDM7CQkJLyogcmV0dXJuIDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX0pNUF9BKDEpLAomIzQzOwkJCS8qIH0gZWxzZSB7ICovCiYjNDM7CQkJLyogcmV0dXJuIDAgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQkJLyogfSAqLwomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZ2V0X2xldmVsID0gU09MX0lQLAomIzQzOwkJLmdldF9vcHRuYW1lID0gSVBfVE9TLAomIzQzOwkJLmdldF9vcHRsZW4gPSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O2lzX2NvbXBhdCYjMzQ7LAomIzQzOwkJLmluc25zID0gewomIzQzOwkJCS8qIGN0eC0mZ3Q7aXNfY29tcGF0ID0gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsCiYjNDM7CQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLAomIzQzOwkJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJCX0sCiYjNDM7CQkuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CQkuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsCiYjNDM7CiYjNDM7CQkuZXJyb3IgPSBERU5ZX0xPQUQsCiYjNDM7CX0sCiAJewogCQkuZGVzY3IgPSAmIzM0O2dldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtJmd0O29wdG5hbWUmIzM0OywKIAkJLmluc25zID0gewpAQCAtNjA5LDYgJiM0Mzs2NTIsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3QgewogCQkuZ2V0X29wdHZhbCA9IHsgMSAmbHQ7Jmx0OyAzIH0sCiAJCS5nZXRfb3B0bGVuID0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzY3IgPSAmIzM0O3NldHNvY2tvcHQ6IHJlYWQgY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiByNiA9IGN0eC0mZ3Q7aXNfY29tcGF0ICovCiYjNDM7CQkJQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR18xLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsKJiM0MzsJCQkvKiBpZiAoY3R4LSZndDtpc19jb21wYXQgPT0gMCkgeyAqLwomIzQzOwkJCUJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQRl9SRUdfNiwgMCwgNCksCiYjNDM7CQkJLyogY3R4LSZndDtvcHRsZW4gPSAtMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBvcHRsZW4pKSwKJiM0MzsJCQkvKiByZXR1cm4gMSAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSwKJiM0MzsJCQlCUEZfSk1QX0EoMSksCiYjNDM7CQkJLyogfSBlbHNlIHsgKi8KJiM0MzsJCQkvKiByZXR1cm4gMCAqLwomIzQzOwkJCUJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSwKJiM0MzsJCQkvKiB9ICovCiYjNDM7CQkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwkJfSwKJiM0MzsJCS5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsJCS5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCwKJiM0MzsKJiM0MzsJCS5zZXRfb3B0bmFtZSA9IDEyMywKJiM0MzsJCS5zZXRfb3B0bGVuID0gMSwKJiM0MzsJCS5pb191cmluZ19zdXBwb3J0ID0gdHJ1ZSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LSZndDtpc19jb21wYXQmIzM0OywKJiM0MzsJCS5pbnNucyA9IHsKJiM0MzsJCQkvKiBjdHgtJmd0O2lzX2NvbXBhdCA9IDEgKi8KJiM0MzsJCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiYjNDM7CQkJQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSwKJiM0MzsJCQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQl9LAomIzQzOwkJLmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwkJLmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULAomIzQzOwomIzQzOwkJLmVycm9yID0gREVOWV9MT0FELAomIzQzOwl9LAogCXsKIAkJLmRlc2NyID0gJiMzNDtzZXRzb2Nrb3B0OiByZWFkIGN0eC0mZ3Q7b3B0bGVuJiMzNDssCiAJCS5pbnNucyA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzIHRvIEJQRiBIb29rcyBpbiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhbiBgaXNfY29tcGF0YCBmaWVsZCBpbnRvIHRoZSBgYnBmX3NvY2tvcHRgIHN0cnVjdHVyZXMuIFRoaXMsIGluIHR1cm4sIGlzIGJlaW5nIHBhc3NlZCBkb3duIHRvIHRoZSBCUEYgaG9vayBleGVjdXRpb24gZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLgoKUHJldmlvdXNseSwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCB0aGUgQlBGIGhvb2tzIHdlcmUgKnNraXBwZWQqIGVudGlyZWx5IGlmIHRoZSBgY29tcGF0YCBmbGFnIHdhcyBzZXQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgYnlwYXNzZWQgdGhlIEJQRiBleGVjdXRpb24gaW4gdGhvc2UgY2FzZXMuIFRoZSBkaWZmIHNob3dzIHRoaXMgcXVpdGUgY2xlYXJseS4gIEVzc2VudGlhbGx5LCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGZ1bmN0aW9ucyB3ZXJlIHdyYXBwZWQgaW4gYGlmICghY29tcGF0KWAgY29uZGl0aW9ucy4KCk5vdywgaG93ZXZlciwgaXQgbG9va3MgbGlrZSB0aGF0IGNvbmRpdGlvbmFsIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBCUEYgaG9va3MgYXJlICphbHdheXMqIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgY29tcGF0YCBzZXR0aW5nLiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IG1lYW5zIEJQRiBwcm9ncmFtcyBjYW4gbm93IGluZmx1ZW5jZSBhbmQgcG90ZW50aWFsbHkgZXZlbiBibG9jayBvciBtb2RpZnkgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgY2FsbHMgbWFkZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUuCgpUaGVyZSYjMzk7cyBvbmUgbW9yZSB0aGluZyB0aGF0JiMzOTtzIGNhdWdodCBteSBhdHRlbnRpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgbW9yZSBjYXJlZnVsbHkuIFByZXZpb3VzbHksIHRoZSBgY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtgIGxpbmUgaW4gYGRvX3NvY2tfZ2V0c29ja29wdGAgd2FzIGFsc28gd3JhcHBlZCBpbiBgaWYgKCFjb21wYXQpYC4gIFRoYXQmIzM5O3Mgbm93IGdvbmUsIG1lYW5pbmcgdGhpcyBjb3B5ICphbHdheXMqIGhhcHBlbnMsIGV2ZW4gZm9yIGNvbXBhdCBjYWxscy4gV2FpdCwgYG9wdGxlbmAgaXMgYSBgc29ja3B0cl90YCwgc28gaXQmIzM5O3MgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnkuICBJcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb3B5X2Zyb21fc29ja3B0cmAgY2hlY2tlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzZWN1cml0eSBpc3N1ZSBpZiB0aGUgY29weSBmYWlscyBhbmQgYSBnYXJiYWdlIHZhbHVlIGdldHMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfZnJvbV9zb2NrcHRyLiptYXhfb3B0bGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yNDM2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQ0OC1cbm5ldC9zb2NrZXQuYzoyNDQ5Olx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG5uZXQvc29ja2V0LmMtMjQ1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGRvX3NvY2tfZ2V0c29ja29wdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIHplcm8gaW4gb24gYGRvX3NvY2tfZ2V0c29ja29wdGAuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc29ja2V0IG9wdGlvbnMuIEZpcnN0LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJhc2ljIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3dpdGNoIHN0YXRlbWVudCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2Ygb3B0aW9uIGRpc3BhdGNoLiBJIGJldCBpdCYjMzk7cyBhIG11bHRpLWxheWVyZWQgc3dpdGNoLCBoYW5kbGluZyB0aGUgc29ja2V0IGxldmVsIChTT0xfU09DS0VULCBldGMuKSBhbmQgdGhlbiB0aGUgc3BlY2lmaWMgb3B0aW9uIHdpdGhpbiB0aGF0IGxldmVsLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYXJndW1lbnQgcGFyc2luZy4gU3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIHBhc3NlZCB0byBgb3B0bGVuYCBhbmQgYG9wdHZhbGAuIEFyZSB0aGVyZSBhbnkgc3VidGxlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHByZXNlbnQgaW4gaXRzIGhhbmRsaW5nPyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgdmFyaW91cyBgZ2V0c29ja29wdGAgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGNvcHlpbmcgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHByZXNlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzPwoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIHByb3RvY29scyBhcmUgdHJlYXRlZC4gRG9lcyBpdCBjb3JyZWN0bHkgY2hlY2sgZm9yIGludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9ucz8gQXJlIHRoZXJlIGFueSBwbGFjZXMgd2hlcmUgaXQgbWlnaHQgcmV0dXJuIGFuIGluY29ycmVjdCBlcnJvciBjb2RlPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBpbnRyb2R1Y2VkIGJ5IGNvbmN1cnJlbnQgY2FsbHM/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHBvc3NpYmxlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseS4gVGhlIGdvYWwgaGVyZSBpcyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCBvdmVydmlldyB0byBzcG90IGFueSBvYnZpb3VzIGlzc3VlcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Mzc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQzODpcdHtcbjI0Mzk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NDA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NDE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDQyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ0MzpcdFx0aW50IGVycjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NDY6XHRcdGlmIChlcnIpXG4yNDQ3Olx0XHRcdHJldHVybiBlcnI7XG4yNDQ4Olx0XG4yNDQ5Olx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbjI0NTA6XHRcbjI0NTE6XHRcdG9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4yNDUyOlx0XHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xuMjQ1MzpcdFx0XHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yNDU0Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcbjI0NTU6XHRcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuMjQ1NjpcdFx0XHRpZiAoZXJyKVxuMjQ1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4yNDU4Olx0XG4yNDU5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4yNDYwOlx0XG4yNDYxOlx0XHRcdC8qIEFsd2F5cyB3cml0ZSBiYWNrIG9wdGxlbiwgZXZlbiBvbiBmYWlsdXJlLiBTb21lIHByb3RvY29sc1xuMjQ2MjpcdFx0XHQgKiAoZS5nLiBDQU4gcmF3KSByZXR1cm4gLUVSQU5HRSBhbmQgc2V0IG9wdGxlbiB0byB0aGVcbjI0NjM6XHRcdFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cbjI0NjQ6XHRcdFx0ICovXG4yNDY1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4yNDY2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDY3Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0KSB7XG4yNDY4Olx0XHRcdGlmIChXQVJOX09OQ0Uob3B0dmFsLmlzX2tlcm5lbCB8fCBvcHRsZW4uaXNfa2VybmVsLFxuMjQ2OTpcdFx0XHRcdCAgICAgIFwmIzM0O0ludmFsaWQgYXJndW1lbnQgdHlwZVwmIzM0OykpXG4yNDcwOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMjQ3MTpcdFxuMjQ3MjpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLnVzZXIsXG4yNDczOlx0XHRcdFx0XHQgICAgICBvcHRsZW4udXNlcik7XG4yNDc0Olx0XHR9IGVsc2Uge1xuMjQ3NTpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjI0NzY6XHRcdH1cbjI0Nzc6XHRcbjI0Nzg6XHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuMjQ3OTpcdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxuMjQ4MDpcdFx0XHRcdFx0XHQgICAgIGVycik7XG4yNDgxOlx0XG4yNDgyOlx0XHRyZXR1cm4gZXJyO1xuMjQ4MzpcdH1cbjI0ODQ6XHRFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG4yNDg1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIEdldHNvY2tvcHQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgY29weV9mcm9tX3NvY2twdHIoJmFtcDttYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtgIGNhbGwuLi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjb25jZXJuZWQgdGhhdCBpdCYjMzk7cyBpZ25vcmluZyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBgb3B0bGVuYCBpcyBnYXJiYWdlLCB0aGVuIGBtYXhfb3B0bGVuYCB3aWxsIHJlbWFpbiBhdCB6ZXJvLCB3aGljaCBpcyBob3cgaXQgd2FzIGluaXRpYWxpemVkLiBUaGVuIHRoYXQgemVybyB2YWx1ZSBnZXRzIHBhc3NlZCB0byBgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGhhcyBzb21lIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKV2FpdCwgbG9va2luZyBhdCBpdCBhZ2FpbiwgYG1heF9vcHRsZW5gIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgd2hpY2ggYWRkcmVzc2VzIHRoZSBpbW1lZGlhdGUgJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSYjMzQ7IGNvbmNlcm4uIFRoZSByZWFsIHNoaWZ0IGhhcHBlbnMgd2l0aCB0aGUgcGF0Y2gsIHdoaWNoIHJlbW92ZXMgdGhlIGBpZiAoIWNvbXBhdClgIGNvbmRpdGlvbiBhbmQgbGV0cyBgbWF4X29wdGxlbmAgYmUgcmVhZCBmcm9tIHVzZXIgc3BhY2UgZm9yIGNvbXBhdCBnZXRzb2Nrb3B0LiBOb3csIGZvciBjb21wYXQgZ2V0c29ja29wdCwgdGhlIGBvcHRsZW5gIHZhcmlhYmxlIHBvaW50cyB0byBhIDMyLWJpdCBpbnRlZ2VyIGluIHVzZXIgc3BhY2UsIGFuZCBzaW5jZSBgc2l6ZW9mKGludClgIGlzIGluZGVlZCA0IGJ5dGVzLCBgY29weV9mcm9tX3NvY2twdHJgIHJlYWRzIDQgYnl0ZXMuIE9rYXksIHRoZSB2YWx1ZSBpcyBpbml0aWFsaXplZC4gU3RpbGwsIEkgc2hvdWxkIGV4cGxvcmUgdGhpcyB3aXRoIHRoZSBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDc6XHRcdHJldHVybiByZXQ7XG4yMTQ4Olx0fVxuMjE0OTpcdFxuMjE1MDpcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjIxNTE6XHRcdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbjIxNTI6XHRcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbjIxNTM6XHRcdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKVxuMjE1NDpcdHtcbjIxNTU6XHRcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzb2NrX2Nncm91cF9wdHIoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIxNTY6XHRcdHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307XG4yMTU3Olx0XHRzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHggPSB7XG4yMTU4Olx0XHRcdC5zayA9IHNrLFxuMjE1OTpcdFx0XHQubGV2ZWwgPSBsZXZlbCxcbjIxNjA6XHRcdFx0Lm9wdG5hbWUgPSBvcHRuYW1lLFxuMjE2MTpcdFx0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuMjE2MjpcdFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbjIxNjM6XHRcdH07XG4yMTY0Olx0XHRpbnQgb3JpZ19vcHRsZW47XG4yMTY1Olx0XHRpbnQgcmV0O1xuMjE2NjpcdFxuMjE2NzpcdFx0b3JpZ19vcHRsZW4gPSBtYXhfb3B0bGVuO1xuMjE2ODpcdFx0Y3R4Lm9wdGxlbiA9IG1heF9vcHRsZW47XG4yMTY5Olx0XHRtYXhfb3B0bGVuID0gc29ja29wdF9hbGxvY19idWYoXHUwMDI2Y3R4LCBtYXhfb3B0bGVuLCBcdTAwMjZidWYpO1xuMjE3MDpcdFx0aWYgKG1heF9vcHRsZW4gXHUwMDNjIDApXG4yMTcxOlx0XHRcdHJldHVybiBtYXhfb3B0bGVuO1xuMjE3MjpcdFxuMjE3MzpcdFx0aWYgKCFyZXR2YWwpIHtcbjIxNzQ6XHRcdFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxuMjE3NTpcdFx0XHQgKiBjb3B5IHdoYXRldmVyIHdhcyByZXR1cm5lZCB0byB0aGUgdXNlciBiYWNrXG4yMTc2Olx0XHRcdCAqIGludG8gb3VyIHRlbXBvcmFyeSBidWZmZXIuIFNldCBvcHRsZW4gdG8gdGhlXG4yMTc3Olx0XHRcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxuMjE3ODpcdFx0XHQgKiBCUEYgcHJvZ3JhbXMgaW5zcGVjdCB0aGUgdmFsdWUuXG4yMTc5Olx0XHRcdCAqL1xuMjE4MDpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Y3R4Lm9wdGxlbiwgb3B0bGVuLFxuMjE4MTpcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKGN0eC5vcHRsZW4pKSkge1xuMjE4MjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMTgzOlx0XHRcdFx0Z290byBvdXQ7XG4yMTg0Olx0XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdFx0aWYgKGN0eC5vcHRsZW4gXHUwMDNjIDApIHtcbjIxODc6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMjE4OTpcdFx0XHR9XG4yMTkwOlx0XHRcdG9yaWdfb3B0bGVuID0gY3R4Lm9wdGxlbjtcbjIxOTE6XHRcbjIxOTI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGN0eC5vcHR2YWwsIG9wdHZhbCxcbjIxOTM6XHRcdFx0XHRcdCAgICAgIG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKSkpIHtcbjIxOTQ6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE5NTpcdFx0XHRcdGdvdG8gb3V0O1xuMjE5NjpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjIwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIGFuZCBDb21wYXRpYmlsaXR5IEZsYWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eGAgYW5kIGl0IHNlZW1zIHRvIGJlIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBUaGF0IG1lYW5zIHNvbWUgZmllbGRzIGdldCBzcGVjaWZpYyB2YWx1ZXMsIGFuZCB0aGUgcmVzdCBnZXQgemVyb2VkIG91dCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBUaGUga2V5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gbm93IGlzIHRoaXMgYGlzX2NvbXBhdGAgZmllbGQsIHdoaWNoIGlzIGFwcGFyZW50bHkgYSAqbmV3KiBhZGRpdGlvbiB0byBib3RoIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgYW5kIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNoYW5nZSBoYXMgaW1wbGljYXRpb25zIG9uIGhvdyB0aGUgc3RydWN0dXJlcyBhcmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGFkZGVkIGFuZCB3aGF0IHByb2JsZW0gaXQmIzM5O3MgdHJ5aW5nIHRvIHNvbHZlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNpbXBseSAqYWRkaW5nKiBgaXNfY29tcGF0YCB0byB0aGUgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYWRkaXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoaXMgbmV3IGBpc19jb21wYXRgIGZpZWxkIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvciBjb25maWd1cmF0aW9ucywgZ2l2ZW4gaXRzIG5hbWUuIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgdGhlIG9ubHkgY2hhbmdlIG9yIGlmIG90aGVyIGZpZWxkcyB3ZXJlIGFmZmVjdGVkLgoKRmluYWxseSwgSSBoYXZlIGEgcXVpY2sgdGhvdWdodCBvbiB0aGUgYHN0cnVjdCBicGZfc29ja29wdGAuIFBhZGRpbmcgaW4gc3RydWN0cyBpcyBhbHdheXMgYSBjb25jZXJuIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHBhY2tlZCBzdHJ1Y3R1cmVzIG9yIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIGEgcXVpY2sgcXVlc3Rpb24sIGJ1dCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGlmIHRoZSBzdHJ1Y3QgaGFzIGFueSBraW5kIG9mIHNwZWNpYWwgcGFja2luZyBydWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2MTA6XHRzdHJ1Y3QgYnBmX3NvY2tvcHQge1xuNzYxMTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfc29jayAqLCBzayk7XG43NjEyOlx0XHRfX2JwZl9tZF9wdHIodm9pZCAqLCBvcHR2YWwpO1xuNzYxMzpcdFx0X19icGZfbWRfcHRyKHZvaWQgKiwgb3B0dmFsX2VuZCk7XG43NjE0Olx0XG43NjE1Olx0XHRfX3MzMlx0bGV2ZWw7XG43NjE2Olx0XHRfX3MzMlx0b3B0bmFtZTtcbjc2MTc6XHRcdF9fczMyXHRvcHRsZW47XG43NjE4Olx0XHRfX3MzMlx0cmV0dmFsO1xuNzYxOTpcdFx0X19zMzJcdGlzX2NvbXBhdDtcbjc2MjA6XHR9O1xuNzYyMTpcdFxuNzYyMjpcdHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XG43NjIzOlx0XHRfX3UzMiBwaWQ7XG43NjI0Olx0XHRfX3UzMiB0Z2lkO1xuNzYyNTpcdH07XG43NjI2Olx0XG43NjI3Olx0LyogVXNlciBhY2Nlc3NpYmxlIGRhdGEgZm9yIFNLX0xPT0tVUCBwcm9ncmFtcy4gQWRkIG5ldyBmaWVsZHMgYXQgdGhlIGVuZC4gKi9cbjc2Mjg6XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCB7XG43NjI5Olx0XHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvbnRleHQgZm9yIFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJdCYjMzk7cyBhIFVzZXIgQVBJIHN0cnVjdHVyZSwgYnV0IGl0IGFsc28gc2VydmVzIGFzIHRoZSBjb250ZXh0IGZvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGEga2V5IGRldGFpbC4gVGhlIHZlcmlmaWVyIGlzIHRoZSBrZXkgdG8gZW5zdXJpbmcgYWxsIHRoZSBydWxlcyBhcmUgZm9sbG93ZWQgd2hlbiBCUEYgcHJvZ3JhbXMgYWNjZXNzIHRoaXMgc3RydWN0dXJlIC0gc3BlY2lmaWNhbGx5IGl0IHJld3JpdGVzIGFjY2Vzc2VzIHRvIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGlzX2NvbXBhdGAgdG8gYm90aCB0aGUgdXNlci1zcGFjZSBhbmQga2VybmVsIHZlcnNpb25zIG9mIHRoZSBzdHJ1Y3QsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBkZWFsaW5nIHdpdGggY29tcGF0aWJpbGl0eSBmbGFncy4KCkxvb2tpbmcgYXQgdGhlIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgZnVuY3Rpb24sIGl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIEJQRiBjb250ZXh0IGFjY2VzcyBjb252ZXJzaW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGhhbmRsaW5nIG9mIHRoZSBgaXNfY29tcGF0YCBmaWVsZDogd2UmIzM5O3JlIHVzaW5nIGBDR19TT0NLT1BUX1JFQURfRklFTERgIHRvIGhhbmRsZSB0aGUgcmVhZCBvcGVyYXRpb24uIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIC0gbm8gcmVkIGZsYWdzIHRoZXJlLCBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlIHZlcmlmaWVyIHRha2VzIGNhcmUgb2YgZW5mb3JjaW5nIHRoZSBib3VuZGFyaWVzIHNvIG9ubHkgZXhwbGljaXRseSBoYW5kbGVkIGZpZWxkcyBhcmUgYWNjZXNzaWJsZSwga2VlcGluZyB0aGluZ3Mgc2VjdXJlLgoKQnV0Li4ud2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoaXMuLi53aGF0IGFib3V0IHRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIHZlcnNpb24/IExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGNoYW5nZSBpcyB3ZWxsLWRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY5NTpcdFx0dThcdFx0ZGF0YVtCUEZfU09DS09QVF9LRVJOX0JVRl9TSVpFXTtcbjE2OTY6XHR9O1xuMTY5NzpcdFxuMTY5ODpcdHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcbjE2OTk6XHRcdHN0cnVjdCBzb2NrXHQqc2s7XG4xNzAwOlx0XHR1OFx0XHQqb3B0dmFsO1xuMTcwMTpcdFx0dThcdFx0Km9wdHZhbF9lbmQ7XG4xNzAyOlx0XHRzMzJcdFx0bGV2ZWw7XG4xNzAzOlx0XHRzMzJcdFx0b3B0bmFtZTtcbjE3MDQ6XHRcdHMzMlx0XHRvcHRsZW47XG4xNzA1Olx0XHRzMzJcdFx0aXNfY29tcGF0O1xuMTcwNjpcdFx0LyogZm9yIHJldHZhbCBpbiBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHggKi9cbjE3MDc6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF90YXNrO1xuMTcwODpcdFx0LyogVGVtcG9yYXJ5IFwmIzM0O3JlZ2lzdGVyXCYjMzQ7IGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cbjE3MDk6XHRcdHU2NFx0XHR0bXBfcmVnO1xuMTcxMDpcdH07XG4xNzExOlx0XG4xNzEyOlx0aW50IGNvcHlfYnBmX2Zwcm9nX2Zyb21fdXNlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZHN0LCBzb2NrcHRyX3Qgc3JjLCBpbnQgbGVuKTtcbjE3MTM6XHRcbjE3MTQ6XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja29wdF9rZXJuYCBTdHJ1Y3QqKgoKT2theSwgc28gdGhleSYjMzk7dmUgYWRkZWQgYGlzX2NvbXBhdGAgdG8gdGhlIGBicGZfc29ja29wdF9rZXJuYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgd2l0aGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGUgaW5pdGlhbGl6YXRpb24gbG9va3MgcHJldHR5IHN0YW5kYXJkOyB0aGV5JiMzOTtyZSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgKGBza2AsIGBsZXZlbGAsIGBvcHRuYW1lYCwgYW5kIGBpc19jb21wYXRgKSBkaXJlY3RseSwgYW5kIHRoZSByZXN0IHdpbGwgYmUgemVyb2VkIG91dCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gdHJpZ2dlcmVkIGEgdGhvdWdodDogaXMgdGhlcmUgYW55IGNoYW5jZSB3ZSYjMzk7cmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBJIG1lYW4sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgdGhhdCYjMzk7cyBhIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhLgoKQnV0LCBob2xkIG9uLi4uIG5vLCB0aGF0IHNob3VsZG4mIzM5O3QgYmUgYSBjb25jZXJuIGhlcmUuIFRoaXMgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdCAqaXNuJiMzOTt0KiBwYXNzZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgdXNlZCBzb2xlbHkgd2l0aGluIHRoZSBCUEYgZXhlY3V0aW9uIGNvbnRleHQuIEJQRiBwcm9ncmFtcyAqY2FuKiByZWFkIGBpc19jb21wYXRgLCBhbmQgdGhlIHZlcmlmaWVyIGNvcnJlY3RseSB0cmFuc2xhdGVzIHRob3NlIHJlYWRzIHRvIGBjdHgtJmd0O2lzX2NvbXBhdGAuIFNvIHdlIHNob3VsZCBiZSBmaW5lIHRoZXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBUaGF0IGxvb2tzIGdvb2QsIGJ1dCB3aGF0IGFib3V0IGBkb19zb2NrX3NldHNvY2tvcHRgPyBXZSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMzNjpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4yMzM3Olx0e1xuMjMzODpcdFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xuMjMzOTpcdFx0Y2hhciAqa2VybmVsX29wdHZhbCA9IE5VTEw7XG4yMzQwOlx0XHRpbnQgZXJyO1xuMjM0MTpcdFxuMjM0MjpcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMClcbjIzNDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XG4yMzQ2Olx0XHRpZiAoZXJyKVxuMjM0NzpcdFx0XHRnb3RvIG91dF9wdXQ7XG4yMzQ4Olx0XG4yMzQ5Olx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbjIzNTA6XHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbjIzNTE6XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbjIzNTI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yMzUzOlx0XHRcdGdvdG8gb3V0X3B1dDtcbjIzNTQ6XHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbjIzNTU6XHRcdFx0ZXJyID0gMDtcbjIzNTY6XHRcdFx0Z290byBvdXRfcHV0O1xuMjM1NzpcdFx0fVxuMjM1ODpcdFxuMjM1OTpcdFx0aWYgKGtlcm5lbF9vcHR2YWwpXG4yMzYwOlx0XHRcdG9wdHZhbCA9IEtFUk5FTF9TT0NLUFRSKGtlcm5lbF9vcHR2YWwpO1xuMjM2MTpcdFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbjIzNjI6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNiAhc29ja191c2VfY3VzdG9tX3NvbF9zb2NrZXQoc29jaykpXG4yMzYzOlx0XHRcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjM2NDpcdFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cdTAwM2VzZXRzb2Nrb3B0KSlcbjIzNjU6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmNlcm4gUmVnYXJkaW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSBpbiBgZG9fc29ja19zZXRzb2Nrb3B0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0IHNlZW1zIHRoYXQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbm93IGJlaW5nIGNhbGxlZCBmb3IgY29tcGF0IHNvY2tldHMsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgcHJldmlvdXNseS4gSG1tLCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBDb3VsZCB0aGlzIGludHJvZHVjdGlvbiBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/CgpUaGUgY29kZSBwYXRoIGlzOiBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYCBpcyB0cmlnZ2VyZWQsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgLiBSaWdodCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gSXQgYWxsb2NhdGVzIGEgYnVmZmVyLCBjb3BpZXMgYG9wdHZhbGAg4oCTIHRoYXQgaXMsIHRoZSBvcHRpb24gdmFsdWUg4oCTIGZyb20gdXNlciBzcGFjZSBpbnRvIGl0LCBydW5zIHRoZSBCUEYgcHJvZ3JhbSwgYW5kIHRoZW4gcmV0dXJucyB0aGUgKm1vZGlmaWVkKiBidWZmZXIgdmlhIGBrZXJuZWxfb3B0dmFsYC4KCldhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4gYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIGNvcHlpbmcgYG9wdHZhbGAgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlbiB3b3JraW5nIG9uIHRoZSAqY29weSogb2YgaXQuIFNvIGV2ZW4gaWYgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGhhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCYjMzk7cyBva2F5LCBiZWNhdXNlIHdoYXRldmVyIGlzIHJldHVybmVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSBpbnRvIHRoZSBga2VybmVsX29wdHZhbGAgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1ZmZlcj8gQWxyaWdodCwgSSYjMzk7bSBwcmV0dHkgc3VyZSwgYnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDU4Olx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbjIwNTk6XHRcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4yMDYwOlx0XHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxuMjA2MTpcdHtcbjIwNjI6XHRcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzb2NrX2Nncm91cF9wdHIoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIwNjM6XHRcdHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307XG4yMDY0Olx0XHRzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHggPSB7XG4yMDY1Olx0XHRcdC5zayA9IHNrLFxuMjA2NjpcdFx0XHQubGV2ZWwgPSAqbGV2ZWwsXG4yMDY3Olx0XHRcdC5vcHRuYW1lID0gKm9wdG5hbWUsXG4yMDY4Olx0XHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4yMDY5Olx0XHR9O1xuMjA3MDpcdFx0aW50IHJldCwgbWF4X29wdGxlbjtcbjIwNzE6XHRcbjIwNzI6XHRcdC8qIEFsbG9jYXRlIGEgYml0IG1vcmUgdGhhbiB0aGUgaW5pdGlhbCB1c2VyIGJ1ZmZlciBmb3JcbjIwNzM6XHRcdCAqIEJQRiBwcm9ncmFtLiBUaGUgY2Fub25pY2FsIHVzZSBjYXNlIGlzIG92ZXJyaWRpbmdcbjIwNzQ6XHRcdCAqIFRDUF9DT05HRVNUSU9OKG52KSB0byBUQ1BfQ09OR0VTVElPTihjdWJpYykuXG4yMDc1Olx0XHQgKi9cbjIwNzY6XHRcdG1heF9vcHRsZW4gPSBtYXhfdChpbnQsIDE2LCAqb3B0bGVuKTtcbjIwNzc6XHRcdG1heF9vcHRsZW4gPSBzb2Nrb3B0X2FsbG9jX2J1ZihcdTAwMjZjdHgsIG1heF9vcHRsZW4sIFx1MDAyNmJ1Zik7XG4yMDc4Olx0XHRpZiAobWF4X29wdGxlbiBcdTAwM2MgMClcbjIwNzk6XHRcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDgwOlx0XG4yMDgxOlx0XHRjdHgub3B0bGVuID0gKm9wdGxlbjtcbjIwODI6XHRcbjIwODM6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXG4yMDg0Olx0XHRcdFx0ICAgICAgbWluKCpvcHRsZW4sIG1heF9vcHRsZW4pKSkge1xuMjA4NTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjA4NjpcdFx0XHRnb3RvIG91dDtcbjIwODc6XHRcdH1cbjIwODg6XHRcbjIwODk6XHRcdGxvY2tfc29jayhzayk7XG4yMDkwOlx0XHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXHUwMDI2Y2dycC1cdTAwM2VicGYsIENHUk9VUF9TRVRTT0NLT1BULFxuMjA5MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCAwLCBOVUxMKTtcbjIwOTI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yMDkzOlx0XG4yMDk0Olx0XHRpZiAocmV0KVxuMjA5NTpcdFx0XHRnb3RvIG91dDtcbjIwOTY6XHRcbjIwOTc6XHRcdGlmIChjdHgub3B0bGVuID09IC0xKSB7XG4yMDk4Olx0XHRcdC8qIG9wdGxlbiBzZXQgdG8gLTEsIGJ5cGFzcyBrZXJuZWwgKi9cbjIwOTk6XHRcdFx0cmV0ID0gMTtcbjIxMDA6XHRcdH0gZWxzZSBpZiAoY3R4Lm9wdGxlbiBcdTAwM2UgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuIFx1MDAzYyAtMSkge1xuMjEwMTpcdFx0XHQvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqL1xuMjEwMjpcdFx0XHRpZiAoKm9wdGxlbiBcdTAwM2UgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBjdHgub3B0bGVuIFx1MDAzZT0gMCkge1xuMjEwMzpcdFx0XHRcdHByX2luZm9fb25jZShcJiMzNDticGYgc2V0c29ja29wdDogaWdub3JpbmcgcHJvZ3JhbSBidWZmZXIgd2l0aCBvcHRsZW49JWQgKG1heF9vcHRsZW49JWQpXFxuXCYjMzQ7LFxuMjEwNDpcdFx0XHRcdFx0ICAgICBjdHgub3B0bGVuLCBtYXhfb3B0bGVuKTtcbjIxMDU6XHRcdFx0XHRyZXQgPSAwO1xuMjEwNjpcdFx0XHRcdGdvdG8gb3V0O1xuMjEwNzpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNvY2tvcHRfYWxsb2NfYnVmYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgYnVmZmVyLCBzcGVjaWZpY2FsbHkgc2l6ZWQgYnkgYG1heF9vcHRsZW5gLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgbmV4dCBzdGVwIGlzIGEgY2FsbCB0byBgY29weV9mcm9tX3NvY2twdHJgLCB3aGljaCBpcyBnb2luZyB0byBncmFiIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEFuZCB0aGUgc2l6ZSBvZiB0aGF0IGNodW5rPyBXZWxsLCBpdCYjMzk7cyB0aGUgKnNtYWxsZXIqIHZhbHVlIGJldHdlZW4gd2hhdCB0aGUgdXNlciBwcm92aWRlcyAoYCpvcHRsZW5gKSBhbmQgdGhhdCBgbWF4X29wdGxlbmAgd2UganVzdCBhbGxvY2F0ZWQuIE1ha2VzIHNlbnNlOyB3ZSBkb24mIzM5O3Qgd2FudCB0byBvdmVyZmxvdy4KCkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gSSYjMzk7bSB3b25kZXJpbmcgaG93IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgYWN0dWFsbHkgaGFuZGxlcyB0aGUgYnVmZmVyIGFsbG9jYXRpb24uIERvZXMgaXQgdXNlIGBrbWFsbG9jYD8gT3IgaXMgaXQgZmFsbGluZyBiYWNrIHRvIHRoYXQgc3RhY2stYmFzZWQgYGJ1ZmA/IFRoYXQmIzM5O3MgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLiBBbmQgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQsIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIGlmIGl0IHplcm9lcyB0aGUgYnVmZmVyLiBJZiBub3QsIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSB2dWxuZXJhYmlsaXR5LCBsZXR0aW5nIGdhcmJhZ2UgZGF0YSBmcm9tIHRoZSBrZXJuZWwgbGVhayBiYWNrIGludG8gdXNlciBzcGFjZS4gVGhpcyBuZWVkcyBhIG11Y2ggY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAyMDpcdFx0XHQvKiBXZSBkb24mIzM5O3QgZXhwb3NlIG9wdHZhbHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIFBBR0VfU0laRVxuMjAyMTpcdFx0XHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXG4yMDIyOlx0XHRcdCAqL1xuMjAyMzpcdFx0XHRtYXhfb3B0bGVuID0gUEFHRV9TSVpFO1xuMjAyNDpcdFx0fVxuMjAyNTpcdFxuMjAyNjpcdFx0aWYgKG1heF9vcHRsZW4gXHUwMDNjPSBzaXplb2YoYnVmLVx1MDAzZWRhdGEpKSB7XG4yMDI3Olx0XHRcdC8qIFdoZW4gdGhlIG9wdHZhbCBmaXRzIGludG8gQlBGX1NPQ0tPUFRfS0VSTl9CVUZfU0laRVxuMjAyODpcdFx0XHQgKiBieXRlcyBhdm9pZCB0aGUgY29zdCBvZiBremFsbG9jLlxuMjAyOTpcdFx0XHQgKi9cbjIwMzA6XHRcdFx0Y3R4LVx1MDAzZW9wdHZhbCA9IGJ1Zi1cdTAwM2VkYXRhO1xuMjAzMTpcdFx0XHRjdHgtXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cdTAwM2VvcHR2YWwgJiM0MzsgbWF4X29wdGxlbjtcbjIwMzI6XHRcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDMzOlx0XHR9XG4yMDM0Olx0XG4yMDM1Olx0XHRjdHgtXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XG4yMDM2Olx0XHRpZiAoIWN0eC1cdTAwM2VvcHR2YWwpXG4yMDM3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzODpcdFxuMjAzOTpcdFx0Y3R4LVx1MDAzZW9wdHZhbF9lbmQgPSBjdHgtXHUwMDNlb3B0dmFsICYjNDM7IG1heF9vcHRsZW47XG4yMDQwOlx0XG4yMDQxOlx0XHRyZXR1cm4gbWF4X29wdGxlbjtcbjIwNDI6XHR9XG4yMDQzOlx0XG4yMDQ0Olx0c3RhdGljIHZvaWQgc29ja29wdF9mcmVlX2J1ZihzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxuMjA0NTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxuMjA0NjpcdHtcbjIwNDc6XHRcdGlmIChjdHgtXHUwMDNlb3B0dmFsID09IGJ1Zi1cdTAwM2VkYXRhKVxuMjA0ODpcdFx0XHRyZXR1cm47XG4yMDQ5Olx0XHRrZnJlZShjdHgtXHUwMDNlb3B0dmFsKTtcbjIwNTA6XHR9XG4yMDUxOlx0XG4yMDUyOlx0c3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXG4yMDUzOlx0XHRcdFx0XHQgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwNTQ6XHR7XG4yMDU1Olx0XHRyZXR1cm4gY3R4LVx1MDAzZW9wdHZhbCAhPSBidWYtXHUwMDNlZGF0YTtcbjIwNTY6XHR9XG4yMDU3Olx0XG4yMDU4Olx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbjIwNTk6XHRcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIHNldHNvY2tvcHQgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgYWxsb2NhdGVzIG1lbW9yeSwgYW5kIGl0IHVzZXMgYGt6YWxsb2NgIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMuIEJ1dCwgaWYgaXQmIzM5O3MgdXNpbmcgdGhlIHN0YWNrIGJ1ZmZlciBgYnVmLSZndDtkYXRhYCwgaXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSB6ZXJvIGl0LCB3aGljaCBtYWRlIG1lIHBhdXNlLiBBaCwgd2FpdCwgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBpbiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYWN0dWFsbHkgKmRvZXMqIHplcm8taW5pdGlhbGl6ZSB0aGF0IHN0YWNrIGJ1ZmZlci4gVGhhdCYjMzk7cyBnb29kOyB0aGUgYnVmZmVyIGlzICphbHdheXMqIGZ1bGx5IHplcm9lZCBhdCB0aGUgc3RhcnQuCgpTbywgd2UgY29weSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucyBpdHMgbWFnaWMuIE5vdywgaW5zaWRlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgSSYjMzk7bSBzZWVpbmcgdGhpczoKYGBgYwoJaWYgKGN0eC5vcHRsZW4gIT0gMCkgewoJCSpsZXZlbCA9IGN0eC5sZXZlbDsKCQkqb3B0bmFtZSA9IGN0eC5vcHRuYW1lOwoJCSpvcHRsZW4gPSBjdHgub3B0bGVuOwoJCSprZXJuZWxfb3B0dmFsID0gY3R4Lm9wdHZhbDsKCX0KYGBgCklmIGBjdHgub3B0bGVuYCBpcyBpbmNyZWFzZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCB0aGVuIGAqb3B0bGVuYCBnZXRzIHVwZGF0ZWQsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgKm9wdGxlbmAuIEJ1dCwgYG1heF9vcHRsZW5gIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIEhvbGQgb24uLi4gdGhlIEJQRiB2ZXJpZmllciBtYWtlcyBzdXJlIHRoZSBCUEYgcHJvZ3JhbSBjYW4mIzM5O3Qgc2V0IGBjdHgub3B0bGVuYCBsYXJnZXIgdGhhbiBgbWF4X29wdGxlbmAuIFRoZSBrZXJuZWwgY2hlY2tzIHRoaXMgYXMgd2VsbDoKYGBgYwoJfSBlbHNlIGlmIChjdHgub3B0bGVuICZndDsgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuICZsdDsgLTEpIHsKCQkvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqLwpgYGAKU28sIHRoYXQgYGN0eC5vcHRsZW5gIGlzIGJvdW5kZWQuCgpTaW5jZSB0aGUgYnVmZmVyIGlzIHplcm9lZCwgd2hldGhlciBieSBga3phbGxvY2Agb3IgdGhlIGB7fWAgaW5pdGlhbGl6YXRpb24sIGFueSBieXRlcyBiZXlvbmQgdGhlIG9yaWdpbmFsIGAqb3B0bGVuYCB1cCB0byBgY3R4Lm9wdGxlbmAgd2lsbCBiZSB6ZXJvLiBOaWNlLiBBbmQgdGhlbiBga2VybmVsX29wdHZhbGAgZ2V0cyBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIGBzZXRzb2Nrb3B0YCBoYW5kbGVyLiBUaGUgaGFuZGxlciByZWFkcyB1cCB0byBgKm9wdGxlbmAgYnl0ZXMgZnJvbSB0aGUgYGtlcm5lbF9vcHR2YWxgLiBCZWNhdXNlIHRoZSBidWZmZXIgaXMgemVyb2VkLCB0aGVyZSYjMzk7cyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIGxlYWtlZC4gRXhjZWxsZW50ISBUaGlzIHNlZW1zIHNhZmUuCgpOb3csIHdoYXQgYWJvdXQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgPyBJIG5lZWQgdG8gbG9vayBhdCB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MzpcdFx0aWYgKCFyZXR2YWwpIHtcbjIxNzQ6XHRcdFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxuMjE3NTpcdFx0XHQgKiBjb3B5IHdoYXRldmVyIHdhcyByZXR1cm5lZCB0byB0aGUgdXNlciBiYWNrXG4yMTc2Olx0XHRcdCAqIGludG8gb3VyIHRlbXBvcmFyeSBidWZmZXIuIFNldCBvcHRsZW4gdG8gdGhlXG4yMTc3Olx0XHRcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxuMjE3ODpcdFx0XHQgKiBCUEYgcHJvZ3JhbXMgaW5zcGVjdCB0aGUgdmFsdWUuXG4yMTc5Olx0XHRcdCAqL1xuMjE4MDpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Y3R4Lm9wdGxlbiwgb3B0bGVuLFxuMjE4MTpcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKGN0eC5vcHRsZW4pKSkge1xuMjE4MjpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMTgzOlx0XHRcdFx0Z290byBvdXQ7XG4yMTg0Olx0XHRcdH1cbjIxODU6XHRcbjIxODY6XHRcdFx0aWYgKGN0eC5vcHRsZW4gXHUwMDNjIDApIHtcbjIxODc6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMjE4OTpcdFx0XHR9XG4yMTkwOlx0XHRcdG9yaWdfb3B0bGVuID0gY3R4Lm9wdGxlbjtcbjIxOTE6XHRcbjIxOTI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGN0eC5vcHR2YWwsIG9wdHZhbCxcbjIxOTM6XHRcdFx0XHRcdCAgICAgIG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKSkpIHtcbjIxOTQ6XHRcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjE5NTpcdFx0XHRcdGdvdG8gb3V0O1xuMjE5NjpcdFx0XHR9XG4yMTk3Olx0XHR9XG4yMTk4Olx0XG4yMTk5Olx0XHRsb2NrX3NvY2soc2spO1xuMjIwMDpcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX2FycmF5X2NnKFx1MDAyNmNncnAtXHUwMDNlYnBmLCBDR1JPVVBfR0VUU09DS09QVCxcbjIyMDE6XHRcdFx0XHRcdCAgICBcdTAwMjZjdHgsIGJwZl9wcm9nX3J1biwgcmV0dmFsLCBOVUxMKTtcbjIyMDI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4yMjAzOlx0XG4yMjA0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjIwNTpcdFx0XHRnb3RvIG91dDtcbjIyMDY6XHRcbjIyMDc6XHRcdGlmICghc29ja3B0cl9pc19udWxsKG9wdHZhbCkgXHUwMDI2XHUwMDI2XG4yMjA4Olx0XHQgICAgKGN0eC5vcHRsZW4gXHUwMDNlIG1heF9vcHRsZW4gfHwgY3R4Lm9wdGxlbiBcdTAwM2MgMCkpIHtcbjIyMDk6XHRcdFx0aWYgKG9yaWdfb3B0bGVuIFx1MDAzZSBQQUdFX1NJWkUgXHUwMDI2XHUwMDI2IGN0eC5vcHRsZW4gXHUwMDNlPSAwKSB7XG4yMjEwOlx0XHRcdFx0cHJfaW5mb19vbmNlKFwmIzM0O2JwZiBnZXRzb2Nrb3B0OiBpZ25vcmluZyBwcm9ncmFtIGJ1ZmZlciB3aXRoIG9wdGxlbj0lZCAobWF4X29wdGxlbj0lZClcXG5cJiMzNDssXG4yMjExOlx0XHRcdFx0XHQgICAgIGN0eC5vcHRsZW4sIG1heF9vcHRsZW4pO1xuMjIxMjpcdFx0XHRcdHJldCA9IHJldHZhbDtcbjIyMTM6XHRcdFx0XHRnb3RvIG91dDtcbjIyMTQ6XHRcdFx0fVxuMjIxNTpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjIxNjpcdFx0XHRnb3RvIG91dDtcbjIyMTc6XHRcdH1cbjIyMTg6XHRcbjIyMTk6XHRcdGlmIChjdHgub3B0bGVuICE9IDApIHtcbjIyMjA6XHRcdFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcdTAwMjZcdTAwMjZcbjIyMjE6XHRcdFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGN0eC5vcHR2YWwsIGN0eC5vcHRsZW4pKSB7XG4yMjIyOlx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5OTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZXRzb2Nrb3B0IEJQRiBIb29rIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBoYW5kbGVzIGBnZXRzb2Nrb3B0YCBjYWxscywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKSW5pdGlhbGx5LCBgYnVmYCBpcyB6ZXJvZWQsIGFuZCBhc3N1bWluZyBgc29ja29wdF9hbGxvY19idWZgIHVzZXMgYGt6YWxsb2NgICh3aGljaCBzZWVtcyBsaWtlbHkpLCB0aGUgYnVmZmVyIGBjdHgub3B0dmFsYCBpcyB6ZXJvZWQuIFRoZW4sIHVzZXItc3BhY2UgZGF0YSBpcyBjb3BpZWQgKmludG8qIGBjdHgub3B0dmFsYCB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlIEJQRiBwcm9ncmFtIHJ1bnMsIGFuZCB0aGUgbW9kaWZpZWQgZGF0YSBpcyBjb3BpZWQgKmJhY2sqIHRvIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfdG9fc29ja3B0cmAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGFueSBieXRlcyBub3QgdG91Y2hlZCBieSBgY29weV9mcm9tX3NvY2twdHJgIG9yIHRoZSBCUEYgcHJvZ3JhbSByZW1haW4gemVyb2VkLiBTbywgdGhlIGluaXRpYWwgemVyb2luZyBwcm92aWRlcyBhIGNydWNpYWwgc2FmZWd1YXJkLgoKQnV0IHdoYXQgaGFwcGVucyBpZiB0aGUgb3JpZ2luYWwsIGtlcm5lbC1wcm92aWRlZCBvcHRpb24gbGVuZ3RoIChgb3JpZ19vcHRsZW5gKSBpcyBsZXNzIHRoYW4gYGN0eC5vcHRsZW5gIHdoaWNoIGlzIHBvdGVudGlhbGx5IG1vZGlmaWVkIGJ5IHRoZSBCUEYgcHJvZ3JhbT8gYGNvcHlfZnJvbV9zb2NrcHRyYCBvbmx5IGNvcGllcyBgbWluKGN0eC5vcHRsZW4sIG1heF9vcHRsZW4pYCBieXRlcy4gV2FpdCwgdGhhdCBgY3R4Lm9wdGxlbmAgY29tZXMgZnJvbSB1c2VyIHNwYWNlISBTcGVjaWZpY2FsbHksIHRoZSBrZXJuZWwmIzM5O3MgYGdldHNvY2tvcHRgIGhhbmRsZXIgd3JpdGVzIHRoZSAqYWN0dWFsKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gdGhlIGBvcHRsZW5gIHBvaW50ZXIgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSwgYW5kIHRoZW4gdGhlIEJQRiBjb2RlIHJlYWRzIGl0IGJhY2suIFRoZW4gdGhlIHNhbWUgdmFsdWUgb2YgYG9wdGxlbmAgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YSBmcm9tIHVzZXIgc3BhY2UgYmFjayBpbnRvIGBjdHgub3B0dmFsYC4gVGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucy4gQW5kIHRoZW4gdGhlIGNvZGUgY29waWVzIGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBpbmVmZmljaWVudCBiZWNhdXNlIHdlJiMzOTtyZSByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBzYW1lIGxlbmd0aCBmcm9tIHVzZXIgc3BhY2UsIGJ1dCB0aGlzIGlzIGhvdyBpdCB3b3Jrcy4gU2luY2UgYGN0eC5vcHR2YWxgIGlzIGluaXRpYWxseSB6ZXJvZWQgYW5kIG9ubHkgdGhlIGZpcnN0IGBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbilgIGJ5dGVzIGFyZSBvdmVyd3JpdHRlbiwgYW55IHRyYWlsaW5nIGJ5dGVzIHJlbWFpbiB6ZXJvLiBJZiB0aGUgQlBGIHByb2dyYW0gKmluY3JlYXNlcyogYGN0eC5vcHRsZW5gICh1cCB0byBgbWF4X29wdGxlbmApLCB0aGUgbmV3bHkgY29waWVkIGJ5dGVzIGFyZSBlaXRoZXIgemVybyBvciB3aGF0IHRoZSBCUEYgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgd3JvdGUuIFNvLCBubyB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBpc19jb21wYXRgIHRvIGJvdGggYGJwZl9zb2Nrb3B0YCBhbmQgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdHVyZXMuIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCBhcmUgbW9kaWZpZWQgdG8gcGFzcyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzLCBlbmFibGluZyB0aGVzZSBob29rcyBmb3IgY29tcGF0IHNvY2tldHMuIENvdWxkIHRoZSBCUEYgcHJvZ3JhbXMgKnRoZW1zZWx2ZXMqIGJlIHRoZSBzb3VyY2Ugb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gTm8sIGJlY2F1c2UgdGhlIEJQRiB2ZXJpZmllciBwcmV2ZW50cyBwcm9ncmFtcyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgaXNfY29tcGF0YCBmbGFnIHdpdGhpbiBgYnBmX3NvY2tvcHRfa2VybmAgaXMgYSBzaW1wbGUgYHMzMmAgKDQgYnl0ZXMpIGluaXRpYWxpemVkIHdpdGggdGhlIGBjb21wYXRgIHZhbHVlICgwIG9yIDEpLiBUaGUgcmVzdCBvZiBgYnBmX3NvY2tvcHRfa2VybmAgaXMgemVyb2VkIGR1ZSB0byB0aGUgZGVzaWduYXRlZCBpbml0aWFsaXplci4gU3BlY2lmaWNhbGx5LCBhbGwgb3RoZXIgZmllbGRzIGxpa2UgYHRtcF9yZWdgLCBgb3B0dmFsYCwgYG9wdHZhbF9lbmRgLCBhbmQgYG9wdGxlbmAgYXJlIHplcm9lZCB1bmxlc3MgZXhwbGljaXRseSBpbml0aWFsaXplZC4gV2FpdCwgbGF0ZXIgYG9wdGxlbmAgaXMgc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIHRvIGBtYXhfb3B0bGVuYC4gVGhpcyBwcm92aWRlcyBhIHZlcnkgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZSB0aGF0IHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgY29kZSBsZWFrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCBvbmUgbW9yZSB0aW1lLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Mzc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQzODpcdHtcbjI0Mzk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NDA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NDE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDQyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ0MzpcdFx0aW50IGVycjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NDY6XHRcdGlmIChlcnIpXG4yNDQ3Olx0XHRcdHJldHVybiBlcnI7XG4yNDQ4Olx0XG4yNDQ5Olx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbjI0NTA6XHRcbjI0NTE6XHRcdG9wcyA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyk7XG4yNDUyOlx0XHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xuMjQ1MzpcdFx0XHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4yNDU0Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcbjI0NTU6XHRcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuMjQ1NjpcdFx0XHRpZiAoZXJyKVxuMjQ1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4yNDU4Olx0XG4yNDU5Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFx1MDAyNm9wdCk7XG4yNDYwOlx0XG4yNDYxOlx0XHRcdC8qIEFsd2F5cyB3cml0ZSBiYWNrIG9wdGxlbiwgZXZlbiBvbiBmYWlsdXJlLiBTb21lIHByb3RvY29sc1xuMjQ2MjpcdFx0XHQgKiAoZS5nLiBDQU4gcmF3KSByZXR1cm4gLUVSQU5HRSBhbmQgc2V0IG9wdGxlbiB0byB0aGVcbjI0NjM6XHRcdFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cbjI0NjQ6XHRcdFx0ICovXG4yNDY1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4yNDY2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDY3Olx0XHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VnZXRzb2Nrb3B0KSB7XG4yNDY4Olx0XHRcdGlmIChXQVJOX09OQ0Uob3B0dmFsLmlzX2tlcm5lbCB8fCBvcHRsZW4uaXNfa2VybmVsLFxuMjQ2OTpcdFx0XHRcdCAgICAgIFwmIzM0O0ludmFsaWQgYXJndW1lbnQgdHlwZVwmIzM0OykpXG4yNDcwOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMjQ3MTpcdFxuMjQ3MjpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLnVzZXIsXG4yNDczOlx0XHRcdFx0XHQgICAgICBvcHRsZW4udXNlcik7XG4yNDc0Olx0XHR9IGVsc2Uge1xuMjQ3NTpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjI0NzY6XHRcdH1cbjI0Nzc6XHRcbjI0Nzg6XHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxuMjQ3OTpcdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxuMjQ4MDpcdFx0XHRcdFx0XHQgICAgIGVycik7XG4yNDgxOlx0XG4yNDgyOlx0XHRyZXR1cm4gZXJyO1xuMjQ4MzpcdH1cbjI0ODQ6XHRFWFBPUlRfU1lNQk9MKGRvX3NvY2tfZ2V0c29ja29wdCk7XG4yNDg1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2V0c29ja29wdCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgZ2V0c29ja29wdGAgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYGRvX3NvY2tfZ2V0c29ja29wdGAuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGlzIGBjb3B5X2Zyb21fc29ja3B0cmAgY2FsbCB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIGdyYWIgdGhlIG9wdGlvbiBsZW5ndGgsIGBvcHRsZW5gLiBOb3csIGlmIHRoYXQgZmFpbHMsIGBtYXhfb3B0bGVuYCBnZXRzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlci4KCkRvd25zdHJlYW0sIHdlIHBhc3MgdGhpcyBgbWF4X29wdGxlbmAgdmFsdWUsIHBvdGVudGlhbGx5IHplcm8sIHRvIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBJbnNpZGUgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCB3ZSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYG1heF9vcHRsZW5gIGlzIHN0b3JlZCBpbiBgb3JpZ19vcHRsZW5gLCBhbmQgdGhlbiBwYXNzZWQgdG8gYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggaXMgcXVpdGUgaW50ZXJlc3RpbmcuIFRoZSBzaXplIG9mIHRoZSBvcHRpb24gYnVmZmVyIGlzIGRldGVybWluZWQgYnkgYHNvY2tvcHRfYWxsb2NfYnVmYC4KCkhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGluaXRpYWwgYG1heF9vcHRsZW5gICppcyogemVybywgdGhlbiBgc29ja29wdF9hbGxvY19idWZgIHdpbGwgYWxsb2NhdGUgYSB6ZXJvLXNpemVkIGJ1ZmZlciBvciBtYXliZSBqdXN0IHVzZSB0aGUgc3RhY2sgYnVmZmVyIGFuZCByZXR1cm4gMC4gVGhpcyBpcyBwcm9iYWJseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhlIGxvZ2ljIHNlZW1zIHJpZ2h0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc29ja29wdF9hbGxvY19idWZgIGl0c2VsZiBoYW5kbGVzIHRoZSB6ZXJvIGNhc2UgcHJvcGVybHk7IGFueSBvZmYtYnktb25lIGVycm9ycyB0aGVyZSB3b3VsZCBiZSBjcml0aWNhbC4gTGV0IG1lIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhZ2Fpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMDg6XHRcbjIwMDk6XHRcdHJldHVybiByZXQ7XG4yMDEwOlx0fVxuMjAxMTpcdFxuMjAxMjpcdCNpZmRlZiBDT05GSUdfTkVUXG4yMDEzOlx0c3RhdGljIGludCBzb2Nrb3B0X2FsbG9jX2J1ZihzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LCBpbnQgbWF4X29wdGxlbixcbjIwMTQ6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwMTU6XHR7XG4yMDE2Olx0XHRpZiAodW5saWtlbHkobWF4X29wdGxlbiBcdTAwM2MgMCkpXG4yMDE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAxODpcdFxuMjAxOTpcdFx0aWYgKHVubGlrZWx5KG1heF9vcHRsZW4gXHUwMDNlIFBBR0VfU0laRSkpIHtcbjIwMjA6XHRcdFx0LyogV2UgZG9uJiMzOTt0IGV4cG9zZSBvcHR2YWxzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBQQUdFX1NJWkVcbjIwMjE6XHRcdFx0ICogdG8gdGhlIEJQRiBwcm9ncmFtLlxuMjAyMjpcdFx0XHQgKi9cbjIwMjM6XHRcdFx0bWF4X29wdGxlbiA9IFBBR0VfU0laRTtcbjIwMjQ6XHRcdH1cbjIwMjU6XHRcbjIwMjY6XHRcdGlmIChtYXhfb3B0bGVuIFx1MDAzYz0gc2l6ZW9mKGJ1Zi1cdTAwM2VkYXRhKSkge1xuMjAyNzpcdFx0XHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcbjIwMjg6XHRcdFx0ICogYnl0ZXMgYXZvaWQgdGhlIGNvc3Qgb2Yga3phbGxvYy5cbjIwMjk6XHRcdFx0ICovXG4yMDMwOlx0XHRcdGN0eC1cdTAwM2VvcHR2YWwgPSBidWYtXHUwMDNlZGF0YTtcbjIwMzE6XHRcdFx0Y3R4LVx1MDAzZW9wdHZhbF9lbmQgPSBjdHgtXHUwMDNlb3B0dmFsICYjNDM7IG1heF9vcHRsZW47XG4yMDMyOlx0XHRcdHJldHVybiBtYXhfb3B0bGVuO1xuMjAzMzpcdFx0fVxuMjAzNDpcdFxuMjAzNTpcdFx0Y3R4LVx1MDAzZW9wdHZhbCA9IGt6YWxsb2MobWF4X29wdGxlbiwgR0ZQX1VTRVIpO1xuMjAzNjpcdFx0aWYgKCFjdHgtXHUwMDNlb3B0dmFsKVxuMjAzNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwMzg6XHRcbjIwMzk6XHRcdGN0eC1cdTAwM2VvcHR2YWxfZW5kID0gY3R4LVx1MDAzZW9wdHZhbCAmIzQzOyBtYXhfb3B0bGVuO1xuMjA0MDpcdFxuMjA0MTpcdFx0cmV0dXJuIG1heF9vcHRsZW47XG4yMDQyOlx0fVxuMjA0MzpcdFxuMjA0NDpcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbjIwNDU6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcbjIwNDY6XHR7XG4yMDQ3Olx0XHRpZiAoY3R4LVx1MDAzZW9wdHZhbCA9PSBidWYtXHUwMDNlZGF0YSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2ODMKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMTU2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEJQRiBTb2Nrb3B0IEhvb2sgZm9yIENvbXBhdCBTeXNjYWxscyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgZXhwb3NpbmcgQlBGIGhvb2tzIHRvIGNvbXBhdCBzeXNjYWxscyB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY3J1eCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpc19jb21wYXRgIGZsYWcgYW5kIGVuYWJsaW5nIEJQRiBob29rcyB0aGF0IHdlcmUgcHJldmlvdXNseSBieXBhc3NlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbGVhayBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBrZXJuZWwgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYG1heF9vcHRsZW5gIHNjZW5hcmlvLiBJZiBgbWF4X29wdGxlbmAgaXMgemVybywgYXMgdGhlIGNvZGUgZGVtb25zdHJhdGVzLCBhbmQgYHNvY2tvcHRfYWxsb2NfYnVmYCByZXR1cm5zIHplcm8sIHRoZSBzdWJzZXF1ZW50IGBjb3B5X2Zyb21fc29ja3B0cmAgd2lsbCBjb3B5IHplcm8gYnl0ZXMsIG1ha2luZyB0aGUgc2V0dXAgc2FmZS4gSSBjb25maXJtZWQgdGhhdCBgbWF4X29wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gd29ycmllcyBhYm91dCBpdCBiZWluZyB1bmluaXRpYWxpemVkIGluaXRpYWxseS4KCkkgdGhlbiBjb25zaWRlcmVkIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIGhhbmRsZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCBmb2N1c2luZyBvbiB3aGVyZSB0aGUgYnVmZmVyIGlzIGFsbG9jYXRlZC4gYHNvY2tvcHRfYWxsb2NfYnVmYCBpcyB0aGUga2V5LiBUaGUgY29kZSB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciwgZGVjbGFyZWQgYXMgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCB3aGljaCBJJiMzOTttIGNvbmZpZGVudCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3QsIG9yIGl0IHVzZXMgYGt6YWxsb2NgLCB3aGljaCBJIGtub3cgemVyb2VzIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgaG9va3MgYWxzbyB1c2UgYGNvcHlfZnJvbV9zb2NrcHRyYCBhbmQgYGNvcHlfdG9fc29ja3B0cmAuIFNpbmNlIHRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBhbnkgYnl0ZXMgbm90IG92ZXJ3cml0dGVuIGVpdGhlciBieSB1c2VyLXNwYWNlIG9yIHRoZSBCUEYgcHJvZ3JhbSB3aWxsIHJlbWFpbiB6ZXJvLCBwcmV2ZW50aW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLgoKSSBtb3ZlZCBvbiB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gbG9vayBhdCBob3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBUaGUgc2V0c29ja29wdCBoYW5kbGVyIGlzIGNhbGxlZCwgYW5kIHRoZSBrZXkgaXMgaWYgdGhlIEJQRiBwcm9ncmFtIHNldHMgYGtlcm5lbF9vcHR2YWxgLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgaXMgdXNlZCwgc28gaXQgaXMgZWl0aGVyIHplcm9lZCwgb3IgZmlsbGVkIGZyb20gdXNlciBzcGFjZS4gSW4gYGRvX3NvY2tfZ2V0c29ja29wdGAsIHRoZSBrZXJuZWwgaGFuZGxlciB3cml0ZXMgdG8gdGhlIGJ1ZmZlciwgQlBGIHByb2dyYW0gbWF5IG1vZGlmeSBpdCwgYW5kIHRoZW4gaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIGVpdGhlci4KCkkgYWxzbyBjaGVja2VkIG90aGVyIHBsYWNlcyB3aGVyZSBgY29tcGF0YCBpcyB1c2VkOiBpbiB0aGUgdmFyaW91cyBCUEYgaGVhZGVyIGZpbGVzIGFuZCBpbiB0aGUgdGVzdCBmaWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgY29uY2VybmluZyB1c2VzLgoKSSBoYWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IEMgaW5pdGlhbGl6YXRpb24sIGFuZCBjb25maXJtZWQgdGhhdCBhIHN0cnVjdCBpbml0aWFsaXplZCB3aXRoIGB7fWAgb3IgYHswfWAgemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcgYW5kIGFycmF5cy4gSSBhbHNvIHZlcmlmaWVkIHRoYXQgYGt6YWxsb2NgIGRvZXMsIGluIGZhY3QsIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgY2hlY2tlZCB0aGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eCA9IHsgLi4uIH07YCBpbml0aWFsaXphdGlvbiBhcyB3ZWxsOyBhbGwgZmllbGRzIHdlcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gdGhpcyBsb29rcyBzb2xpZC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBmZWF0dXJlIGFkZGl0aW9uIChvciBwZXJoYXBzIGEgYnVnIGZpeCksIHNvIHRoZSBzdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLiBUaGUgYnVmZmVycyBhcmUgZWl0aGVyIHN0YWNrLWFsbG9jYXRlZCBhbmQgemVyb2VkIG9yIGhlYXAtYWxsb2NhdGVkIGFuZCB6ZXJvZWQgdmlhIGBremFsbG9jYCwgYW5kIHRoZSBjb250ZXh0IGl0c2VsZiBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQsIHNvIG5vIGlzc3VlcyBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2NvbXBhdGAgZmllbGQgdG8gdGhlIEJQRiBzb2Nrb3B0IGNvbnRleHQgYW5kIGVuYWJsZXMgQlBGIGhvb2tzIGZvciBjb21wYXQgc2V0c29ja29wdC9nZXRzb2Nrb3B0IHN5c2NhbGxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhc3NpbmcgdGhlIGBjb21wYXRgIGZsYWcgdG8gdGhlIEJQRiBob29rcyBhbmQgZXhwb3NpbmcgaXQgdG8gQlBGIHByb2dyYW1zLiBUaGUgYnVmZmVycyB1c2VkIGZvciBCUEYgc29ja29wdCBob29rcyBhcmUgYWxsb2NhdGVkIHZpYSBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciB6ZXJvLWluaXRpYWxpemVkIHZpYSBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLiBUaGVyZWZvcmUsIGFsbCBtZW1vcnkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIHBhc3NlZCB0byBrZXJuZWwgaGFuZGxlcnMsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuYCBjb250ZXh0IGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIHplcm8tZmlsbCB0aGUgdW5hc3NpZ25lZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguMDAzMzI0MDAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTc0NTA5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfY29tcGF0YCBmaWVsZCB0byB0aGUgQlBGIHNvY2tvcHQgY29udGV4dCBhbmQgZW5hYmxlcyBCUEYgaG9va3MgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgc3lzY2FsbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzIGFuZCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMuIFRoZSBidWZmZXJzIHVzZWQgZm9yIEJQRiBzb2Nrb3B0IGhvb2tzIGFyZSBhbGxvY2F0ZWQgdmlhIGBzb2Nrb3B0X2FsbG9jX2J1ZmAsIHdoaWNoIHVzZXMgZWl0aGVyIGEgc3RhY2sgYnVmZmVyIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O2Agb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuIFRoZXJlZm9yZSwgYWxsIG1lbW9yeSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgcGFzc2VkIHRvIGtlcm5lbCBoYW5kbGVycywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIGNvbnRleHQgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggemVyby1maWxsIHRoZSB1bmFzc2lnbmVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODozOC4wMDMzMjk4MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjI4ODQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRjZmEwODU3MzY4ODE5MGM0M2Y5ZDc1NTMwOTkxNjkwZDU5MTQ2YzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MTg6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxcbkBAIC0xMzgsMTQgKzEzOCwxNSBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxcbiBcXHRcXHRcXHRcXHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbiBcXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGludCAqbGV2ZWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpO1xcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgKmxldmVsLCBpbnQgKm9wdG5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgKm9wdGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcXG4gXFxuLWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXR2YWwpO1xcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7XFxuIFxcbiBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdF9rZXJuKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCxcXG5AQCAtMzc2LDIxICszNzcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0X19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gfSlcXG4gXFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxcXFxuLVxcdFxcdFxcdFxcdCAgICAgICBrZXJuZWxfb3B0dmFsKVxcdFxcdFxcdCAgICAgICBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgICBvcHRsZW4sIGtlcm5lbF9vcHR2YWwpXFx0XFx0ICAgICAgIFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRpbnQgX19yZXQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gXFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsXFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG9wdGxlbixcXHQgICAgICAgXFxcXFxcbitcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCAgICAgICBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAga2VybmVsX29wdHZhbCk7ICAgICBcXFxcXFxuIFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIH0pXFxuIFxcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcXFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbWF4X29wdGxlbiwgcmV0dmFsKVxcdFxcdCAgICAgICBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbClcXHQgICAgICAgXFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdGludCBfX3JldCA9IHJldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRpZiAoY2dyb3VwX2JwZl9lbmFibGVkKENHUk9VUF9HRVRTT0NLT1BUKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdCAgICAgICBcXFxcXFxuQEAgLTQwMCw3ICs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHRcXHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcdCAgICAgICBcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdGxldmVsLCBvcHRuYW1lKSlcXHRcXHQgICAgICAgXFxcXFxcbiBcXHRcXHRcXHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoXFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0XFx0XFx0c29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLFxcdCAgICAgICBcXFxcXFxuK1xcdFxcdFxcdFxcdHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXFxcXFxcbiBcXHRcXHRcXHRcXHRtYXhfb3B0bGVuLCByZXR2YWwpO1xcdFxcdFxcdCAgICAgICBcXFxcXFxuIFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIH0pXFxuQEAgLTUwNCwxMSArNTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhzb2NrX29wcykgKHsgMDsgfSlcXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0RFVklDRV9DR1JPVVAoYXR5cGUsIG1ham9yLCBtaW5vciwgYWNjZXNzKSAoeyAwOyB9KVxcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG9wdGxlbiwgbWF4X29wdGxlbiwgcmV0dmFsKSAoeyByZXR2YWw7IH0pXFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgICBrZXJuZWxfb3B0dmFsKSAoeyAwOyB9KVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfQlBGICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggNGE5YmM2YTg0OGYyZS4uNWFiN2Q2MDZhZWE1MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbkBAIC0xNzAyLDYgKzE3MDIsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiB7XFxuIFxcdHMzMlxcdFxcdGxldmVsO1xcbiBcXHRzMzJcXHRcXHRvcHRuYW1lO1xcbiBcXHRzMzJcXHRcXHRvcHRsZW47XFxuK1xcdHMzMlxcdFxcdGlzX2NvbXBhdDtcXG4gXFx0LyogZm9yIHJldHZhbCBpbiBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHggKi9cXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XFxuIFxcdC8qIFRlbXBvcmFyeSBcXFwicmVnaXN0ZXJcXFwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcXG4gXFx0X19zMzJcXHRvcHRuYW1lO1xcbiBcXHRfX3MzMlxcdG9wdGxlbjtcXG4gXFx0X19zMzJcXHRyZXR2YWw7XFxuK1xcdF9fczMyXFx0aXNfY29tcGF0O1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5pbmRleCA4ZmJjOTQyYTFjYzNhLi45MTA4NzhlOTkxYTA0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuQEAgLTIwNTUsNyArMjA1NSw3IEBAIHN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxcbiBcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHR2YWwgIT0gYnVmLVxcdTAwM2VkYXRhO1xcbiB9XFxuIFxcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXFxuK2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdGxlbiwgY2hhciAqKmtlcm5lbF9vcHR2YWwpXFxuIHtcXG5AQCAtMjA2NSw2ICsyMDY1LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxcbiBcXHRcXHQuc2sgPSBzayxcXG4gXFx0XFx0LmxldmVsID0gKmxldmVsLFxcbiBcXHRcXHQub3B0bmFtZSA9ICpvcHRuYW1lLFxcbitcXHRcXHQuaXNfY29tcGF0ID0gY29tcGF0LFxcbiBcXHR9O1xcbiBcXHRpbnQgcmV0LCBtYXhfb3B0bGVuO1xcbiBcXG5AQCAtMjE0Niw3ICsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGludCByZXR2YWwpXFxuQEAgLTIxNTcsNiArMjE1OCw3IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbiBcXHRcXHQuc2sgPSBzayxcXG4gXFx0XFx0LmxldmVsID0gbGV2ZWwsXFxuIFxcdFxcdC5vcHRuYW1lID0gb3B0bmFtZSxcXG4rXFx0XFx0LmlzX2NvbXBhdCA9IGNvbXBhdCxcXG4gXFx0XFx0LmN1cnJlbnRfdGFzayA9IGN1cnJlbnQsXFxuIFxcdH07XFxuIFxcdGludCBvcmlnX29wdGxlbjtcXG5AQCAtMjcwNSw2ICsyNzA3LDkgQEAgc3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdCppbnNuKysgPSBDR19TT0NLT1BUX1JFQURfRklFTEQob3B0bGVuKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpOlxcbitcXHRcXHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKGlzX2NvbXBhdCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcXG4gXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMzQ2LDEwICsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbi1cXHRpZiAoIWNvbXBhdClcXG4tXFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgXFx1MDAyNm9wdGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuK1xcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgY29tcGF0LCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgXFx1MDAyNm9wdGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a2VybmVsX29wdHZhbCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTI0NDcsOCArMjQ0Niw3IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmICghY29tcGF0KVxcbi1cXHRcXHRjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XFxuK1xcdGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcXG4gXFxuIFxcdG9wcyA9IFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpO1xcbiBcXHRpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkge1xcbkBAIC0yNDc3LDEwICsyNDc1LDkgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbiBcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjb21wYXQpXFxuLVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgbGV2ZWwsIG9wdG5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4rXFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgb3B0bGVuLCBtYXhfb3B0bGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGVycik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTc2MTYsNiArNzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XFxuIFxcdF9fczMyXFx0b3B0bmFtZTtcXG4gXFx0X19zMzJcXHRvcHRsZW47XFxuIFxcdF9fczMyXFx0cmV0dmFsO1xcbitcXHRfX3MzMlxcdGlzX2NvbXBhdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xcbmluZGV4IGVhYWM4M2E3ZjM4OGIuLmM3ZGQyMmQwZTNmODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXFxuQEAgLTIxNSw2ICsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xcbiBcXHRcXHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXFxuIFxcdFxcdC5nZXRfb3B0bGVuID0gMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGVzY3IgPSBcXFwiZ2V0c29ja29wdDogcmVhZCBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogcjYgPSBjdHgtXFx1MDAzZWlzX2NvbXBhdCAqL1xcbitcXHRcXHRcXHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXFxuK1xcdFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxcbitcXG4rXFx0XFx0XFx0LyogaWYgKGN0eC1cXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cXG4rXFx0XFx0XFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2VyZXR2YWwgPSAwICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcXG4rXFx0XFx0XFx0LyogcmV0dXJuIDEgKi9cXG4rXFx0XFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxcbitcXHRcXHRcXHRCUEZfSk1QX0EoMSksXFxuK1xcdFxcdFxcdC8qIH0gZWxzZSB7ICovXFxuK1xcdFxcdFxcdC8qIHJldHVybiAwICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0XFx0LyogfSAqL1xcbitcXHRcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdH0sXFxuK1xcdFxcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcXG4rXFx0XFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxcbitcXG4rXFx0XFx0LmdldF9sZXZlbCA9IFNPTF9JUCxcXG4rXFx0XFx0LmdldF9vcHRuYW1lID0gSVBfVE9TLFxcbitcXHRcXHQuZ2V0X29wdGxlbiA9IDEsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2NyID0gXFxcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2Vpc19jb21wYXQgPSAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5lcnJvciA9IERFTllfTE9BRCxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzY3IgPSBcXFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cXHUwMDNlb3B0bmFtZVxcXCIsXFxuIFxcdFxcdC5pbnNucyA9IHtcXG5AQCAtNjA5LDYgKzY1Miw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XFxuIFxcdFxcdC5nZXRfb3B0dmFsID0geyAxIFxcdTAwM2NcXHUwMDNjIDMgfSxcXG4gXFx0XFx0LmdldF9vcHRsZW4gPSAxLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5kZXNjciA9IFxcXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cXHUwMDNlaXNfY29tcGF0XFxcIixcXG4rXFx0XFx0Lmluc25zID0ge1xcbitcXHRcXHRcXHQvKiByNiA9IGN0eC1cXHUwMDNlaXNfY29tcGF0ICovXFxuK1xcdFxcdFxcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcXG4rXFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXFxuK1xcbitcXHRcXHRcXHQvKiBpZiAoY3R4LVxcdTAwM2Vpc19jb21wYXQgPT0gMCkgeyAqL1xcbitcXHRcXHRcXHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxcbitcXHRcXHRcXHQvKiBjdHgtXFx1MDAzZW9wdGxlbiA9IC0xICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksXFxuK1xcdFxcdFxcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcXG4rXFx0XFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXFxuK1xcdFxcdFxcdC8qIHJldHVybiAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX0pNUF9BKDEpLFxcbitcXHRcXHRcXHQvKiB9IGVsc2UgeyAqL1xcbitcXHRcXHRcXHQvKiByZXR1cm4gMCAqL1xcbitcXHRcXHRcXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXFxuK1xcdFxcdFxcdC8qIH0gKi9cXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5zZXRfb3B0bmFtZSA9IDEyMyxcXG4rXFx0XFx0LnNldF9vcHRsZW4gPSAxLFxcbitcXHRcXHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2NyID0gXFxcInNldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXFx1MDAzZWlzX2NvbXBhdFxcXCIsXFxuK1xcdFxcdC5pbnNucyA9IHtcXG4rXFx0XFx0XFx0LyogY3R4LVxcdTAwM2Vpc19jb21wYXQgPSAxICovXFxuK1xcdFxcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcXG4rXFx0XFx0XFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcXG4rXFx0XFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHRcXHR9LFxcbitcXHRcXHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXFxuK1xcdFxcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcXG4rXFxuK1xcdFxcdC5lcnJvciA9IERFTllfTE9BRCxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzY3IgPSBcXFwic2V0c29ja29wdDogcmVhZCBjdHgtXFx1MDAzZW9wdGxlblxcXCIsXFxuIFxcdFxcdC5pbnNucyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguNTA2NDQzMTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE4Mjg2NjgyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQ09NUEFUXCIsXG4gICAgXCJJQTMyX0VNVUxBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRcIixcbiAgICBcIl9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfc2V0c29ja29wdFwiLFxuICAgIFwiZG9fc29ja19nZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBjZ3JvdXAgc29ja29wdCBob29rcyB0byBleGVjdXRlIEJQRiBwcm9ncmFtcyBmb3IgY29tcGF0IHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgc3lzY2FsbHMuIFByZXZpb3VzbHksIEJQRiBjZ3JvdXAgcHJvZ3JhbXMgd2VyZSBieXBhc3NlZCBmb3IgY29tcGF0IHN5c2NhbGxzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIEJQRiBjZ3JvdXAgc29ja29wdCBob29rcyB0byBjb21wYXQgc3lzY2FsbHMuIFRoZSBgaXNfY29tcGF0YCBmbGFnIGlzIGFsc28gYWRkZWQgdG8gdGhlIEJQRiBjb250ZXh0IGFuZCBjYW4gYmUgcmVhZCBieSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgY29tcGF0IHNvY2tldCBvcHRpb24gaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZmEwODU3MzY4ODE5MGM0M2Y5ZDc1NTMwOTkxNjkwZDU5MTQ2YzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbmluZGV4IDRkMGNjNjU5NzZhMTQuLjk0M2ViMDIzYjUyYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmhcbkBAIC0xMzgsMTQgKzEzOCwxNSBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxuIFx0XHRcdFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGludCAqbGV2ZWwsXG4tXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLVx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbCk7XG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNvY2ssIGJvb2wgY29tcGF0LFxuK1x0XHRcdFx0ICAgICAgIGludCAqbGV2ZWwsIGludCAqb3B0bmFtZSxcbitcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgKm9wdGxlbixcbitcdFx0XHRcdCAgICAgICBjaGFyICoqa2VybmVsX29wdHZhbCk7XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tXHRcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IG1heF9vcHRsZW4sXG4tXHRcdFx0XHQgICAgICAgaW50IHJldHZhbCk7XG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCxcbitcdFx0XHRcdCAgICAgICBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuK1x0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG4rXHRcdFx0XHQgICAgICAgaW50IG1heF9vcHRsZW4sIGludCByZXR2YWwpO1xuIFxuIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0X2tlcm4oc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHRcdCAgICBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLFxuQEAgLTM3NiwyMSArMzc3LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBrZXJuZWxfb3B0dmFsKVx0XHRcdCAgICAgICBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxuK1x0XHRcdFx0ICAgICAgIG9wdGxlbiwga2VybmVsX29wdHZhbClcdFx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IDA7XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX1NFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuIFx0ICAgIGNncm91cF9icGZfc29ja19lbmFibGVkKHNvY2ssIENHUk9VUF9TRVRTT0NLT1BUKSlcdFx0ICAgICAgIFxcXG4tXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBsZXZlbCxcdCAgICAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bmFtZSwgb3B0dmFsLCAgICBcXFxuLVx0XHRcdFx0XHRcdFx0ICAgb3B0bGVuLFx0ICAgICAgIFxcXG4rXHRcdF9fcmV0ID0gX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzb2NrLCBjb21wYXQsICAgICAgIFxcXG4rXHRcdFx0XHRcdFx0XHQgICBsZXZlbCwgb3B0bmFtZSwgICAgIFxcXG4rXHRcdFx0XHRcdFx0XHQgICBvcHR2YWwsIG9wdGxlbiwgICAgIFxcXG4gXHRcdFx0XHRcdFx0XHQgICBrZXJuZWxfb3B0dmFsKTsgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbiBcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICAgXFxcbi1cdFx0XHRcdCAgICAgICBtYXhfb3B0bGVuLCByZXR2YWwpXHRcdCAgICAgICBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgICBcXFxuK1x0XHRcdFx0ICAgICAgIG9wdGxlbiwgbWF4X29wdGxlbiwgcmV0dmFsKVx0ICAgICAgIFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGludCBfX3JldCA9IHJldHZhbDtcdFx0XHRcdFx0XHQgICAgICAgXFxcbiBcdGlmIChjZ3JvdXBfYnBmX2VuYWJsZWQoQ0dST1VQX0dFVFNPQ0tPUFQpIFx1MDAyNlx1MDAyNlx0XHRcdCAgICAgICBcXFxuQEAgLTQwMCw3ICs0MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHR0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFx0ICAgICAgIFxcXG4gXHRcdFx0XHRcdGxldmVsLCBvcHRuYW1lKSlcdFx0ICAgICAgIFxcXG4gXHRcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KFx0ICAgICAgIFxcXG4tXHRcdFx0XHRzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sXHQgICAgICAgXFxcbitcdFx0XHRcdHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAgXFxcbiBcdFx0XHRcdG1heF9vcHRsZW4sIHJldHZhbCk7XHRcdFx0ICAgICAgIFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gfSlcbkBAIC01MDQsMTEgKzUwNSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TT0NLX09QUyhzb2NrX29wcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfREVWSUNFX0NHUk9VUChhdHlwZSwgbWFqb3IsIG1pbm9yLCBhY2Nlc3MpICh7IDA7IH0pXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NZU0NUTChoZWFkLHRhYmxlLHdyaXRlLGJ1Zixjb3VudCxwb3MpICh7IDA7IH0pXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpICh7IHJldHZhbDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFxcXG4gXHRcdFx0XHRcdCAgICBvcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbisjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgXFxcbiBcdFx0XHRcdCAgICAgICBrZXJuZWxfb3B0dmFsKSAoeyAwOyB9KVxuIFxuICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX0JQRiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCA0YTliYzZhODQ4ZjJlLi41YWI3ZDYwNmFlYTUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTE3MDIsNiArMTcwMiw3IEBAIHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcbiBcdHMzMlx0XHRsZXZlbDtcbiBcdHMzMlx0XHRvcHRuYW1lO1xuIFx0czMyXHRcdG9wdGxlbjtcbitcdHMzMlx0XHRpc19jb21wYXQ7XG4gXHQvKiBmb3IgcmV0dmFsIGluIHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqL1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3Rhc2s7XG4gXHQvKiBUZW1wb3JhcnkgXCJyZWdpc3RlclwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjE1ZjcxMmI1YjE2NDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTc2MTYsNiArNzYxNiw3IEBAIHN0cnVjdCBicGZfc29ja29wdCB7XG4gXHRfX3MzMlx0b3B0bmFtZTtcbiBcdF9fczMyXHRvcHRsZW47XG4gXHRfX3MzMlx0cmV0dmFsO1xuK1x0X19zMzJcdGlzX2NvbXBhdDtcbiB9O1xuIFxuIHN0cnVjdCBicGZfcGlkbnNfaW5mbyB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDhmYmM5NDJhMWNjM2EuLjkxMDg3OGU5OTFhMDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMjA1NSw3ICsyMDU1LDcgQEAgc3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wdHZhbCAhPSBidWYtXHUwMDNlZGF0YTtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuK2ludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIGludCAqb3B0bGVuLCBjaGFyICoqa2VybmVsX29wdHZhbClcbiB7XG5AQCAtMjA2NSw2ICsyMDY1LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0XHQuc2sgPSBzayxcbiBcdFx0LmxldmVsID0gKmxldmVsLFxuIFx0XHQub3B0bmFtZSA9ICpvcHRuYW1lLFxuK1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0fTtcbiBcdGludCByZXQsIG1heF9vcHRsZW47XG4gXG5AQCAtMjE0Niw3ICsyMTQ3LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgKmxldmVsLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIGludCBtYXhfb3B0bGVuLFxuIFx0XHRcdFx0ICAgICAgIGludCByZXR2YWwpXG5AQCAtMjE1Nyw2ICsyMTU4LDcgQEAgaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4gXHRcdC5zayA9IHNrLFxuIFx0XHQubGV2ZWwgPSBsZXZlbCxcbiBcdFx0Lm9wdG5hbWUgPSBvcHRuYW1lLFxuK1x0XHQuaXNfY29tcGF0ID0gY29tcGF0LFxuIFx0XHQuY3VycmVudF90YXNrID0gY3VycmVudCxcbiBcdH07XG4gXHRpbnQgb3JpZ19vcHRsZW47XG5AQCAtMjcwNSw2ICsyNzA3LDkgQEAgc3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRlbHNlXG4gXHRcdFx0Kmluc24rKyA9IENHX1NPQ0tPUFRfUkVBRF9GSUVMRChvcHRsZW4pO1xuIFx0XHRicmVhaztcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpOlxuK1x0XHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKGlzX2NvbXBhdCk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIHJldHZhbCk6XG4gXHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgYnBmX2NnX3J1bl9jdHgsIHJ1bl9jdHgpICE9IDApO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggNjNjNjlhMGZhNzRlMS4uZjQ1NDk5NzVmOThiOSAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtMjM0NiwxMCArMjM0Niw5IEBAIGludCBkb19zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNmtlcm5lbF9vcHR2YWwpO1xuK1x0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGNvbXBhdCwgXHUwMDI2bGV2ZWwsIFx1MDAyNm9wdG5hbWUsXG4rXHRcdFx0XHRcdCAgICAgb3B0dmFsLCBcdTAwMjZvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMjQ0Nyw4ICsyNDQ2LDcgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcbitcdGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xuIFxuIFx0b3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XG5AQCAtMjQ3NywxMCArMjQ3NSw5IEBAIGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbiBcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbXBhdClcbi1cdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4tXHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuK1x0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsXG4rXHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4rXHRcdFx0XHRcdCAgICAgZXJyKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcbiBcdF9fczMyXHRvcHRuYW1lO1xuIFx0X19zMzJcdG9wdGxlbjtcbiBcdF9fczMyXHRyZXR2YWw7XG4rXHRfX3MzMlx0aXNfY29tcGF0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmNcbmluZGV4IGVhYWM4M2E3ZjM4OGIuLmM3ZGQyMmQwZTNmODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2Nrb3B0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuQEAgLTIxNSw2ICsyMTUsNDkgQEAgc3RhdGljIHN0cnVjdCBzb2Nrb3B0X3Rlc3Qge1xuIFx0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbitcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcbitcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4rXHRcdFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcbitcdFx0XHQvKiBjdHgtXHUwMDNlcmV0dmFsID0gMCAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCByZXR2YWwpKSxcbitcdFx0XHQvKiByZXR1cm4gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfSk1QX0EoMSksXG4rXHRcdFx0LyogfSBlbHNlIHsgKi9cbitcdFx0XHQvKiByZXR1cm4gMCAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcbitcdFx0XHQvKiB9ICovXG4rXHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0XHR9LFxuK1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4rXHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcbitcdFx0LmdldF9sZXZlbCA9IFNPTF9JUCxcbitcdFx0LmdldF9vcHRuYW1lID0gSVBfVE9TLFxuK1x0XHQuZ2V0X29wdGxlbiA9IDEsXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGVzY3IgPSBcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiBjdHgtXHUwMDNlaXNfY29tcGF0ID0gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1xuK1x0XHQuZXJyb3IgPSBERU5ZX0xPQUQsXG4rXHR9LFxuIFx0e1xuIFx0XHQuZGVzY3IgPSBcImdldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlb3B0bmFtZVwiLFxuIFx0XHQuaW5zbnMgPSB7XG5AQCAtNjA5LDYgKzY1Miw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XG4gXHRcdC5nZXRfb3B0dmFsID0geyAxIFx1MDAzY1x1MDAzYyAzIH0sXG4gXHRcdC5nZXRfb3B0bGVuID0gMSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwic2V0c29ja29wdDogcmVhZCBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiByNiA9IGN0eC1cdTAwM2Vpc19jb21wYXQgKi9cbitcdFx0XHRCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR182LCBCUEZfUkVHXzEsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcbitcdFx0XHQvKiBpZiAoY3R4LVx1MDAzZWlzX2NvbXBhdCA9PSAwKSB7ICovXG4rXHRcdFx0QlBGX0pNUF9JTU0oQlBGX0pORSwgQlBGX1JFR182LCAwLCA0KSxcbitcdFx0XHQvKiBjdHgtXHUwMDNlb3B0bGVuID0gLTEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLTEpLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIG9wdGxlbikpLFxuK1x0XHRcdC8qIHJldHVybiAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9KTVBfQSgxKSxcbitcdFx0XHQvKiB9IGVsc2UgeyAqL1xuK1x0XHRcdC8qIHJldHVybiAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdC8qIH0gKi9cbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1xuK1x0XHQuc2V0X29wdG5hbWUgPSAxMjMsXG4rXHRcdC5zZXRfb3B0bGVuID0gMSxcbitcdFx0LmlvX3VyaW5nX3N1cHBvcnQgPSB0cnVlLFxuK1x0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiBkZW55IHdyaXRpbmcgdG8gY3R4LVx1MDAzZWlzX2NvbXBhdFwiLFxuK1x0XHQuaW5zbnMgPSB7XG4rXHRcdFx0LyogY3R4LVx1MDAzZWlzX2NvbXBhdCA9IDEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXG4rXHRcdFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxuK1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgaXNfY29tcGF0KSksXG4rXHRcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0XHR9LFxuK1x0XHQuYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4rXHRcdC5leHBlY3RlZF9hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcbitcdFx0LmVycm9yID0gREVOWV9MT0FELFxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2VvcHRsZW5cIixcbiBcdFx0Lmluc25zID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzguNTA2NDQ1MTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4MDg4NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgQlBGIGNncm91cCBzb2Nrb3B0IGhvb2tzIGJlaGF2ZSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBjb21wYXRgIGZsYWcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGEgY2FyZWZ1bCBsb29rLiBMZXQncyBzZWUuLi5cblxuRnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGNsZWFyIHRoaXMgdG91Y2hlcyB0aGUgY29yZSBCUEYgY2dyb3VwIGluZnJhc3RydWN0dXJlIGluIGBicGYtY2dyb3VwLmhgIGFuZCBgY2dyb3VwLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQncyBhbHNvIG1vZGlmeWluZyBgc29ja2V0LmNgLCB3aGljaCBpcyB3aGVyZSB0aGUgc3lzY2FsbHMgYXJlIGhhbmRsZWQsIGFuZCBjcnVjaWFsbHksIGFkZGluZyBgaXNfY29tcGF0YCB0byB0aGUgYGJwZl9zb2Nrb3B0YCBzdHJ1Y3R1cmUuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBCUEYgcHJvZ3JhbXMgd2lsbCBub3cgYmUgaW52b2tlZCBpbiB0aGUgY29udGV4dCBvZiBgY29tcGF0YCBzeXN0ZW0gY2FsbHMuIFRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBpbiBgc29ja29wdC5jYCBpcyBpbXBvcnRhbnQsIHRob3VnaCwgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCByZW1vdmluZyB0aGUgYGlmICghY29tcGF0KWAgY2hlY2tzIGluIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gIFllcywgdGhlIGNvZGUgY29uZmlybXMgbXkgc3VzcGljaW9uLiBUaGUgcGF0Y2ggbm93IHVuY29uZGl0aW9uYWxseSBleGVjdXRlcyBgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUYCBhbmQgYEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVGAgcmVnYXJkbGVzcyBvZiB0aGUgYGNvbXBhdGAgZmxhZydzIHN0YXRlLCBhZnRlciBjaGVja2luZyBgbmV0L3NvY2tldC5jYCB0byBzZWUgaWYgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbW9kaWZpZWQgdG8gaW5jbHVkZSBgY29tcGF0YCBhcyB3ZWxsLCBhcyB3aXRoIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBUaGlzIG1lYW5zIHRoYXQgQlBGIHByb2dyYW1zIGNhbiBub3cgaW50ZXJjZXB0ICpjb21wYXQqIHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgY2FsbHMuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuXG5cblRoaXMgb3BlbnMgdXAgYSBuZXcgc2V0IG9mIGNhcGFiaWxpdGllcyBmb3IgQlBGIHByb2dyYW1zLCBidXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IGF0dGFjayB2ZWN0b3IuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0ZXN0IGNhcmVmdWxseS5cblxuTm93LCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSdkIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGFuIG9idmlvdXMgcHJlcmVxdWlzaXRlLiAgU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNvbXBhdCBzeXNjYWxscywgYENPTkZJR19DT01QQVRgIHdpbGwgYWxzbyBiZSByZXF1aXJlZC4gIExvb2tpbmcgYXQgdGhlIGBuZXQvc29ja2V0LmNgLCBJIHNlZSB0aGF0IGBkb19zb2NrX3NldHNvY2tvcHRgIGlzIGluZGVlZCBjYWxsZWQgYnkgYm90aCBgX19zeXNfc2V0c29ja29wdGAgYW5kIGBfX2NvbXBhdF9zeXNfc2V0c29ja29wdGAsIGNlbWVudGluZyB0aGUgaW1wb3J0YW5jZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjQ3Ljk4NzMzMzEzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zb2NrZXQuYz0yMzMwPXN0YXRpYyBib29sIHNvY2tfdXNlX2N1c3RvbV9zb2xfc29ja2V0KGNvbnN0IHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc29ja2V0LmMtMjMzNC1cXG5uZXQvc29ja2V0LmM6MjMzNTppbnQgZG9fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxubmV0L3NvY2tldC5jLTIzMzYtXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3NvY2tldC5jLTIzNzItfVxcbm5ldC9zb2NrZXQuYzoyMzczOkVYUE9SVF9TWU1CT0woZG9fc29ja19zZXRzb2Nrb3B0KTtcXG5uZXQvc29ja2V0LmMtMjM3NC1cXG4tLVxcbm5ldC9zb2NrZXQuYz0yMzc4PWludCBfX3N5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKnVzZXJfb3B0dmFsLFxcbi0tXFxubmV0L3NvY2tldC5jLTIzOTEtXFxubmV0L3NvY2tldC5jOjIzOTI6XFx0cmV0dXJuIGRvX3NvY2tfc2V0c29ja29wdChzb2NrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3NvY2tldC5jLTIzOTMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODo0OC4wMzU2NzUwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUzNDQxMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHNldHNvY2tvcHRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGNvbmNlcm5lZCB3aXRoLCBhbmQgSSBrbm93IGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYF9fc3lzX3NldHNvY2tvcHRgIHN5c3RlbSBjYWxsIGhhbmRsZXIuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQgZnJvbSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgKmNhbGxpbmcqIGBfX3N5c19zZXRzb2Nrb3B0YC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYmVpbmcgY29uZmlndXJlZCBmcm9tIHRoZSB1c2VyIHNwYWNlLiBMZXQncyBzZWUgd2hvJ3MgbWFraW5nIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjUyLjA4OTEyMDE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgzNDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N5c19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc29ja2V0LmM9MjM3Mz1FWFBPUlRfU1lNQk9MKGRvX3NvY2tfc2V0c29ja29wdCk7XFxuLS1cXG5uZXQvc29ja2V0LmMtMjM3Ny0gKi9cXG5uZXQvc29ja2V0LmM6MjM3ODppbnQgX19zeXNfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICp1c2VyX29wdHZhbCxcXG5uZXQvc29ja2V0LmMtMjM3OS1cXHRcXHQgICAgIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvc29ja2V0LmM9MjM5NT1TWVNDQUxMX0RFRklORTUoc2V0c29ja29wdCwgaW50LCBmZCwgaW50LCBsZXZlbCwgaW50LCBvcHRuYW1lLFxcbi0tXFxubmV0L3NvY2tldC5jLTIzOTcte1xcbm5ldC9zb2NrZXQuYzoyMzk4OlxcdHJldHVybiBfX3N5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9zb2NrZXQuYy0yMzk5LX1cXG4tLVxcbm5ldC9zb2NrZXQuYz0zMTcwPVNZU0NBTExfREVGSU5FMihzb2NrZXRjYWxsLCBpbnQsIGNhbGwsIHVuc2lnbmVkIGxvbmcgX191c2VyICosIGFyZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmMtMzI0Ni1cXHRjYXNlIFNZU19TRVRTT0NLT1BUOlxcbm5ldC9zb2NrZXQuYzozMjQ3OlxcdFxcdGVyciA9IF9fc3lzX3NldHNvY2tvcHQoYTAsIGExLCBhWzJdLCAoY2hhciBfX3VzZXIgKilhWzNdLFxcbm5ldC9zb2NrZXQuYy0zMjQ4LVxcdFxcdFxcdFxcdCAgICAgICBhWzRdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6NTIuMTM2OTU5NzgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyODEzMjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIEtlcm5lbCBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBhIHNwZWNpZmljIHNvY2tldCBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdoZXJlIGBjb21wYXRgIGlzIHN1cHBvc2VkIHRvIGJlIHBhc3NlZCB0byBgX19zeXNfc2V0c29ja29wdGAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLCByaWdodD8gSG1tLCBoYW5nIG9uIGEgc2Vjb25kLi4uIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBgX19zeXNfc2V0c29ja29wdGDigKYgbm9wZSwgaXQgZG9lc24ndCBldmVuICp0YWtlKiBhIGBjb21wYXRgIHBhcmFtZXRlciBkaXJlY3RseS4gVGhhdCdzIG9kZC5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cCBhIGJpdC4gU2luY2UgYF9fc3lzX3NldHNvY2tvcHRgIGlzIG9idmlvdXNseSB0aGUgc3lzdGVtIGNhbGwgd3JhcHBlciwgdGhlcmUgbXVzdCBiZSBhbiBpbnRlcm1lZGlhdGUgZnVuY3Rpb24gY2FsbCB3aXRoaW4gaXQgdG8gaGFuZGxlIHRoZSBjb3JlIGxvZ2ljLiBPa2F5LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYGRvX3NvY2tfc2V0c29ja29wdGAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQgc291bmRzIHJpZ2h0LiBTbywgKnRoYXQncyogcHJvYmFibHkgd2hlcmUgYGNvbXBhdGAgaXMgZWl0aGVyIGJlaW5nIHVzZWQsIG9yIGJlaW5nIHBhc3NlZCBmdXJ0aGVyIGFsb25nLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIGRpZyBpbnRvIGBfX3N5c19zZXRzb2Nrb3B0YCB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODo1Ni4xNjUwOTQ2NDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNzgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNzg6XFx0aW50IF9fc3lzX3NldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqdXNlcl9vcHR2YWwsXFxuMjM3OTpcXHRcXHRcXHQgICAgIGludCBvcHRsZW4pXFxuMjM4MDpcXHR7XFxuMjM4MTpcXHRcXHRzb2NrcHRyX3Qgb3B0dmFsID0gVVNFUl9TT0NLUFRSKHVzZXJfb3B0dmFsKTtcXG4yMzgyOlxcdFxcdGJvb2wgY29tcGF0ID0gaW5fY29tcGF0X3N5c2NhbGwoKTtcXG4yMzgzOlxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuMjM4NDpcXHRcXHRDTEFTUyhmZCwgZikoZmQpO1xcbjIzODU6XFx0XFxuMjM4NjpcXHRcXHRpZiAoZmRfZW1wdHkoZikpXFxuMjM4NzpcXHRcXHRcXHRyZXR1cm4gLUVCQURGO1xcbjIzODg6XFx0XFx0c29jayA9IHNvY2tfZnJvbV9maWxlKGZkX2ZpbGUoZikpO1xcbjIzODk6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2NrKSlcXG4yMzkwOlxcdFxcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuMjM5MTpcXHRcXG4yMzkyOlxcdFxcdHJldHVybiBkb19zb2NrX3NldHNvY2tvcHQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjIzOTM6XFx0fVxcbjIzOTQ6XFx0XFxuMjM5NTpcXHRTWVNDQUxMX0RFRklORTUoc2V0c29ja29wdCwgaW50LCBmZCwgaW50LCBsZXZlbCwgaW50LCBvcHRuYW1lLFxcbjIzOTY6XFx0XFx0XFx0Y2hhciBfX3VzZXIgKiwgb3B0dmFsLCBpbnQsIG9wdGxlbilcXG4yMzk3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6NTYuMTY1MzI3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk0MTY1MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTZXRzb2Nrb3B0IENvbXBhdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYGluX2NvbXBhdF9zeXNjYWxsKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgY29tcGF0YCBzeXN0ZW0gY2FsbC4gVGhlIGV4aXN0aW5nIGBfX3N5c19zZXRzb2Nrb3B0YCBvYnZpb3VzbHkgaGFuZGxlcyBib3RoIGBjb21wYXRgIGFuZCBub24tYGNvbXBhdGAgY2FsbHMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCB0byBpbnZva2UgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgYW5kIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLCAqcmVnYXJkbGVzcyogb2Ygd2hldGhlciBgY29tcGF0YCBpcyB0cnVlLlxuXG5FZmZlY3RpdmVseSwgdGhpcyBtZWFucyB0aGF0IEJQRiBjZ3JvdXAgcHJvZ3JhbXMgY2FuIG5vdyBpbnRlcmNlcHQgYHNldHNvY2tvcHRgIGFuZCBgZ2V0c29ja29wdGAgY2FsbHMsIGV2ZW4gd2hlbiB0aGV5J3JlIGNvbWluZyBmcm9tIGEgYGNvbXBhdGAgY29udGV4dC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmaWx0ZXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZXNlIG9sZGVyIHN5c3RlbSBjYWxscyBpbiBhIGNncm91cCBjb250ZXh0LCB3aGljaCB3YXMgcHJldmlvdXNseSBub3QgcG9zc2libGUuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyBjaGFuZ2UgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhcyBhIGJhc2UgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gQW5kLCBzaW5jZSB0aGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGBpbl9jb21wYXRfc3lzY2FsbCgpYCByZXR1cm5pbmcgYHRydWVgIHVuZGVyIHRoZSByaWdodCBjaXJjdW1zdGFuY2VzLCBgQ09ORklHX0NPTVBBVGAgaXMgY2xlYXJseSBnb2luZyB0byBiZSBlc3NlbnRpYWwgYXMgd2VsbC5cblxuTmV4dCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIHRvIHNlZSB0aGUgZXhhY3QgZGV0YWlscyBvZiBob3cgdGhlc2UgY2FsbHMgYXJlIGludGVyY2VwdGVkIGFuZCBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MDEuNzU5NDk2MDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU5ODUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0yMDUyPXN0YXRpYyBib29sIHNvY2tvcHRfYnVmX2FsbG9jYXRlZChzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMDU3LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjA1ODppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjA1OS1cXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOTowMS44MTIxMDcyNjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNTA1NzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgQlBGIFNvY2tldCBGaWx0ZXJpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhhdCBzZXQgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBCUEYgZmlsdGVyaW5nIGlzIGludGVncmF0ZWQgd2l0aCBzb2NrZXQgb3B0aW9ucywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkgdGhvdWdodCBJIHJlbWVtYmVyZWQgc2VlaW5nIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgdGhhdCBmYW1pbHkgYXMgaW50ZXJuYWwsIGJ1dCBpcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCdzIGRlZmluZWTigKYgcmlnaHQsIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gT2theSwgc28gaXTigJlzIG5vdCAqbGlrZWx5KiB0byBiZSBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBpdCdzIGdvdCB0aGUgYHN0YXRpY2Aga2V5d29yZCBhdHRhY2hlZCB0byBpdCwganVzdCB0byBiZSBzdXJlLi4uIG5vcGUsIG5vIGBzdGF0aWNgLiBMZXQncyBnZXQgdG8gd29yayBjaGVja2luZyBvdXQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDUxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA3LjI0NzE2Nzc2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1OTc1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MjA1OD1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgKmxldmVsLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTQ5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjE1MDppbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMTUxLVxcdFxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjIzNS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIyMzY6aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyMzctXFx0XFx0XFx0XFx0XFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIyNTEtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMjUyOlxcdC8qIE5vdGUgdGhhdCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0IGRvZXNuJ3QgY29weVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjI1My1cXHQgKiB1c2VyIGRhdGEgYmFjayBpbnRvIEJQRiBidWZmZXIgd2hlbiByZXZhbCAhPSAwLiBUaGlzIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA3LjI5Njc3MTAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ4MDk4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsIGluIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGV5J3JlIG5vdCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gYENPTkZJR19DR1JPVVBfQlBGYCBpcyB0aGUgb2J2aW91cyBrZXkgZW5hYmxpbmcgZmFjdG9yLiBCdXQgdG8gZXhwbG9yZSBtb3JlIGNvZGUsIEknbGwgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0NPTVBBVGAgaXMgY3JpdGljYWwgdG8gdHJpZ2dlciB0aGUgXCJjb21wYXRcIiBwYXRoLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19DT01QQVRgIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0IGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB1c3VhbGx5IHRlbGxzIG1lIHRoYXQgYENPTkZJR19DT01QQVRgIHRlbmRzIHRvIGJlIGVuYWJsZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDMyLWJpdCBiaW5hcmllcy4gVG8gY29uZmlybSB0aGlzLCBJJ2xsIGNvbnN1bHQgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCByZXF1aXJlbWVudHMgZm9yIGBDT05GSUdfQ09NUEFUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MTAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MTMuNjQ0ODczNjg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU5MTc2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVQkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTc0Nj1jb25maWcgQVJNNjRfVEFHR0VEX0FERFJfQUJJXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTc1NC1cXG5hcmNoL2FybTY0L0tjb25maWc6MTc1NTptZW51Y29uZmlnIENPTVBBVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzU2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgRUwwXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MzA3OD1jb25maWcgTUlQUzMyX0NPTVBBVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cXG5hcmNoL21pcHMvS2NvbmZpZzozMDgxOmNvbmZpZyBDT01QQVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zMDgyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9MzU4PXNvdXJjZSBcXFwia2VybmVsL0tjb25maWcuaHpcXFwiXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNTktXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxcbmFyY2gvcGFyaXNjL0tjb25maWctMzYxLVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXFxcIlxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XFxuYXJjaC9zcGFyYy9LY29uZmlnLTQ0OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6NDQ5OmNvbmZpZyBDT01QQVRcXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MzExND1jb25maWcgQ09NUEFUXzMyXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTktXFxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjEtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToxNi4xMDQwNTcwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NjM1Nzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uIGZvciBDT01QQVQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBDT01QQVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gcmVjYWxsaW5nIHRoYXQgb24geDg2LCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09NUEFUYCBhcHBlYXJzIHRvIGJlIGEgYGRlZl9ib29sIHlgIChkZWZpbmVkIGJvb2xlYW4gJ3llcycpIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVGhlIHJlbGV2YW50IGNvbmRpdGlvbnMgYXJlIGlmIGVpdGhlciBgSUEzMl9FTVVMQVRJT05gICgzMi1iaXQgZW11bGF0aW9uIHN1cHBvcnQpIG9yIGBYODZfWDMyX0FCSWAgKHgzMiBBQkkgc3VwcG9ydCkgaXMgZW5hYmxlZC4gU28sIGluIG90aGVyIHdvcmRzLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggb2xkZXIgMzItYml0IGFwcGxpY2F0aW9ucyBvbiBhIDY0LWJpdCBzeXN0ZW0sIG9yIHRoZSB4MzIgQUJJLCB3ZSBsaWtlbHkgd2FudCBgQ09NUEFUYCB0byBiZSBlbmFibGVkLCBoZW5jZSB0aGUgJ3knLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGRpcmVjdGx5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQgbWUgcXVpY2tseSBnbyBjaGVjayBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25kaXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToyMS4xOTA0MTc0MjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzExNTpcXHRcXHRkZWZfYm9vbCB5XFxuMzExNjpcXHRcXHRkZXBlbmRzIG9uIElBMzJfRU1VTEFUSU9OIHx8IFg4Nl8zMlxcbjMxMTc6XFx0XFx0c2VsZWN0IEhBVkVfVUlEMTZcXG4zMTE4OlxcdFxcdHNlbGVjdCBPTERfU0lHU1VTUEVORDNcXG4zMTE5OlxcdFxcbjMxMjA6XFx0Y29uZmlnIENPTVBBVFxcbjMxMjE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjMxMjI6XFx0XFx0ZGVwZW5kcyBvbiBJQTMyX0VNVUxBVElPTiB8fCBYODZfWDMyX0FCSVxcbjMxMjM6XFx0XFxuMzEyNDpcXHRjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXFxuMzEyNTpcXHRcXHRkZWZfYm9vbCB5XFxuMzEyNjpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbjMxMjc6XFx0XFxuMzEyODpcXHRlbmRtZW51XFxuMzEyOTpcXHRcXG4zMTMwOlxcdGNvbmZpZyBIQVZFX0FUT01JQ19JT01BUFxcbjMxMzE6XFx0XFx0ZGVmX2Jvb2wgeVxcbjMxMzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfMzJcXG4zMTMzOlxcdFxcbjMxMzQ6XFx0c291cmNlIFxcXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MjEuMTkwNTY1NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDI1ODcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYENPTVBBVGAgZnVuY3Rpb25hbGl0eSBvbiB4ODYgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYElBMzJfRU1VTEFUSU9OYCBpcyBhY3RpdmUuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYXJjaGl0ZWN0dXJlcyBvZnRlbiByZWxpZXMgb24gdGhpcyBraW5kIG9mIGNvbmRpdGlvbmFsIGVuYWJsaW5nLiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBib3RoIGBDR1JPVVBfQlBGYCBhbmQgYENPTVBBVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGlzIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IG91ciBidWlsZHMgYW5kIGNvbmZpZ3VyYXRpb25zIGxldmVyYWdlIHRoZSBhcHByb3ByaWF0ZSBmZWF0dXJlcy5cblxuSGFuZyBvbiBhIHNlY29uZOKApkkgc2VlIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBhdGNoIGRvZXNuJ3QganVzdCBlbmFibGUgZmVhdHVyZXMsIGl0J3MgKm1vZGlmeWluZyogY29yZSBCUEYgY29kZSB3aXRoaW4gdGhlIGNncm91cCBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGludGVyYWN0aW9uIG9mIHNvY2tldCBvcHRpb25zIGFuZCB0aGUgY2dyb3VwIEJQRi4gVGhpcyBjb3VsZCBiZSBhYm91dCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMuIEl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBhbmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6MjYuNDkzMTU2MjM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM0NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MjYwNj1zdGF0aWMgYm9vbCBjZ19zb2Nrb3B0X2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY3OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI2ODA6c3RhdGljIHUzMiBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4MS1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc3MD1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc3Mi1cXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBjZ19zb2Nrb3B0X2lzX3ZhbGlkX2FjY2VzcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NzM6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gY2dfc29ja29wdF9jb252ZXJ0X2N0eF9hY2Nlc3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzc0LVxcdC5nZW5fcHJvbG9ndWVcXHRcXHQ9IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxOToyNi41NDY1MDg3MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MDIxMjQ3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIENncm91cCBTb2Nrb3B0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzYCBpcyBzdGF0aWMsIHNvIGRlZmluaXRlbHkgbm8gbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGF04oCZcyBhIG5vLWJyYWluZXIuIE5vdywgdGhlIGtleSBmdW5jdGlvbnMgdG8gemVybyBpbiBvbiBhcmU6IGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLCBgZG9fc29ja19zZXRzb2Nrb3B0YCwgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLlxuXG5XYWl0IGEgbWludXRlLi4uIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YCBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgbmV0L3NvY2tldC5jYCwgYW5kIHRoZXkncmUgbm90IHN0YXRpYzsgdGhleSdyZSBleHBvcnRlZC4gUGVyZmVjdC4gVGhhdCdzIGdvb2QgaW50ZWwuIExldCdzIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBBbHJpZ2h0LCBgX19zeXNfc2V0c29ja29wdGAgYW5kIGBfX3N5c19nZXRzb2Nrb3B0YCBhcmUgaW4gdGhlIHBpY3R1cmUgdG9vLCBidXQgdGhleSdyZSBqdXN0IHRoaW4gd3JhcHBlcnMuIFNvLCBzdGljayB3aXRoIGBkb19zb2NrX3NldHNvY2tvcHRgIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhleSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IGBDR1JPVVBfQlBGYC4gWXVwLCB0aGF0J3MgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWU6IGBDT05GSUdfQ0dST1VQX0JQRmAuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgc3ltYm9scy5cblxuQWxyaWdodCwgdGltZSBmb3IgYSBjb25jaXNlIHN1bW1hcnkuXG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LlxuKiAgICoqRm9jdXNTeW1ib2xzKio6XG4gICAgKiAgIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YFxuICAgICogICBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGBcbiAgICAqICAgYGRvX3NvY2tfc2V0c29ja29wdGBcbiAgICAqICAgYGRvX3NvY2tfZ2V0c29ja29wdGBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYENHUk9VUF9CUEZgXG4gICAgKiAgIGBDT01QQVRgIChpbXBvcnRhbnQgZm9yIGV4ZXJjaXNpbmcgdGhlIGNvbXBhdCBwYXRocylcblxuKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MuIEl0IG5vdyBlbnN1cmVzIEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgZm9yICpjb21wYXQqIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLCB3aGVyZWFzIHRoZXkgd2VyZSBwcmV2aW91c2x5IGJ5cGFzc2VkLiBUaGF0J3MgYSBodWdlIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIG5vdyBleHBvc2luZyB0aG9zZSBob29rcyB0byBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgc28gaXQncyBjcml0aWNhbCB0byBmdXp6IHRoZSBtb2RpZmllZCBCUEYgY2dyb3VwIHNvY2tvcHQgZXhlY3V0aW9uIHBhdGhzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9ucy4gQWRkaW5nIHRoZSBgaXNfY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgY29udGV4dCBpcyBhbHNvIHNpZ25pZmljYW50LiBUaGF0J3MgYW5vdGhlciBwb3RlbnRpYWwgdmVjdG9yIGZvciBmdXp6aW5nLlxuXG5PaywganVzdCBxdWlja2x5IHZlcmlmeWluZyBgZG9fc29ja19nZXRzb2Nrb3B0YC4gQWxsIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjQzLjM0ODYzNzU5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzOTgyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NvY2tfZ2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NvY2tldC5jPTI0MTA9c3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvc29ja2V0LmMtMjQzNS1cXG5uZXQvc29ja2V0LmM6MjQzNjppbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxubmV0L3NvY2tldC5jLTI0MzctXFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbi0tXFxubmV0L3NvY2tldC5jLTI0ODMtfVxcbm5ldC9zb2NrZXQuYzoyNDg0OkVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG5uZXQvc29ja2V0LmMtMjQ4NS1cXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDkwPWludCBfX3N5c19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNTAxLVxcbm5ldC9zb2NrZXQuYzoyNTAyOlxcdHJldHVybiBkb19zb2NrX2dldHNvY2tvcHQoc29jaywgaW5fY29tcGF0X3N5c2NhbGwoKSwgbGV2ZWwsIG9wdG5hbWUsXFxubmV0L3NvY2tldC5jLTI1MDMtXFx0XFx0XFx0XFx0IFVTRVJfU09DS1BUUihvcHR2YWwpLCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjQzLjc2MjYyNjExOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1ODYwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBCUEYgQ2dyb3VwIFNvY2tvcHQgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSBjb25maXJtZWQgdGhhdCBgZG9fc29ja19nZXRzb2Nrb3B0YCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgQlBGIGNncm91cCBzb2Nrb3B0IGZ1bmN0aW9uYWxpdHkuIExldCBtZSBzZWUuLi4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIGFueSBCUEYgdXNhZ2UsIHNvIHRoYXQncyBkZWZpbml0ZWx5IG9uIHRoZSBjaGVja2xpc3QuIFRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHNwZWNpZmljYWxseSBuZWVkZWQgdG8gc3VwcG9ydCBCUEYgd2l0aCBjZ3JvdXBzLiBBbmQgd2FpdCwgdGhhdCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGFsc28gYENPTkZJR19DR1JPVVBTYC4gR290IGl0LiBTbywgdG8gZ2V0IHRoaXMgd29ya2luZywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHRocmVlIGFyZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NDguNjI4NDg5MDIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzMDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1NC1cXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzU2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NDguNjc2NjIzOTUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTgzNjU0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2AgZm9yIGBDR1JPVVBfQlBGYDpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBDR1JPVVBfQlBGKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0YXR1cyBvZiBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUga2VybmVsLCBhbmQgYENHUk9VUF9CUEZgIGlzIGEgZnVuZGFtZW50YWwgZmVhdHVyZSwgc28gdGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dHMgb3IgY29tbWVudHMgdGhhdCBnaXZlIG1lIGNvbnRleHQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCwgYXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjU0LjE3NDk5MTYzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTU6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzU2OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU3OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU4OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM1OTpcXHRcXHRoZWxwXFxuMTM2MDpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzYxOlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2NDpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTk6NTQuMTc1MTYyMzA3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODkxODI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHRhY2tsaW5nIHRoaXMga2VybmVsIGNvbmZpZyBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ0dST1VQX0JQRmAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQlBGX1NZU0NBTExgLCBzbyBJJ2xsIGluY2x1ZGUgYm90aCwganVzdCB0byBiZSBzYWZlLiAgSSdsbCBhbHNvIHRocm93IGluIGBDR1JPVVBTYCBqdXN0IGluIGNhc2UsIHRob3VnaCBpdCdzIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIE5vdywgdGhlIHJlYWwgY29udGVuZGVycyBoZXJlIGFyZSBgQ0dST1VQX0JQRmAgYW5kIGBDT01QQVRgLlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09NUEFUYCBpcyBzdWZmaWNpZW50LCBvciBpZiBJIGFsc28gbmVlZCBgSUEzMl9FTVVMQVRJT05gIGZvciB4ODYgc3lzdGVtcy4gIEFoYSwgYENPTVBBVGAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAgd2hpY2ggZGVwZW5kcyBvbiBlaXRoZXIgYElBMzJfRU1VTEFUSU9OYCBvciBgWDg2X1gzMl9BQklgLiBUaGlzIG1lYW5zIEkgY2FuJ3QganVzdCBlbmFibGUgYENPTVBBVGAgZGlyZWN0bHkgb24geDg2OyBJJ20gZ29pbmcgdG8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgSUEzMl9FTVVMQVRJT05gIHRvIHNhdGlzZnkgdGhhdCBkZXBlbmRlbmN5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIG9uIGFyY2hpdGVjdHVyZXMgbGlrZSBhcm02NCBhbmQgcG93ZXJwYywgYENPTVBBVGAgc2VlbXMgdG8gYmUgYSByZWd1bGFyIG1lbnVjb25maWcgb3B0aW9uLiBCdXQgb24geDg2LCBpdCdzIHRoYXQgYGRlZl9ib29sIHlgIHRpZWQgdG8gYElBMzJfRU1VTEFUSU9OYC4gU28sIHRvIGJlIGNvbXBsZXRlbHkgc2FmZSBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY292ZXJlZCwgSSdsbCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBDT01QQVRgIGFuZCBgSUEzMl9FTVVMQVRJT05gLiAgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgSUEzMl9FTVVMQVRJT05gIGRlZmluaXRpb24gaW4gYGFyY2gveDg2L0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MDAuNTY0MzQ4OTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY0OTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSUEzMl9FTVVMQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTMwNzg9bWVudSBcXFwiQmluYXJ5IEVtdWxhdGlvbnNcXFwiXFxuYXJjaC94ODYvS2NvbmZpZy0zMDc5LVxcbmFyY2gveDg2L0tjb25maWc6MzA4MDpjb25maWcgSUEzMl9FTVVMQVRJT05cXG5hcmNoL3g4Ni9LY29uZmlnLTMwODEtXFx0Ym9vbCBcXFwiSUEzMiBFbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMwOTAtXFxuYXJjaC94ODYvS2NvbmZpZzozMDkxOmNvbmZpZyBJQTMyX0VNVUxBVElPTl9ERUZBVUxUX0RJU0FCTEVEXFxuYXJjaC94ODYvS2NvbmZpZy0zMDkyLVxcdGJvb2wgXFxcIklBMzIgZW11bGF0aW9uIGRpc2FibGVkIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjAwLjYxNjAwNTExNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQyNjM5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB4ODYgRW11bGF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBJQTMyX0VNVUxBVElPTmAgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGZvciB4ODYgZW11bGF0aW9uLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhhdCBkaXJlY3RseSB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBjYXVnaHQgbXkgYXR0ZW50aW9uOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCwgYGRvX3NvY2tfc2V0c29ja29wdGAsIGFuZCBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGVudHJ5cG9pbnRzLiBUaGV5J3JlIGFsbCBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgY2FsbHMuIEkgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgYXJlIG5vdyBiZWluZyB0cmlnZ2VyZWQgYnkgY29tcGF0IHN5c2NhbGxzLiBJdCBtYWtlcyBzZW5zZSwgcHJldmlvdXNseSB3ZSB3ZXJlIGJ5cGFzc2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIE5vdywgd2UncmUgY29ycmVjdGx5IGV4cG9zaW5nIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgcHJvZ3JhbXMgdG8gdGhvc2UgY29tcGF0IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIHN5c2NhbGxzLiBXZSdyZSBmaWxsaW5nIHRoZSBnYXAuXG5cbkFscmlnaHQsIHdpdGggdGhhdCB1bmRlcnN0YW5kaW5nLCBJJ2xsIGdvIGFoZWFkIGFuZCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBmaW5hbGl6ZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk0NiwiT3V0cHV0VG9rZW5zIjoyMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTAuMjU4NjQ3Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NjA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkNPTVBBVFwiLFxuICAgIFwiSUEzMl9FTVVMQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0XCIsXG4gICAgXCJkb19zb2NrX3NldHNvY2tvcHRcIixcbiAgICBcImRvX3NvY2tfZ2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gZXhlY3V0ZSBCUEYgcHJvZ3JhbXMgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0IGFuZCBnZXRzb2Nrb3B0IHN5c2NhbGxzLiBQcmV2aW91c2x5LCBCUEYgY2dyb3VwIHByb2dyYW1zIHdlcmUgYnlwYXNzZWQgZm9yIGNvbXBhdCBzeXNjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBCUEYgY2dyb3VwIHNvY2tvcHQgaG9va3MgdG8gY29tcGF0IHN5c2NhbGxzLiBUaGUgYGlzX2NvbXBhdGAgZmxhZyBpcyBhbHNvIGFkZGVkIHRvIHRoZSBCUEYgY29udGV4dCBhbmQgY2FuIGJlIHJlYWQgYnkgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgQlBGIGNncm91cCBzb2Nrb3B0IGV4ZWN1dGlvbiBwYXRocyBhbmQgdGhlIGNvbXBhdCBzb2NrZXQgb3B0aW9uIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoxMC4zMzUxMTUzMTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjQyNjc2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTAuMzM1NjcwMDUzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzNjQyMTE3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNmYTA4NTczNjg4MTkwYzQzZjlkNzU1MzA5OTE2OTBkNTkxNDZjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE4OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuaW5kZXggNGQwY2M2NTk3NmExNC4uOTQzZWIwMjNiNTJiOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaFxuQEAgLTEzOCwxNCArMTM4LDE1IEBAIGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXG4gXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgaW50ICpsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc29jaywgYm9vbCBjb21wYXQsXG4rXHRcdFx0XHQgICAgICAgaW50ICpsZXZlbCwgaW50ICpvcHRuYW1lLFxuK1x0XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIGludCAqb3B0bGVuLFxuK1x0XHRcdFx0ICAgICAgIGNoYXIgKiprZXJuZWxfb3B0dmFsKTtcbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi1cdFx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcbi1cdFx0XHRcdCAgICAgICBpbnQgcmV0dmFsKTtcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LFxuK1x0XHRcdFx0ICAgICAgIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4rXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbitcdFx0XHRcdCAgICAgICBpbnQgbWF4X29wdGxlbiwgaW50IHJldHZhbCk7XG4gXG4gaW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRfa2VybihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0XHRcdFx0ICAgIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsXG5AQCAtMzc2LDIxICszNzcsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuIFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxuLVx0XHRcdFx0ICAgICAgIGtlcm5lbF9vcHR2YWwpXHRcdFx0ICAgICAgIFxcXG4rI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4rXHRcdFx0XHQgICAgICAgb3B0bGVuLCBrZXJuZWxfb3B0dmFsKVx0XHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfU0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG4gXHQgICAgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc29jaywgQ0dST1VQX1NFVFNPQ0tPUFQpKVx0XHQgICAgICAgXFxcbi1cdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLFx0ICAgICAgIFxcXG4tXHRcdFx0XHRcdFx0XHQgICBvcHRuYW1lLCBvcHR2YWwsICAgIFxcXG4tXHRcdFx0XHRcdFx0XHQgICBvcHRsZW4sXHQgICAgICAgXFxcbitcdFx0X19yZXQgPSBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHNvY2ssIGNvbXBhdCwgICAgICAgXFxcbitcdFx0XHRcdFx0XHRcdCAgIGxldmVsLCBvcHRuYW1lLCAgICAgXFxcbitcdFx0XHRcdFx0XHRcdCAgIG9wdHZhbCwgb3B0bGVuLCAgICAgXFxcbiBcdFx0XHRcdFx0XHRcdCAgIGtlcm5lbF9vcHR2YWwpOyAgICAgXFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuIFxuLSNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwgICBcXFxuLVx0XHRcdFx0ICAgICAgIG1heF9vcHRsZW4sIHJldHZhbClcdFx0ICAgICAgIFxcXG4rI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAgIFxcXG4rXHRcdFx0XHQgICAgICAgb3B0bGVuLCBtYXhfb3B0bGVuLCByZXR2YWwpXHQgICAgICAgXFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aW50IF9fcmV0ID0gcmV0dmFsO1x0XHRcdFx0XHRcdCAgICAgICBcXFxuIFx0aWYgKGNncm91cF9icGZfZW5hYmxlZChDR1JPVVBfR0VUU09DS09QVCkgXHUwMDI2XHUwMDI2XHRcdFx0ICAgICAgIFxcXG5AQCAtNDAwLDcgKzQwMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXHQgICAgICAgXFxcbiBcdFx0XHRcdFx0bGV2ZWwsIG9wdG5hbWUpKVx0XHQgICAgICAgXFxcbiBcdFx0XHRfX3JldCA9IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHQoXHQgICAgICAgXFxcbi1cdFx0XHRcdHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbixcdCAgICAgICBcXFxuK1x0XHRcdFx0c29jaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sICBcXFxuIFx0XHRcdFx0bWF4X29wdGxlbiwgcmV0dmFsKTtcdFx0XHQgICAgICAgXFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiB9KVxuQEAgLTUwNCwxMSArNTA1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsXG4gI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NPQ0tfT1BTKHNvY2tfb3BzKSAoeyAwOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19ERVZJQ0VfQ0dST1VQKGF0eXBlLCBtYWpvciwgbWlub3IsIGFjY2VzcykgKHsgMDsgfSlcbiAjZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfU1lTQ1RMKGhlYWQsdGFibGUsd3JpdGUsYnVmLGNvdW50LHBvcykgKHsgMDsgfSlcbi0jZGVmaW5lIEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbiBcdFx0XHRcdCAgICAgICBvcHRsZW4sIG1heF9vcHRsZW4sIHJldHZhbCkgKHsgcmV0dmFsOyB9KVxuICNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUX0tFUk4oc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXFxcbiBcdFx0XHRcdFx0ICAgIG9wdGxlbiwgcmV0dmFsKSAoeyByZXR2YWw7IH0pXG4tI2RlZmluZSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxuKyNkZWZpbmUgQlBGX0NHUk9VUF9SVU5fUFJPR19TRVRTT0NLT1BUKHNvY2ssIGNvbXBhdCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCBcXFxuIFx0XHRcdFx0ICAgICAgIGtlcm5lbF9vcHR2YWwpICh7IDA7IH0pXG4gXG4gI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfQlBGICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRhOWJjNmE4NDhmMmUuLjVhYjdkNjA2YWVhNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTcwMiw2ICsxNzAyLDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4ge1xuIFx0czMyXHRcdGxldmVsO1xuIFx0czMyXHRcdG9wdG5hbWU7XG4gXHRzMzJcdFx0b3B0bGVuO1xuK1x0czMyXHRcdGlzX2NvbXBhdDtcbiBcdC8qIGZvciByZXR2YWwgaW4gc3RydWN0IGJwZl9jZ19ydW5fY3R4ICovXG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfdGFzaztcbiBcdC8qIFRlbXBvcmFyeSBcInJlZ2lzdGVyXCIgZm9yIGluZGlyZWN0IHN0b3JlcyB0byBwcG9zLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uMTVmNzEyYjViMTY0NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtNzYxNiw2ICs3NjE2LDcgQEAgc3RydWN0IGJwZl9zb2Nrb3B0IHtcbiBcdF9fczMyXHRvcHRuYW1lO1xuIFx0X19zMzJcdG9wdGxlbjtcbiBcdF9fczMyXHRyZXR2YWw7XG4rXHRfX3MzMlx0aXNfY29tcGF0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9waWRuc19pbmZvIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggOGZiYzk0MmExY2MzYS4uOTEwODc4ZTk5MWEwNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcbisrKyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBzdGF0aWMgYm9vbCBzb2Nrb3B0X2J1Zl9hbGxvY2F0ZWQoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcbiBcdHJldHVybiBjdHgtXHUwMDNlb3B0dmFsICE9IGJ1Zi1cdTAwM2VkYXRhO1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4raW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcbiBcdFx0XHRcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxuIHtcbkBAIC0yMDY1LDYgKzIwNjUsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4gXHRcdC5zayA9IHNrLFxuIFx0XHQubGV2ZWwgPSAqbGV2ZWwsXG4gXHRcdC5vcHRuYW1lID0gKm9wdG5hbWUsXG4rXHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHR9O1xuIFx0aW50IHJldCwgbWF4X29wdGxlbjtcbiBcbkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCAqbGV2ZWwsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbitpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4gXHRcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IG1heF9vcHRsZW4sXG4gXHRcdFx0XHQgICAgICAgaW50IHJldHZhbClcbkBAIC0yMTU3LDYgKzIxNTgsNyBAQCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0LnNrID0gc2ssXG4gXHRcdC5sZXZlbCA9IGxldmVsLFxuIFx0XHQub3B0bmFtZSA9IG9wdG5hbWUsXG4rXHRcdC5pc19jb21wYXQgPSBjb21wYXQsXG4gXHRcdC5jdXJyZW50X3Rhc2sgPSBjdXJyZW50LFxuIFx0fTtcbiBcdGludCBvcmlnX29wdGxlbjtcbkBAIC0yNzA1LDYgKzI3MDcsOSBAQCBzdGF0aWMgdTMyIGNnX3NvY2tvcHRfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4gXHRcdGVsc2VcbiBcdFx0XHQqaW5zbisrID0gQ0dfU09DS09QVF9SRUFEX0ZJRUxEKG9wdGxlbik7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCk6XG4rXHRcdCppbnNuKysgPSBDR19TT0NLT1BUX1JFQURfRklFTEQoaXNfY29tcGF0KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgcmV0dmFsKTpcbiBcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBicGZfY2dfcnVuX2N0eCwgcnVuX2N0eCkgIT0gMCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5mNDU0OTk3NWY5OGI5IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMzQ2LDEwICsyMzQ2LDkgQEAgaW50IGRvX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuLVx0aWYgKCFjb21wYXQpXG4tXHRcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVx1MDAzZXNrLCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgXHUwMDI2b3B0bGVuLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2a2VybmVsX29wdHZhbCk7XG4rXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX1NFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBcdTAwMjZsZXZlbCwgXHUwMDI2b3B0bmFtZSxcbitcdFx0XHRcdFx0ICAgICBvcHR2YWwsIFx1MDAyNm9wdGxlbixcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZrZXJuZWxfb3B0dmFsKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0yNDQ3LDggKzI0NDYsNyBAQCBpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFjb21wYXQpXG4tXHRcdGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xuK1x0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4gXG4gXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbkBAIC0yNDc3LDEwICsyNDc1LDkgQEAgaW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuIFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdGlmICghY29tcGF0KVxuLVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgbGV2ZWwsIG9wdG5hbWUsXG4tXHRcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbi1cdFx0XHRcdFx0XHQgICAgIGVycik7XG4rXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cdTAwM2VzaywgY29tcGF0LCBsZXZlbCwgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcbitcdFx0XHRcdFx0ICAgICBlcnIpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCBmZmQ5NmU4YjkyMGJkLi4xNWY3MTJiNWIxNjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC03NjE2LDYgKzc2MTYsNyBAQCBzdHJ1Y3QgYnBmX3NvY2tvcHQge1xuIFx0X19zMzJcdG9wdG5hbWU7XG4gXHRfX3MzMlx0b3B0bGVuO1xuIFx0X19zMzJcdHJldHZhbDtcbitcdF9fczMyXHRpc19jb21wYXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3BpZG5zX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuaW5kZXggZWFhYzgzYTdmMzg4Yi4uYzdkZDIyZDBlM2Y4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tvcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja29wdC5jXG5AQCAtMjE1LDYgKzIxNSw0OSBAQCBzdGF0aWMgc3RydWN0IHNvY2tvcHRfdGVzdCB7XG4gXHRcdC5nZXRfb3B0bmFtZSA9IElQX1RPUyxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJnZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuK1x0XHRcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1xuK1x0XHRcdC8qIGlmIChjdHgtXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cbitcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuK1x0XHRcdC8qIGN0eC1cdTAwM2VyZXR2YWwgPSAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIHJldHZhbCkpLFxuK1x0XHRcdC8qIHJldHVybiAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9KTVBfQSgxKSxcbitcdFx0XHQvKiB9IGVsc2UgeyAqL1xuK1x0XHRcdC8qIHJldHVybiAwICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRcdC8qIH0gKi9cbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfR0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1xuK1x0XHQuZ2V0X2xldmVsID0gU09MX0lQLFxuK1x0XHQuZ2V0X29wdG5hbWUgPSBJUF9UT1MsXG4rXHRcdC5nZXRfb3B0bGVuID0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIGN0eC1cdTAwM2Vpc19jb21wYXQgPSAxICovXG4rXHRcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuK1x0XHRcdEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0fSxcbitcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9HRVRTT0NLT1BULFxuK1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX0dFVFNPQ0tPUFQsXG4rXG4rXHRcdC5lcnJvciA9IERFTllfTE9BRCxcbitcdH0sXG4gXHR7XG4gXHRcdC5kZXNjciA9IFwiZ2V0c29ja29wdDogZGVueSB3cml0aW5nIHRvIGN0eC1cdTAwM2VvcHRuYW1lXCIsXG4gXHRcdC5pbnNucyA9IHtcbkBAIC02MDksNiArNjUyLDQ5IEBAIHN0YXRpYyBzdHJ1Y3Qgc29ja29wdF90ZXN0IHtcbiBcdFx0LmdldF9vcHR2YWwgPSB7IDEgXHUwMDNjXHUwMDNjIDMgfSxcbiBcdFx0LmdldF9vcHRsZW4gPSAxLFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2NyID0gXCJzZXRzb2Nrb3B0OiByZWFkIGN0eC1cdTAwM2Vpc19jb21wYXRcIixcbitcdFx0Lmluc25zID0ge1xuK1x0XHRcdC8qIHI2ID0gY3R4LVx1MDAzZWlzX2NvbXBhdCAqL1xuK1x0XHRcdEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSxcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tvcHQsIGlzX2NvbXBhdCkpLFxuK1xuK1x0XHRcdC8qIGlmIChjdHgtXHUwMDNlaXNfY29tcGF0ID09IDApIHsgKi9cbitcdFx0XHRCUEZfSk1QX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIDAsIDQpLFxuK1x0XHRcdC8qIGN0eC1cdTAwM2VvcHRsZW4gPSAtMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtMSksXG4rXHRcdFx0QlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLFxuK1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja29wdCwgb3B0bGVuKSksXG4rXHRcdFx0LyogcmV0dXJuIDEgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXG4rXHRcdFx0QlBGX0pNUF9BKDEpLFxuK1x0XHRcdC8qIH0gZWxzZSB7ICovXG4rXHRcdFx0LyogcmV0dXJuIDAgKi9cbitcdFx0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdFx0LyogfSAqL1xuK1x0XHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0fSxcbitcdFx0LmF0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1x0XHQuZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSBCUEZfQ0dST1VQX1NFVFNPQ0tPUFQsXG4rXG4rXHRcdC5zZXRfb3B0bmFtZSA9IDEyMyxcbitcdFx0LnNldF9vcHRsZW4gPSAxLFxuK1x0XHQuaW9fdXJpbmdfc3VwcG9ydCA9IHRydWUsXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGVzY3IgPSBcInNldHNvY2tvcHQ6IGRlbnkgd3JpdGluZyB0byBjdHgtXHUwMDNlaXNfY29tcGF0XCIsXG4rXHRcdC5pbnNucyA9IHtcbitcdFx0XHQvKiBjdHgtXHUwMDNlaXNfY29tcGF0ID0gMSAqL1xuK1x0XHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbitcdFx0XHRCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2Nrb3B0LCBpc19jb21wYXQpKSxcbitcdFx0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHRcdH0sXG4rXHRcdC5hdHRhY2hfdHlwZSA9IEJQRl9DR1JPVVBfU0VUU09DS09QVCxcbitcdFx0LmV4cGVjdGVkX2F0dGFjaF90eXBlID0gQlBGX0NHUk9VUF9TRVRTT0NLT1BULFxuK1xuK1x0XHQuZXJyb3IgPSBERU5ZX0xPQUQsXG4rXHR9LFxuIFx0e1xuIFx0XHQuZGVzY3IgPSBcInNldHNvY2tvcHQ6IHJlYWQgY3R4LVx1MDAzZW9wdGxlblwiLFxuIFx0XHQuaW5zbnMgPSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoxMC4zMzU2NzA3ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3Nzg5NjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gQlBGIEhvb2tzIGluIFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhbiBgaXNfY29tcGF0YCBmaWVsZCBpbnRvIHRoZSBgYnBmX3NvY2tvcHRgIHN0cnVjdHVyZXMuIFRoaXMsIGluIHR1cm4sIGlzIGJlaW5nIHBhc3NlZCBkb3duIHRvIHRoZSBCUEYgaG9vayBleGVjdXRpb24gZnVuY3Rpb25zOiBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2V0c29ja29wdGAgYW5kIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgLlxuXG5QcmV2aW91c2x5LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHRoZSBCUEYgaG9va3Mgd2VyZSAqc2tpcHBlZCogZW50aXJlbHkgaWYgdGhlIGBjb21wYXRgIGZsYWcgd2FzIHNldC4gVGhlIGNvZGUgZXhwbGljaXRseSBieXBhc3NlZCB0aGUgQlBGIGV4ZWN1dGlvbiBpbiB0aG9zZSBjYXNlcy4gVGhlIGRpZmYgc2hvd3MgdGhpcyBxdWl0ZSBjbGVhcmx5LiAgRXNzZW50aWFsbHksIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgZnVuY3Rpb25zIHdlcmUgd3JhcHBlZCBpbiBgaWYgKCFjb21wYXQpYCBjb25kaXRpb25zLlxuXG5Ob3csIGhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgdGhhdCBjb25kaXRpb25hbCBoYXMgYmVlbiByZW1vdmVkLiBUaGUgQlBGIGhvb2tzIGFyZSAqYWx3YXlzKiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYGNvbXBhdGAgc2V0dGluZy4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBtZWFucyBCUEYgcHJvZ3JhbXMgY2FuIG5vdyBpbmZsdWVuY2UgYW5kIHBvdGVudGlhbGx5IGV2ZW4gYmxvY2sgb3IgbW9kaWZ5IGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIGNhbGxzIG1hZGUgaW4gY29tcGF0aWJpbGl0eSBtb2RlLlxuXG5UaGVyZSdzIG9uZSBtb3JlIHRoaW5nIHRoYXQncyBjYXVnaHQgbXkgYXR0ZW50aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIG1vcmUgY2FyZWZ1bGx5LiBQcmV2aW91c2x5LCB0aGUgYGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO2AgbGluZSBpbiBgZG9fc29ja19nZXRzb2Nrb3B0YCB3YXMgYWxzbyB3cmFwcGVkIGluIGBpZiAoIWNvbXBhdClgLiAgVGhhdCdzIG5vdyBnb25lLCBtZWFuaW5nIHRoaXMgY29weSAqYWx3YXlzKiBoYXBwZW5zLCBldmVuIGZvciBjb21wYXQgY2FsbHMuIFdhaXQsIGBvcHRsZW5gIGlzIGEgYHNvY2twdHJfdGAsIHNvIGl0J3MgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnkuICBJcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjb3B5X2Zyb21fc29ja3B0cmAgY2hlY2tlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzZWN1cml0eSBpc3N1ZSBpZiB0aGUgY29weSBmYWlscyBhbmQgYSBnYXJiYWdlIHZhbHVlIGdldHMgdXNlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjE4LjQxMzU3MDE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NjQ1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9mcm9tX3NvY2twdHIuKm1heF9vcHRsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zb2NrZXQuYz0yNDM2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDQ4LVxcbm5ldC9zb2NrZXQuYzoyNDQ5OlxcdGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZtYXhfb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKTtcXG5uZXQvc29ja2V0LmMtMjQ1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MTguNDY1NDM5MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzODUyMDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZG9fc29ja19nZXRzb2Nrb3B0YCoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gYG5ldC9zb2NrZXQuY2AgYW5kIHplcm8gaW4gb24gYGRvX3NvY2tfZ2V0c29ja29wdGAuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIGFyY2hpdGVjdHVyZSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHNvY2tldCBvcHRpb25zLiBGaXJzdCwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBiYXNpYyBjb250cm9sIGZsb3cuIEknbSBsb29raW5nIGZvciB0aGUgc3dpdGNoIHN0YXRlbWVudCDigJMgdGhhdCdzIHRoZSBoZWFydCBvZiBvcHRpb24gZGlzcGF0Y2guIEkgYmV0IGl0J3MgYSBtdWx0aS1sYXllcmVkIHN3aXRjaCwgaGFuZGxpbmcgdGhlIHNvY2tldCBsZXZlbCAoU09MX1NPQ0tFVCwgZXRjLikgYW5kIHRoZW4gdGhlIHNwZWNpZmljIG9wdGlvbiB3aXRoaW4gdGhhdCBsZXZlbC5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBwYXJzaW5nLiBTcGVjaWZpY2FsbHksIHdoYXQncyBwYXNzZWQgdG8gYG9wdGxlbmAgYW5kIGBvcHR2YWxgLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBidWZmZXIgb3ZlcmZsb3dzIG9yIHZ1bG5lcmFiaWxpdGllcyBwcmVzZW50IGluIGl0cyBoYW5kbGluZz8gSSdsbCBwcm9iYWJseSBhbHNvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgdmFyaW91cyBgZ2V0c29ja29wdGAgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGNvcHlpbmcgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHByZXNlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzP1xuXG5GdXJ0aGVybW9yZSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBhbmQgaG93IHRoZSBkaWZmZXJlbnQgc29ja2V0IHR5cGVzIGFuZCBwcm90b2NvbHMgYXJlIHRyZWF0ZWQuIERvZXMgaXQgY29ycmVjdGx5IGNoZWNrIGZvciBpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbnM/IEFyZSB0aGVyZSBhbnkgcGxhY2VzIHdoZXJlIGl0IG1pZ2h0IHJldHVybiBhbiBpbmNvcnJlY3QgZXJyb3IgY29kZT8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSBjb25jdXJyZW50IGNhbGxzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzIGdyYWNlZnVsbHkuIFRoZSBnb2FsIGhlcmUgaXMgYSBxdWljayBidXQgdGhvcm91Z2ggb3ZlcnZpZXcgdG8gc3BvdCBhbnkgb2J2aW91cyBpc3N1ZXMgb3IgYXJlYXMgdGhhdCByZXF1aXJlIGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjIzLjEwMzk2MjU4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Mzc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Mzg6XFx0e1xcbjI0Mzk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcbjI0NDA6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjI0NDE6XFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4yNDQyOlxcdFxcdHNvY2tvcHRfdCBvcHQ7XFxuMjQ0MzpcXHRcXHRpbnQgZXJyO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjQ0NjpcXHRcXHRpZiAoZXJyKVxcbjI0NDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDQ4OlxcdFxcbjI0NDk6XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDUyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ1MzpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0NTQ6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0NTU6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ1NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0NTc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDU4OlxcdFxcbjI0NTk6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0NjA6XFx0XFxuMjQ2MTpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDYyOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0NjM6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDY0OlxcdFxcdFxcdCAqL1xcbjI0NjU6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDY3OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ2ODpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNDY5OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNDc0OlxcdFxcdH0gZWxzZSB7XFxuMjQ3NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNDc2OlxcdFxcdH1cXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbjI0Nzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNDgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNDgxOlxcdFxcbjI0ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4yNDgzOlxcdH1cXG4yNDg0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG4yNDg1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDoyMy4xMDQxODY0NTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MzU3NzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7YCBjYWxsLi4uIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgdGhhdCBpdCdzIGlnbm9yaW5nIHRoZSByZXR1cm4gdmFsdWUuIElmIGBvcHRsZW5gIGlzIGdhcmJhZ2UsIHRoZW4gYG1heF9vcHRsZW5gIHdpbGwgcmVtYWluIGF0IHplcm8sIHdoaWNoIGlzIGhvdyBpdCB3YXMgaW5pdGlhbGl6ZWQuIFRoZW4gdGhhdCB6ZXJvIHZhbHVlIGdldHMgcGFzc2VkIHRvIGBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRgLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaGFzIHNvbWUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbldhaXQsIGxvb2tpbmcgYXQgaXQgYWdhaW4sIGBtYXhfb3B0bGVuYCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGFkZHJlc3NlcyB0aGUgaW1tZWRpYXRlIFwidW5pbml0aWFsaXplZCBtZW1vcnlcIiBjb25jZXJuLiBUaGUgcmVhbCBzaGlmdCBoYXBwZW5zIHdpdGggdGhlIHBhdGNoLCB3aGljaCByZW1vdmVzIHRoZSBgaWYgKCFjb21wYXQpYCBjb25kaXRpb24gYW5kIGxldHMgYG1heF9vcHRsZW5gIGJlIHJlYWQgZnJvbSB1c2VyIHNwYWNlIGZvciBjb21wYXQgZ2V0c29ja29wdC4gTm93LCBmb3IgY29tcGF0IGdldHNvY2tvcHQsIHRoZSBgb3B0bGVuYCB2YXJpYWJsZSBwb2ludHMgdG8gYSAzMi1iaXQgaW50ZWdlciBpbiB1c2VyIHNwYWNlLCBhbmQgc2luY2UgYHNpemVvZihpbnQpYCBpcyBpbmRlZWQgNCBieXRlcywgYGNvcHlfZnJvbV9zb2NrcHRyYCByZWFkcyA0IGJ5dGVzLiBPa2F5LCB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuIFN0aWxsLCBJIHNob3VsZCBleHBsb3JlIHRoaXMgd2l0aCB0aGUgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjI4LjI0Nzc2NzUyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQ3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTQ3OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0ODpcXHR9XFxuMjE0OTpcXHRcXG4yMTUwOlxcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4yMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbWF4X29wdGxlbixcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgcmV0dmFsKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycCA9IHNvY2tfY2dyb3VwX3B0cihcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjE1NjpcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O1xcbjIxNTc6XFx0XFx0c3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gY3R4ID0ge1xcbjIxNTg6XFx0XFx0XFx0LnNrID0gc2ssXFxuMjE1OTpcXHRcXHRcXHQubGV2ZWwgPSBsZXZlbCxcXG4yMTYwOlxcdFxcdFxcdC5vcHRuYW1lID0gb3B0bmFtZSxcXG4yMTYxOlxcdFxcdFxcdC5pc19jb21wYXQgPSBjb21wYXQsXFxuMjE2MjpcXHRcXHRcXHQuY3VycmVudF90YXNrID0gY3VycmVudCxcXG4yMTYzOlxcdFxcdH07XFxuMjE2NDpcXHRcXHRpbnQgb3JpZ19vcHRsZW47XFxuMjE2NTpcXHRcXHRpbnQgcmV0O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRvcmlnX29wdGxlbiA9IG1heF9vcHRsZW47XFxuMjE2ODpcXHRcXHRjdHgub3B0bGVuID0gbWF4X29wdGxlbjtcXG4yMTY5OlxcdFxcdG1heF9vcHRsZW4gPSBzb2Nrb3B0X2FsbG9jX2J1ZihcXHUwMDI2Y3R4LCBtYXhfb3B0bGVuLCBcXHUwMDI2YnVmKTtcXG4yMTcwOlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2MgMClcXG4yMTcxOlxcdFxcdFxcdHJldHVybiBtYXhfb3B0bGVuO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHRpZiAoIXJldHZhbCkge1xcbjIxNzQ6XFx0XFx0XFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxcbjIxNzU6XFx0XFx0XFx0ICogY29weSB3aGF0ZXZlciB3YXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgYmFja1xcbjIxNzY6XFx0XFx0XFx0ICogaW50byBvdXIgdGVtcG9yYXJ5IGJ1ZmZlci4gU2V0IG9wdGxlbiB0byB0aGVcXG4yMTc3OlxcdFxcdFxcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxcbjIxNzg6XFx0XFx0XFx0ICogQlBGIHByb2dyYW1zIGluc3BlY3QgdGhlIHZhbHVlLlxcbjIxNzk6XFx0XFx0XFx0ICovXFxuMjE4MDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmN0eC5vcHRsZW4sIG9wdGxlbixcXG4yMTgxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihjdHgub3B0bGVuKSkpIHtcXG4yMTgyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjE4MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTg0OlxcdFxcdFxcdH1cXG4yMTg1OlxcdFxcbjIxODY6XFx0XFx0XFx0aWYgKGN0eC5vcHRsZW4gXFx1MDAzYyAwKSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE4OTpcXHRcXHRcXHR9XFxuMjE5MDpcXHRcXHRcXHRvcmlnX29wdGxlbiA9IGN0eC5vcHRsZW47XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjE5NDpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxOTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE5NjpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjI4LjI0Nzk2NjgzOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDI1NzU3MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIGFuZCBDb21wYXRpYmlsaXR5IEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybiBjdHhgIGFuZCBpdCBzZWVtcyB0byBiZSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gVGhhdCBtZWFucyBzb21lIGZpZWxkcyBnZXQgc3BlY2lmaWMgdmFsdWVzLCBhbmQgdGhlIHJlc3QgZ2V0IHplcm9lZCBvdXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGtleSB0aGluZyBJJ20gZm9jdXNpbmcgb24gbm93IGlzIHRoaXMgYGlzX2NvbXBhdGAgZmllbGQsIHdoaWNoIGlzIGFwcGFyZW50bHkgYSAqbmV3KiBhZGRpdGlvbiB0byBib3RoIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgYW5kIGBzdHJ1Y3QgYnBmX3NvY2tvcHRgLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGhhcyBpbXBsaWNhdGlvbnMgb24gaG93IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgYWRkZWQgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNpbXBseSAqYWRkaW5nKiBgaXNfY29tcGF0YCB0byB0aGUgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYWRkaXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZS4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBuZXcgYGlzX2NvbXBhdGAgZmllbGQgaXMgcmVsYXRlZCB0byBoYW5kbGluZyBjb21wYXRpYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zIG9yIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiBpdHMgbmFtZS4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IGNoYW5nZSBvciBpZiBvdGhlciBmaWVsZHMgd2VyZSBhZmZlY3RlZC5cblxuRmluYWxseSwgSSBoYXZlIGEgcXVpY2sgdGhvdWdodCBvbiB0aGUgYHN0cnVjdCBicGZfc29ja29wdGAuIFBhZGRpbmcgaW4gc3RydWN0cyBpcyBhbHdheXMgYSBjb25jZXJuIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHBhY2tlZCBzdHJ1Y3R1cmVzIG9yIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEl0J3MgYSBxdWljayBxdWVzdGlvbiwgYnV0IGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgdGhlIHN0cnVjdCBoYXMgYW55IGtpbmQgb2Ygc3BlY2lhbCBwYWNraW5nIHJ1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjMzLjY3MzcyNjM0NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2MTA6XFx0c3RydWN0IGJwZl9zb2Nrb3B0IHtcXG43NjExOlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX3NvY2sgKiwgc2spO1xcbjc2MTI6XFx0XFx0X19icGZfbWRfcHRyKHZvaWQgKiwgb3B0dmFsKTtcXG43NjEzOlxcdFxcdF9fYnBmX21kX3B0cih2b2lkICosIG9wdHZhbF9lbmQpO1xcbjc2MTQ6XFx0XFxuNzYxNTpcXHRcXHRfX3MzMlxcdGxldmVsO1xcbjc2MTY6XFx0XFx0X19zMzJcXHRvcHRuYW1lO1xcbjc2MTc6XFx0XFx0X19zMzJcXHRvcHRsZW47XFxuNzYxODpcXHRcXHRfX3MzMlxcdHJldHZhbDtcXG43NjE5OlxcdFxcdF9fczMyXFx0aXNfY29tcGF0O1xcbjc2MjA6XFx0fTtcXG43NjIxOlxcdFxcbjc2MjI6XFx0c3RydWN0IGJwZl9waWRuc19pbmZvIHtcXG43NjIzOlxcdFxcdF9fdTMyIHBpZDtcXG43NjI0OlxcdFxcdF9fdTMyIHRnaWQ7XFxuNzYyNTpcXHR9O1xcbjc2MjY6XFx0XFxuNzYyNzpcXHQvKiBVc2VyIGFjY2Vzc2libGUgZGF0YSBmb3IgU0tfTE9PS1VQIHByb2dyYW1zLiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLiAqL1xcbjc2Mjg6XFx0c3RydWN0IGJwZl9za19sb29rdXAge1xcbjc2Mjk6XFx0XFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDozMy42NzQzMDE0MzZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MjU4NjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb250ZXh0IGZvciBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBicGZfc29ja29wdGAuIEl0J3MgYSBVc2VyIEFQSSBzdHJ1Y3R1cmUsIGJ1dCBpdCBhbHNvIHNlcnZlcyBhcyB0aGUgY29udGV4dCBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBhIGtleSBkZXRhaWwuIFRoZSB2ZXJpZmllciBpcyB0aGUga2V5IHRvIGVuc3VyaW5nIGFsbCB0aGUgcnVsZXMgYXJlIGZvbGxvd2VkIHdoZW4gQlBGIHByb2dyYW1zIGFjY2VzcyB0aGlzIHN0cnVjdHVyZSAtIHNwZWNpZmljYWxseSBpdCByZXdyaXRlcyBhY2Nlc3NlcyB0byBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gLiBUaGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBpc19jb21wYXRgIHRvIGJvdGggdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbCB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGVhbGluZyB3aXRoIGNvbXBhdGliaWxpdHkgZmxhZ3MuXG5cbkxvb2tpbmcgYXQgdGhlIGBjZ19zb2Nrb3B0X2NvbnZlcnRfY3R4X2FjY2Vzc2AgZnVuY3Rpb24sIGl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgQlBGIGNvbnRleHQgYWNjZXNzIGNvbnZlcnNpb24uIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBpc19jb21wYXRgIGZpZWxkOiB3ZSdyZSB1c2luZyBgQ0dfU09DS09QVF9SRUFEX0ZJRUxEYCB0byBoYW5kbGUgdGhlIHJlYWQgb3BlcmF0aW9uLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCAtIG5vIHJlZCBmbGFncyB0aGVyZSwgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSB2ZXJpZmllciB0YWtlcyBjYXJlIG9mIGVuZm9yY2luZyB0aGUgYm91bmRhcmllcyBzbyBvbmx5IGV4cGxpY2l0bHkgaGFuZGxlZCBmaWVsZHMgYXJlIGFjY2Vzc2libGUsIGtlZXBpbmcgdGhpbmdzIHNlY3VyZS5cblxuQnV0Li4ud2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoaXMuLi53aGF0IGFib3V0IHRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIHZlcnNpb24/IExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBjaGFuZ2UgaXMgd2VsbC1kZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIwOjM4Ljg2Njg4OTg5MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjk1OlxcdFxcdHU4XFx0XFx0ZGF0YVtCUEZfU09DS09QVF9LRVJOX0JVRl9TSVpFXTtcXG4xNjk2OlxcdH07XFxuMTY5NzpcXHRcXG4xNjk4OlxcdHN0cnVjdCBicGZfc29ja29wdF9rZXJuIHtcXG4xNjk5OlxcdFxcdHN0cnVjdCBzb2NrXFx0KnNrO1xcbjE3MDA6XFx0XFx0dThcXHRcXHQqb3B0dmFsO1xcbjE3MDE6XFx0XFx0dThcXHRcXHQqb3B0dmFsX2VuZDtcXG4xNzAyOlxcdFxcdHMzMlxcdFxcdGxldmVsO1xcbjE3MDM6XFx0XFx0czMyXFx0XFx0b3B0bmFtZTtcXG4xNzA0OlxcdFxcdHMzMlxcdFxcdG9wdGxlbjtcXG4xNzA1OlxcdFxcdHMzMlxcdFxcdGlzX2NvbXBhdDtcXG4xNzA2OlxcdFxcdC8qIGZvciByZXR2YWwgaW4gc3RydWN0IGJwZl9jZ19ydW5fY3R4ICovXFxuMTcwNzpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfdGFzaztcXG4xNzA4OlxcdFxcdC8qIFRlbXBvcmFyeSBcXFwicmVnaXN0ZXJcXFwiIGZvciBpbmRpcmVjdCBzdG9yZXMgdG8gcHBvcy4gKi9cXG4xNzA5OlxcdFxcdHU2NFxcdFxcdHRtcF9yZWc7XFxuMTcxMDpcXHR9O1xcbjE3MTE6XFx0XFxuMTcxMjpcXHRpbnQgY29weV9icGZfZnByb2dfZnJvbV91c2VyKHN0cnVjdCBzb2NrX2Zwcm9nICpkc3QsIHNvY2twdHJfdCBzcmMsIGludCBsZW4pO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6MzguODY3MDY0ODQxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTI2MDA0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja29wdF9rZXJuYCBTdHJ1Y3QqKlxuXG5Pa2F5LCBzbyB0aGV5J3ZlIGFkZGVkIGBpc19jb21wYXRgIHRvIHRoZSBgYnBmX3NvY2tvcHRfa2VybmAgc3RydWN0dXJlLiBJIHNlZSB0aGF0IGl0J3MgaW5pdGlhbGl6ZWQgd2l0aGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhbmQgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX2dldHNvY2tvcHRgLiBUaGUgaW5pdGlhbGl6YXRpb24gbG9va3MgcHJldHR5IHN0YW5kYXJkOyB0aGV5J3JlIHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyAoYHNrYCwgYGxldmVsYCwgYG9wdG5hbWVgLCBhbmQgYGlzX2NvbXBhdGApIGRpcmVjdGx5LCBhbmQgdGhlIHJlc3Qgd2lsbCBiZSB6ZXJvZWQgb3V0IGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCB0aGUgemVyby1pbml0aWFsaXphdGlvbiB0cmlnZ2VyZWQgYSB0aG91Z2h0OiBpcyB0aGVyZSBhbnkgY2hhbmNlIHdlJ3JlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gSSBtZWFuLCB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgdGhhdCdzIGEgc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWEuXG5cbkJ1dCwgaG9sZCBvbi4uLiBubywgdGhhdCBzaG91bGRuJ3QgYmUgYSBjb25jZXJuIGhlcmUuIFRoaXMgYGJwZl9zb2Nrb3B0X2tlcm5gIHN0cnVjdCAqaXNuJ3QqIHBhc3NlZCBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJdCdzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIHVzZWQgc29sZWx5IHdpdGhpbiB0aGUgQlBGIGV4ZWN1dGlvbiBjb250ZXh0LiBCUEYgcHJvZ3JhbXMgKmNhbiogcmVhZCBgaXNfY29tcGF0YCwgYW5kIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgdHJhbnNsYXRlcyB0aG9zZSByZWFkcyB0byBgY3R4LVx1MDAzZWlzX2NvbXBhdGAuIFNvIHdlIHNob3VsZCBiZSBmaW5lIHRoZXJlLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuIFRoYXQgbG9va3MgZ29vZCwgYnV0IHdoYXQgYWJvdXQgYGRvX3NvY2tfc2V0c29ja29wdGA/IFdlIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NDYuNDE5NjY3OTg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMzNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMzNjpcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuMjMzNzpcXHR7XFxuMjMzODpcXHRcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XFxuMjMzOTpcXHRcXHRjaGFyICprZXJuZWxfb3B0dmFsID0gTlVMTDtcXG4yMzQwOlxcdFxcdGludCBlcnI7XFxuMjM0MTpcXHRcXG4yMzQyOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAwKVxcbjIzNDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjM0NDpcXHRcXG4yMzQ1OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcXG4yMzQ2OlxcdFxcdGlmIChlcnIpXFxuMjM0NzpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuMjM0ODpcXHRcXG4yMzQ5OlxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVChzb2NrLVxcdTAwM2VzaywgY29tcGF0LCBcXHUwMDI2bGV2ZWwsIFxcdTAwMjZvcHRuYW1lLFxcbjIzNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sXFxuMjM1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZrZXJuZWxfb3B0dmFsKTtcXG4yMzUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjIzNTM6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbjIzNTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG4yMzU1OlxcdFxcdFxcdGVyciA9IDA7XFxuMjM1NjpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuMjM1NzpcXHRcXHR9XFxuMjM1ODpcXHRcXG4yMzU5OlxcdFxcdGlmIChrZXJuZWxfb3B0dmFsKVxcbjIzNjA6XFx0XFx0XFx0b3B0dmFsID0gS0VSTkVMX1NPQ0tQVFIoa2VybmVsX29wdHZhbCk7XFxuMjM2MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yMzYyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUIFxcdTAwMjZcXHUwMDI2ICFzb2NrX3VzZV9jdXN0b21fc29sX3NvY2tldChzb2NrKSlcXG4yMzYzOlxcdFxcdFxcdGVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjIzNjQ6XFx0XFx0ZWxzZSBpZiAodW5saWtlbHkoIW9wcy1cXHUwMDNlc2V0c29ja29wdCkpXFxuMjM2NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NDYuNDE5ODQ5MTY2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTM2ODIzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlIGluIGBkb19zb2NrX3NldHNvY2tvcHRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYGRvX3NvY2tfc2V0c29ja29wdGAuIEl0IHNlZW1zIHRoYXQgYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgbm93IGJlaW5nIGNhbGxlZCBmb3IgY29tcGF0IHNvY2tldHMsIHdoaWNoIHdhc24ndCB0aGUgY2FzZSBwcmV2aW91c2x5LiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIENvdWxkIHRoaXMgaW50cm9kdWN0aW9uIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT9cblxuVGhlIGNvZGUgcGF0aCBpczogYEJQRl9DR1JPVVBfUlVOX1BST0dfU0VUU09DS09QVGAgaXMgdHJpZ2dlcmVkLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YC4gUmlnaHQsIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIEl0IGFsbG9jYXRlcyBhIGJ1ZmZlciwgY29waWVzIGBvcHR2YWxgIOKAkyB0aGF0IGlzLCB0aGUgb3B0aW9uIHZhbHVlIOKAkyBmcm9tIHVzZXIgc3BhY2UgaW50byBpdCwgcnVucyB0aGUgQlBGIHByb2dyYW0sIGFuZCB0aGVuIHJldHVybnMgdGhlICptb2RpZmllZCogYnVmZmVyIHZpYSBga2VybmVsX29wdHZhbGAuXG5cbldhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4gYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGlzIGNvcHlpbmcgYG9wdHZhbGAgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGhlbiB3b3JraW5nIG9uIHRoZSAqY29weSogb2YgaXQuIFNvIGV2ZW4gaWYgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgYF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHRgIGhhcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCdzIG9rYXksIGJlY2F1c2Ugd2hhdGV2ZXIgaXMgcmV0dXJuZWQgYnkgdGhlIEJQRiBwcm9ncmFtIGludG8gdGhlIGBrZXJuZWxfb3B0dmFsYCB3aWxsIG92ZXJ3cml0ZSB0aGUgYnVmZmVyPyBBbHJpZ2h0LCBJJ20gcHJldHR5IHN1cmUsIGJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NTEuNDEzNTMzNjY3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNTg6XFx0aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBib29sIGNvbXBhdCwgaW50ICpsZXZlbCxcXG4yMDU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgKm9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuMjA2MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRsZW4sIGNoYXIgKiprZXJuZWxfb3B0dmFsKVxcbjIwNjE6XFx0e1xcbjIwNjI6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycCA9IHNvY2tfY2dyb3VwX3B0cihcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjA2MzpcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O1xcbjIwNjQ6XFx0XFx0c3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gY3R4ID0ge1xcbjIwNjU6XFx0XFx0XFx0LnNrID0gc2ssXFxuMjA2NjpcXHRcXHRcXHQubGV2ZWwgPSAqbGV2ZWwsXFxuMjA2NzpcXHRcXHRcXHQub3B0bmFtZSA9ICpvcHRuYW1lLFxcbjIwNjg6XFx0XFx0XFx0LmlzX2NvbXBhdCA9IGNvbXBhdCxcXG4yMDY5OlxcdFxcdH07XFxuMjA3MDpcXHRcXHRpbnQgcmV0LCBtYXhfb3B0bGVuO1xcbjIwNzE6XFx0XFxuMjA3MjpcXHRcXHQvKiBBbGxvY2F0ZSBhIGJpdCBtb3JlIHRoYW4gdGhlIGluaXRpYWwgdXNlciBidWZmZXIgZm9yXFxuMjA3MzpcXHRcXHQgKiBCUEYgcHJvZ3JhbS4gVGhlIGNhbm9uaWNhbCB1c2UgY2FzZSBpcyBvdmVycmlkaW5nXFxuMjA3NDpcXHRcXHQgKiBUQ1BfQ09OR0VTVElPTihudikgdG8gVENQX0NPTkdFU1RJT04oY3ViaWMpLlxcbjIwNzU6XFx0XFx0ICovXFxuMjA3NjpcXHRcXHRtYXhfb3B0bGVuID0gbWF4X3QoaW50LCAxNiwgKm9wdGxlbik7XFxuMjA3NzpcXHRcXHRtYXhfb3B0bGVuID0gc29ja29wdF9hbGxvY19idWYoXFx1MDAyNmN0eCwgbWF4X29wdGxlbiwgXFx1MDAyNmJ1Zik7XFxuMjA3ODpcXHRcXHRpZiAobWF4X29wdGxlbiBcXHUwMDNjIDApXFxuMjA3OTpcXHRcXHRcXHRyZXR1cm4gbWF4X29wdGxlbjtcXG4yMDgwOlxcdFxcbjIwODE6XFx0XFx0Y3R4Lm9wdGxlbiA9ICpvcHRsZW47XFxuMjA4MjpcXHRcXG4yMDgzOlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjA4NDpcXHRcXHRcXHRcXHQgICAgICBtaW4oKm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjA4NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwODY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA4NzpcXHRcXHR9XFxuMjA4ODpcXHRcXG4yMDg5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjA5MDpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXFx1MDAyNmNncnAtXFx1MDAzZWJwZiwgQ0dST1VQX1NFVFNPQ0tPUFQsXFxuMjA5MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCAwLCBOVUxMKTtcXG4yMDkyOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMjA5MzpcXHRcXG4yMDk0OlxcdFxcdGlmIChyZXQpXFxuMjA5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMDk2OlxcdFxcbjIwOTc6XFx0XFx0aWYgKGN0eC5vcHRsZW4gPT0gLTEpIHtcXG4yMDk4OlxcdFxcdFxcdC8qIG9wdGxlbiBzZXQgdG8gLTEsIGJ5cGFzcyBrZXJuZWwgKi9cXG4yMDk5OlxcdFxcdFxcdHJldCA9IDE7XFxuMjEwMDpcXHRcXHR9IGVsc2UgaWYgKGN0eC5vcHRsZW4gXFx1MDAzZSBtYXhfb3B0bGVuIHx8IGN0eC5vcHRsZW4gXFx1MDAzYyAtMSkge1xcbjIxMDE6XFx0XFx0XFx0Lyogb3B0bGVuIGlzIG91dCBvZiBib3VuZHMgKi9cXG4yMTAyOlxcdFxcdFxcdGlmICgqb3B0bGVuIFxcdTAwM2UgUEFHRV9TSVpFIFxcdTAwMjZcXHUwMDI2IGN0eC5vcHRsZW4gXFx1MDAzZT0gMCkge1xcbjIxMDM6XFx0XFx0XFx0XFx0cHJfaW5mb19vbmNlKFxcXCJicGYgc2V0c29ja29wdDogaWdub3JpbmcgcHJvZ3JhbSBidWZmZXIgd2l0aCBvcHRsZW49JWQgKG1heF9vcHRsZW49JWQpXFxcXG5cXFwiLFxcbjIxMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICBjdHgub3B0bGVuLCBtYXhfb3B0bGVuKTtcXG4yMTA1OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMjEwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTA3OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjA6NTEuNDEzNjcxNDI2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDA2MjY0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgYnVmZmVyLCBzcGVjaWZpY2FsbHkgc2l6ZWQgYnkgYG1heF9vcHRsZW5gLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgbmV4dCBzdGVwIGlzIGEgY2FsbCB0byBgY29weV9mcm9tX3NvY2twdHJgLCB3aGljaCBpcyBnb2luZyB0byBncmFiIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEFuZCB0aGUgc2l6ZSBvZiB0aGF0IGNodW5rPyBXZWxsLCBpdCdzIHRoZSAqc21hbGxlciogdmFsdWUgYmV0d2VlbiB3aGF0IHRoZSB1c2VyIHByb3ZpZGVzIChgKm9wdGxlbmApIGFuZCB0aGF0IGBtYXhfb3B0bGVuYCB3ZSBqdXN0IGFsbG9jYXRlZC4gTWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gb3ZlcmZsb3cuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gSSdtIHdvbmRlcmluZyBob3cgYHNvY2tvcHRfYWxsb2NfYnVmYCBhY3R1YWxseSBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gRG9lcyBpdCB1c2UgYGttYWxsb2NgPyBPciBpcyBpdCBmYWxsaW5nIGJhY2sgdG8gdGhhdCBzdGFjay1iYXNlZCBgYnVmYD8gVGhhdCdzIGNydWNpYWwgZm9yIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZS4gQW5kIGFub3RoZXIgaW1wb3J0YW50IHBvaW50LCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBpZiBpdCB6ZXJvZXMgdGhlIGJ1ZmZlci4gSWYgbm90LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSB2dWxuZXJhYmlsaXR5LCBsZXR0aW5nIGdhcmJhZ2UgZGF0YSBmcm9tIHRoZSBrZXJuZWwgbGVhayBiYWNrIGludG8gdXNlciBzcGFjZS4gVGhpcyBuZWVkcyBhIG11Y2ggY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDo1Ny4wNTQzMDExNzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRcXHQvKiBXZSBkb24ndCBleHBvc2Ugb3B0dmFscyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gUEFHRV9TSVpFXFxuMjAyMTpcXHRcXHRcXHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXFxuMjAyMjpcXHRcXHRcXHQgKi9cXG4yMDIzOlxcdFxcdFxcdG1heF9vcHRsZW4gPSBQQUdFX1NJWkU7XFxuMjAyNDpcXHRcXHR9XFxuMjAyNTpcXHRcXG4yMDI2OlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2M9IHNpemVvZihidWYtXFx1MDAzZWRhdGEpKSB7XFxuMjAyNzpcXHRcXHRcXHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcXG4yMDI4OlxcdFxcdFxcdCAqIGJ5dGVzIGF2b2lkIHRoZSBjb3N0IG9mIGt6YWxsb2MuXFxuMjAyOTpcXHRcXHRcXHQgKi9cXG4yMDMwOlxcdFxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0gYnVmLVxcdTAwM2VkYXRhO1xcbjIwMzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHR2YWxfZW5kID0gY3R4LVxcdTAwM2VvcHR2YWwgKyBtYXhfb3B0bGVuO1xcbjIwMzI6XFx0XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjAzMzpcXHRcXHR9XFxuMjAzNDpcXHRcXG4yMDM1OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XFxuMjAzNjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlb3B0dmFsKVxcbjIwMzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cXHUwMDNlb3B0dmFsICsgbWF4X29wdGxlbjtcXG4yMDQwOlxcdFxcbjIwNDE6XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjA0MjpcXHR9XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcXG4yMDQ1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxcbjIwNDY6XFx0e1xcbjIwNDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3B0dmFsID09IGJ1Zi1cXHUwMDNlZGF0YSlcXG4yMDQ4OlxcdFxcdFxcdHJldHVybjtcXG4yMDQ5OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlb3B0dmFsKTtcXG4yMDUwOlxcdH1cXG4yMDUxOlxcdFxcbjIwNTI6XFx0c3RhdGljIGJvb2wgc29ja29wdF9idWZfYWxsb2NhdGVkKHN0cnVjdCBicGZfc29ja29wdF9rZXJuICpjdHgsXFxuMjA1MzpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcXG4yMDU0OlxcdHtcXG4yMDU1OlxcdFxcdHJldHVybiBjdHgtXFx1MDAzZW9wdHZhbCAhPSBidWYtXFx1MDAzZWRhdGE7XFxuMjA1NjpcXHR9XFxuMjA1NzpcXHRcXG4yMDU4OlxcdGludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBjb21wYXQsIGludCAqbGV2ZWwsXFxuMjA1OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICpvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMDo1Ny4wNTQ2NDg5NjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NjQzMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBzZXRzb2Nrb3B0IEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHNvY2tvcHRfYWxsb2NfYnVmYCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaXQgdXNlcyBga3phbGxvY2Agd2hpY2ggemVyby1pbml0aWFsaXplcy4gQnV0LCBpZiBpdCdzIHVzaW5nIHRoZSBzdGFjayBidWZmZXIgYGJ1Zi1cdTAwM2VkYXRhYCwgaXQgZG9lc24ndCBleHBsaWNpdGx5IHplcm8gaXQsIHdoaWNoIG1hZGUgbWUgcGF1c2UuIEFoLCB3YWl0LCBgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiBidWYgPSB7fTtgIGluIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCBhY3R1YWxseSAqZG9lcyogemVyby1pbml0aWFsaXplIHRoYXQgc3RhY2sgYnVmZmVyLiBUaGF0J3MgZ29vZDsgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBmdWxseSB6ZXJvZWQgYXQgdGhlIHN0YXJ0LlxuXG5Tbywgd2UgY29weSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYCwgdGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucyBpdHMgbWFnaWMuIE5vdywgaW5zaWRlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zZXRzb2Nrb3B0YCwgSSdtIHNlZWluZyB0aGlzOlxuYGBgY1xuXHRpZiAoY3R4Lm9wdGxlbiAhPSAwKSB7XG5cdFx0KmxldmVsID0gY3R4LmxldmVsO1xuXHRcdCpvcHRuYW1lID0gY3R4Lm9wdG5hbWU7XG5cdFx0Km9wdGxlbiA9IGN0eC5vcHRsZW47XG5cdFx0Kmtlcm5lbF9vcHR2YWwgPSBjdHgub3B0dmFsO1xuXHR9XG5gYGBcbklmIGBjdHgub3B0bGVuYCBpcyBpbmNyZWFzZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCB0aGVuIGAqb3B0bGVuYCBnZXRzIHVwZGF0ZWQsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgKm9wdGxlbmAuIEJ1dCwgYG1heF9vcHRsZW5gIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIEhvbGQgb24uLi4gdGhlIEJQRiB2ZXJpZmllciBtYWtlcyBzdXJlIHRoZSBCUEYgcHJvZ3JhbSBjYW4ndCBzZXQgYGN0eC5vcHRsZW5gIGxhcmdlciB0aGFuIGBtYXhfb3B0bGVuYC4gVGhlIGtlcm5lbCBjaGVja3MgdGhpcyBhcyB3ZWxsOlxuYGBgY1xuXHR9IGVsc2UgaWYgKGN0eC5vcHRsZW4gXHUwMDNlIG1heF9vcHRsZW4gfHwgY3R4Lm9wdGxlbiBcdTAwM2MgLTEpIHtcblx0XHQvKiBvcHRsZW4gaXMgb3V0IG9mIGJvdW5kcyAqL1xuYGBgXG5TbywgdGhhdCBgY3R4Lm9wdGxlbmAgaXMgYm91bmRlZC5cblxuU2luY2UgdGhlIGJ1ZmZlciBpcyB6ZXJvZWQsIHdoZXRoZXIgYnkgYGt6YWxsb2NgIG9yIHRoZSBge31gIGluaXRpYWxpemF0aW9uLCBhbnkgYnl0ZXMgYmV5b25kIHRoZSBvcmlnaW5hbCBgKm9wdGxlbmAgdXAgdG8gYGN0eC5vcHRsZW5gIHdpbGwgYmUgemVyby4gTmljZS4gQW5kIHRoZW4gYGtlcm5lbF9vcHR2YWxgIGdldHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBgc2V0c29ja29wdGAgaGFuZGxlci4gVGhlIGhhbmRsZXIgcmVhZHMgdXAgdG8gYCpvcHRsZW5gIGJ5dGVzIGZyb20gdGhlIGBrZXJuZWxfb3B0dmFsYC4gQmVjYXVzZSB0aGUgYnVmZmVyIGlzIHplcm9lZCwgdGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGJlIGxlYWtlZC4gRXhjZWxsZW50ISBUaGlzIHNlZW1zIHNhZmUuXG5cbk5vdywgd2hhdCBhYm91dCBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGA/IEkgbmVlZCB0byBsb29rIGF0IHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMTowNS4yMTEwODQwNzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MzpcXHRcXHRpZiAoIXJldHZhbCkge1xcbjIxNzQ6XFx0XFx0XFx0LyogSWYga2VybmVsIGdldHNvY2tvcHQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LFxcbjIxNzU6XFx0XFx0XFx0ICogY29weSB3aGF0ZXZlciB3YXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgYmFja1xcbjIxNzY6XFx0XFx0XFx0ICogaW50byBvdXIgdGVtcG9yYXJ5IGJ1ZmZlci4gU2V0IG9wdGxlbiB0byB0aGVcXG4yMTc3OlxcdFxcdFxcdCAqIG9uZSB0aGF0IGtlcm5lbCByZXR1cm5lZCBhcyB3ZWxsIHRvIGxldFxcbjIxNzg6XFx0XFx0XFx0ICogQlBGIHByb2dyYW1zIGluc3BlY3QgdGhlIHZhbHVlLlxcbjIxNzk6XFx0XFx0XFx0ICovXFxuMjE4MDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmN0eC5vcHRsZW4sIG9wdGxlbixcXG4yMTgxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihjdHgub3B0bGVuKSkpIHtcXG4yMTgyOlxcdFxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjE4MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMTg0OlxcdFxcdFxcdH1cXG4yMTg1OlxcdFxcbjIxODY6XFx0XFx0XFx0aWYgKGN0eC5vcHRsZW4gXFx1MDAzYyAwKSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE4OTpcXHRcXHRcXHR9XFxuMjE5MDpcXHRcXHRcXHRvcmlnX29wdGxlbiA9IGN0eC5vcHRsZW47XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihjdHgub3B0dmFsLCBvcHR2YWwsXFxuMjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBtaW4oY3R4Lm9wdGxlbiwgbWF4X29wdGxlbikpKSB7XFxuMjE5NDpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIxOTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjE5NjpcXHRcXHRcXHR9XFxuMjE5NzpcXHRcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdGxvY2tfc29jayhzayk7XFxuMjIwMDpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fYXJyYXlfY2coXFx1MDAyNmNncnAtXFx1MDAzZWJwZiwgQ0dST1VQX0dFVFNPQ0tPUFQsXFxuMjIwMTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmN0eCwgYnBmX3Byb2dfcnVuLCByZXR2YWwsIE5VTEwpO1xcbjIyMDI6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4yMjAzOlxcdFxcbjIyMDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjIwNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjA2OlxcdFxcbjIyMDc6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcXHUwMDI2XFx1MDAyNlxcbjIyMDg6XFx0XFx0ICAgIChjdHgub3B0bGVuIFxcdTAwM2UgbWF4X29wdGxlbiB8fCBjdHgub3B0bGVuIFxcdTAwM2MgMCkpIHtcXG4yMjA5OlxcdFxcdFxcdGlmIChvcmlnX29wdGxlbiBcXHUwMDNlIFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiBjdHgub3B0bGVuIFxcdTAwM2U9IDApIHtcXG4yMjEwOlxcdFxcdFxcdFxcdHByX2luZm9fb25jZShcXFwiYnBmIGdldHNvY2tvcHQ6IGlnbm9yaW5nIHByb2dyYW0gYnVmZmVyIHdpdGggb3B0bGVuPSVkIChtYXhfb3B0bGVuPSVkKVxcXFxuXFxcIixcXG4yMjExOlxcdFxcdFxcdFxcdFxcdCAgICAgY3R4Lm9wdGxlbiwgbWF4X29wdGxlbik7XFxuMjIxMjpcXHRcXHRcXHRcXHRyZXQgPSByZXR2YWw7XFxuMjIxMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjE0OlxcdFxcdFxcdH1cXG4yMjE1OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjIxNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjE3OlxcdFxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0aWYgKGN0eC5vcHRsZW4gIT0gMCkge1xcbjIyMjA6XFx0XFx0XFx0aWYgKCFzb2NrcHRyX2lzX251bGwob3B0dmFsKSBcXHUwMDI2XFx1MDAyNlxcbjIyMjE6XFx0XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGN0eC5vcHR2YWwsIGN0eC5vcHRsZW4pKSB7XFxuMjIyMjpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMTowNS4yMTEyOTUzMDVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MDUxMTc3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZXRzb2Nrb3B0IEJQRiBIb29rIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBoYW5kbGVzIGBnZXRzb2Nrb3B0YCBjYWxscywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5Jbml0aWFsbHksIGBidWZgIGlzIHplcm9lZCwgYW5kIGFzc3VtaW5nIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgdXNlcyBga3phbGxvY2AgKHdoaWNoIHNlZW1zIGxpa2VseSksIHRoZSBidWZmZXIgYGN0eC5vcHR2YWxgIGlzIHplcm9lZC4gVGhlbiwgdXNlci1zcGFjZSBkYXRhIGlzIGNvcGllZCAqaW50byogYGN0eC5vcHR2YWxgIHZpYSBgY29weV9mcm9tX3NvY2twdHJgLCB0aGUgQlBGIHByb2dyYW0gcnVucywgYW5kIHRoZSBtb2RpZmllZCBkYXRhIGlzIGNvcGllZCAqYmFjayogdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b19zb2NrcHRyYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYW55IGJ5dGVzIG5vdCB0b3VjaGVkIGJ5IGBjb3B5X2Zyb21fc29ja3B0cmAgb3IgdGhlIEJQRiBwcm9ncmFtIHJlbWFpbiB6ZXJvZWQuIFNvLCB0aGUgaW5pdGlhbCB6ZXJvaW5nIHByb3ZpZGVzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuXG5cbkJ1dCB3aGF0IGhhcHBlbnMgaWYgdGhlIG9yaWdpbmFsLCBrZXJuZWwtcHJvdmlkZWQgb3B0aW9uIGxlbmd0aCAoYG9yaWdfb3B0bGVuYCkgaXMgbGVzcyB0aGFuIGBjdHgub3B0bGVuYCB3aGljaCBpcyBwb3RlbnRpYWxseSBtb2RpZmllZCBieSB0aGUgQlBGIHByb2dyYW0/IGBjb3B5X2Zyb21fc29ja3B0cmAgb25seSBjb3BpZXMgYG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKWAgYnl0ZXMuIFdhaXQsIHRoYXQgYGN0eC5vcHRsZW5gIGNvbWVzIGZyb20gdXNlciBzcGFjZSEgU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsJ3MgYGdldHNvY2tvcHRgIGhhbmRsZXIgd3JpdGVzIHRoZSAqYWN0dWFsKiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gdGhlIGBvcHRsZW5gIHBvaW50ZXIgcHJvdmlkZWQgYnkgdXNlciBzcGFjZSwgYW5kIHRoZW4gdGhlIEJQRiBjb2RlIHJlYWRzIGl0IGJhY2suIFRoZW4gdGhlIHNhbWUgdmFsdWUgb2YgYG9wdGxlbmAgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YSBmcm9tIHVzZXIgc3BhY2UgYmFjayBpbnRvIGBjdHgub3B0dmFsYC4gVGhlbiB0aGUgQlBGIHByb2dyYW0gcnVucy4gQW5kIHRoZW4gdGhlIGNvZGUgY29waWVzIGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBpbmVmZmljaWVudCBiZWNhdXNlIHdlJ3JlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHNhbWUgbGVuZ3RoIGZyb20gdXNlciBzcGFjZSwgYnV0IHRoaXMgaXMgaG93IGl0IHdvcmtzLiBTaW5jZSBgY3R4Lm9wdHZhbGAgaXMgaW5pdGlhbGx5IHplcm9lZCBhbmQgb25seSB0aGUgZmlyc3QgYG1pbihjdHgub3B0bGVuLCBtYXhfb3B0bGVuKWAgYnl0ZXMgYXJlIG92ZXJ3cml0dGVuLCBhbnkgdHJhaWxpbmcgYnl0ZXMgcmVtYWluIHplcm8uIElmIHRoZSBCUEYgcHJvZ3JhbSAqaW5jcmVhc2VzKiBgY3R4Lm9wdGxlbmAgKHVwIHRvIGBtYXhfb3B0bGVuYCksIHRoZSBuZXdseSBjb3BpZWQgYnl0ZXMgYXJlIGVpdGhlciB6ZXJvIG9yIHdoYXQgdGhlIEJQRiBwcm9ncmFtIHNwZWNpZmljYWxseSB3cm90ZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGlzX2NvbXBhdGAgdG8gYm90aCBgYnBmX3NvY2tvcHRgIGFuZCBgYnBmX3NvY2tvcHRfa2VybmAgc3RydWN0dXJlcy4gYGRvX3NvY2tfc2V0c29ja29wdGAgYW5kIGBkb19zb2NrX2dldHNvY2tvcHRgIGFyZSBtb2RpZmllZCB0byBwYXNzIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MsIGVuYWJsaW5nIHRoZXNlIGhvb2tzIGZvciBjb21wYXQgc29ja2V0cy4gQ291bGQgdGhlIEJQRiBwcm9ncmFtcyAqdGhlbXNlbHZlcyogYmUgdGhlIHNvdXJjZSBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBObywgYmVjYXVzZSB0aGUgQlBGIHZlcmlmaWVyIHByZXZlbnRzIHByb2dyYW1zIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBpc19jb21wYXRgIGZsYWcgd2l0aGluIGBicGZfc29ja29wdF9rZXJuYCBpcyBhIHNpbXBsZSBgczMyYCAoNCBieXRlcykgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGNvbXBhdGAgdmFsdWUgKDAgb3IgMSkuIFRoZSByZXN0IG9mIGBicGZfc29ja29wdF9rZXJuYCBpcyB6ZXJvZWQgZHVlIHRvIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVyLiBTcGVjaWZpY2FsbHksIGFsbCBvdGhlciBmaWVsZHMgbGlrZSBgdG1wX3JlZ2AsIGBvcHR2YWxgLCBgb3B0dmFsX2VuZGAsIGFuZCBgb3B0bGVuYCBhcmUgemVyb2VkIHVubGVzcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXYWl0LCBsYXRlciBgb3B0bGVuYCBpcyBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gYG1heF9vcHRsZW5gLiBUaGlzIHByb3ZpZGVzIGEgdmVyeSBoaWdoIGRlZ3JlZSBvZiBjb25maWRlbmNlIHRoYXQgdGhlcmUncyBubyB3YXkgdGhlIGNvZGUgbGVha3MgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBgZG9fc29ja19nZXRzb2Nrb3B0YCBvbmUgbW9yZSB0aW1lLCB0aG91Z2gsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIxOjE3LjkxNjQxNjY3NloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Mzc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Mzg6XFx0e1xcbjI0Mzk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcbjI0NDA6XFx0XFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzO1xcbjI0NDE6XFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4yNDQyOlxcdFxcdHNvY2tvcHRfdCBvcHQ7XFxuMjQ0MzpcXHRcXHRpbnQgZXJyO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSk7XFxuMjQ0NjpcXHRcXHRpZiAoZXJyKVxcbjI0NDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDQ4OlxcdFxcbjI0NDk6XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDUyOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ1MzpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0NTQ6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0NTU6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ1NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0NTc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDU4OlxcdFxcbjI0NTk6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0NjA6XFx0XFxuMjQ2MTpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDYyOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0NjM6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDY0OlxcdFxcdFxcdCAqL1xcbjI0NjU6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDY3OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ2ODpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNDY5OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNDcxOlxcdFxcbjI0NzI6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNDc0OlxcdFxcdH0gZWxzZSB7XFxuMjQ3NTpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNDc2OlxcdFxcdH1cXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXFx1MDAzZXNrLCBjb21wYXQsIGxldmVsLCBvcHRuYW1lLFxcbjI0Nzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNDgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNDgxOlxcdFxcbjI0ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4yNDgzOlxcdH1cXG4yNDg0OlxcdEVYUE9SVF9TWU1CT0woZG9fc29ja19nZXRzb2Nrb3B0KTtcXG4yNDg1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoyMToxNy45MTY2OTAwOTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxODk4ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdldHNvY2tvcHQgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBnZXRzb2Nrb3B0YCBjb2RlIHBhdGgsIHNwZWNpZmljYWxseSBgZG9fc29ja19nZXRzb2Nrb3B0YC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoaXMgYGNvcHlfZnJvbV9zb2NrcHRyYCBjYWxsIHRoYXQncyBzdXBwb3NlZCB0byBncmFiIHRoZSBvcHRpb24gbGVuZ3RoLCBgb3B0bGVuYC4gTm93LCBpZiB0aGF0IGZhaWxzLCBgbWF4X29wdGxlbmAgZ2V0cyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlci5cblxuRG93bnN0cmVhbSwgd2UgcGFzcyB0aGlzIGBtYXhfb3B0bGVuYCB2YWx1ZSwgcG90ZW50aWFsbHkgemVybywgdG8gYEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVGAuIEluc2lkZSBgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfZ2V0c29ja29wdGAsIHdlIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgbWF4X29wdGxlbmAgaXMgc3RvcmVkIGluIGBvcmlnX29wdGxlbmAsIGFuZCB0aGVuIHBhc3NlZCB0byBgc29ja29wdF9hbGxvY19idWZgLCB3aGljaCBpcyBxdWl0ZSBpbnRlcmVzdGluZy4gVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBidWZmZXIgaXMgZGV0ZXJtaW5lZCBieSBgc29ja29wdF9hbGxvY19idWZgLlxuXG5IZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaWYgdGhlIGluaXRpYWwgYG1heF9vcHRsZW5gICppcyogemVybywgdGhlbiBgc29ja29wdF9hbGxvY19idWZgIHdpbGwgYWxsb2NhdGUgYSB6ZXJvLXNpemVkIGJ1ZmZlciBvciBtYXliZSBqdXN0IHVzZSB0aGUgc3RhY2sgYnVmZmVyIGFuZCByZXR1cm4gMC4gVGhpcyBpcyBwcm9iYWJseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhlIGxvZ2ljIHNlZW1zIHJpZ2h0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc29ja29wdF9hbGxvY19idWZgIGl0c2VsZiBoYW5kbGVzIHRoZSB6ZXJvIGNhc2UgcHJvcGVybHk7IGFueSBvZmYtYnktb25lIGVycm9ycyB0aGVyZSB3b3VsZCBiZSBjcml0aWNhbC4gTGV0IG1lIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhZ2Fpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjIxOjIzLjUzNTY4MTkzOFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDA4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDA4OlxcdFxcbjIwMDk6XFx0XFx0cmV0dXJuIHJldDtcXG4yMDEwOlxcdH1cXG4yMDExOlxcdFxcbjIwMTI6XFx0I2lmZGVmIENPTkZJR19ORVRcXG4yMDEzOlxcdHN0YXRpYyBpbnQgc29ja29wdF9hbGxvY19idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCwgaW50IG1heF9vcHRsZW4sXFxuMjAxNDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja29wdF9idWYgKmJ1ZilcXG4yMDE1OlxcdHtcXG4yMDE2OlxcdFxcdGlmICh1bmxpa2VseShtYXhfb3B0bGVuIFxcdTAwM2MgMCkpXFxuMjAxNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDE4OlxcdFxcbjIwMTk6XFx0XFx0aWYgKHVubGlrZWx5KG1heF9vcHRsZW4gXFx1MDAzZSBQQUdFX1NJWkUpKSB7XFxuMjAyMDpcXHRcXHRcXHQvKiBXZSBkb24ndCBleHBvc2Ugb3B0dmFscyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gUEFHRV9TSVpFXFxuMjAyMTpcXHRcXHRcXHQgKiB0byB0aGUgQlBGIHByb2dyYW0uXFxuMjAyMjpcXHRcXHRcXHQgKi9cXG4yMDIzOlxcdFxcdFxcdG1heF9vcHRsZW4gPSBQQUdFX1NJWkU7XFxuMjAyNDpcXHRcXHR9XFxuMjAyNTpcXHRcXG4yMDI2OlxcdFxcdGlmIChtYXhfb3B0bGVuIFxcdTAwM2M9IHNpemVvZihidWYtXFx1MDAzZWRhdGEpKSB7XFxuMjAyNzpcXHRcXHRcXHQvKiBXaGVuIHRoZSBvcHR2YWwgZml0cyBpbnRvIEJQRl9TT0NLT1BUX0tFUk5fQlVGX1NJWkVcXG4yMDI4OlxcdFxcdFxcdCAqIGJ5dGVzIGF2b2lkIHRoZSBjb3N0IG9mIGt6YWxsb2MuXFxuMjAyOTpcXHRcXHRcXHQgKi9cXG4yMDMwOlxcdFxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0gYnVmLVxcdTAwM2VkYXRhO1xcbjIwMzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHR2YWxfZW5kID0gY3R4LVxcdTAwM2VvcHR2YWwgKyBtYXhfb3B0bGVuO1xcbjIwMzI6XFx0XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjAzMzpcXHRcXHR9XFxuMjAzNDpcXHRcXG4yMDM1OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsID0ga3phbGxvYyhtYXhfb3B0bGVuLCBHRlBfVVNFUik7XFxuMjAzNjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlb3B0dmFsKVxcbjIwMzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzODpcXHRcXG4yMDM5OlxcdFxcdGN0eC1cXHUwMDNlb3B0dmFsX2VuZCA9IGN0eC1cXHUwMDNlb3B0dmFsICsgbWF4X29wdGxlbjtcXG4yMDQwOlxcdFxcbjIwNDE6XFx0XFx0cmV0dXJuIG1heF9vcHRsZW47XFxuMjA0MjpcXHR9XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdHN0YXRpYyB2b2lkIHNvY2tvcHRfZnJlZV9idWYoc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm4gKmN0eCxcXG4yMDQ1OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9zb2Nrb3B0X2J1ZiAqYnVmKVxcbjIwNDY6XFx0e1xcbjIwNDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3B0dmFsID09IGJ1Zi1cXHUwMDNlZGF0YSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjE6MjMuNTM1ODg0MzI4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDQxODY4OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gQlBGIFNvY2tvcHQgSG9vayBmb3IgQ29tcGF0IFN5c2NhbGxzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgZXhwb3NpbmcgQlBGIGhvb2tzIHRvIGNvbXBhdCBzeXNjYWxscyB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY3J1eCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpc19jb21wYXRgIGZsYWcgYW5kIGVuYWJsaW5nIEJQRiBob29rcyB0aGF0IHdlcmUgcHJldmlvdXNseSBieXBhc3NlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgY3JlYXRlIGFueSBsZWFrIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGtlcm5lbCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBtYXhfb3B0bGVuYCBzY2VuYXJpby4gSWYgYG1heF9vcHRsZW5gIGlzIHplcm8sIGFzIHRoZSBjb2RlIGRlbW9uc3RyYXRlcywgYW5kIGBzb2Nrb3B0X2FsbG9jX2J1ZmAgcmV0dXJucyB6ZXJvLCB0aGUgc3Vic2VxdWVudCBgY29weV9mcm9tX3NvY2twdHJgIHdpbGwgY29weSB6ZXJvIGJ5dGVzLCBtYWtpbmcgdGhlIHNldHVwIHNhZmUuIEkgY29uZmlybWVkIHRoYXQgYG1heF9vcHRsZW5gIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHNvIG5vIHdvcnJpZXMgYWJvdXQgaXQgYmVpbmcgdW5pbml0aWFsaXplZCBpbml0aWFsbHkuXG5cbkkgdGhlbiBjb25zaWRlcmVkIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIGhhbmRsZWQgYnkgdGhlIEJQRiBwcm9ncmFtLCBmb2N1c2luZyBvbiB3aGVyZSB0aGUgYnVmZmVyIGlzIGFsbG9jYXRlZC4gYHNvY2tvcHRfYWxsb2NfYnVmYCBpcyB0aGUga2V5LiBUaGUgY29kZSB1c2VzIGVpdGhlciBhIHN0YWNrIGJ1ZmZlciwgZGVjbGFyZWQgYXMgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCB3aGljaCBJJ20gY29uZmlkZW50IHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdCwgb3IgaXQgdXNlcyBga3phbGxvY2AsIHdoaWNoIEkga25vdyB6ZXJvZXMgdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuVGhlIGhvb2tzIGFsc28gdXNlIGBjb3B5X2Zyb21fc29ja3B0cmAgYW5kIGBjb3B5X3RvX3NvY2twdHJgLiBTaW5jZSB0aGUgYnVmZmVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgYW55IGJ5dGVzIG5vdCBvdmVyd3JpdHRlbiBlaXRoZXIgYnkgdXNlci1zcGFjZSBvciB0aGUgQlBGIHByb2dyYW0gd2lsbCByZW1haW4gemVybywgcHJldmVudGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay5cblxuSSBtb3ZlZCBvbiB0byBgZG9fc29ja19zZXRzb2Nrb3B0YCBhbmQgYGRvX3NvY2tfZ2V0c29ja29wdGAgdG8gbG9vayBhdCBob3cgdGhlIGJ1ZmZlciBpcyB1c2VkLiBUaGUgc2V0c29ja29wdCBoYW5kbGVyIGlzIGNhbGxlZCwgYW5kIHRoZSBrZXkgaXMgaWYgdGhlIEJQRiBwcm9ncmFtIHNldHMgYGtlcm5lbF9vcHR2YWxgLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IGBzb2Nrb3B0X2FsbG9jX2J1ZmAgaXMgdXNlZCwgc28gaXQgaXMgZWl0aGVyIHplcm9lZCwgb3IgZmlsbGVkIGZyb20gdXNlciBzcGFjZS4gSW4gYGRvX3NvY2tfZ2V0c29ja29wdGAsIHRoZSBrZXJuZWwgaGFuZGxlciB3cml0ZXMgdG8gdGhlIGJ1ZmZlciwgQlBGIHByb2dyYW0gbWF5IG1vZGlmeSBpdCwgYW5kIHRoZW4gaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIGVpdGhlci5cblxuSSBhbHNvIGNoZWNrZWQgb3RoZXIgcGxhY2VzIHdoZXJlIGBjb21wYXRgIGlzIHVzZWQ6IGluIHRoZSB2YXJpb3VzIEJQRiBoZWFkZXIgZmlsZXMgYW5kIGluIHRoZSB0ZXN0IGZpbGVzLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBkb24ndCBzZWUgYW55IG90aGVyIGNvbmNlcm5pbmcgdXNlcy5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IEMgaW5pdGlhbGl6YXRpb24sIGFuZCBjb25maXJtZWQgdGhhdCBhIHN0cnVjdCBpbml0aWFsaXplZCB3aXRoIGB7fWAgb3IgYHswfWAgemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcgYW5kIGFycmF5cy4gSSBhbHNvIHZlcmlmaWVkIHRoYXQgYGt6YWxsb2NgIGRvZXMsIGluIGZhY3QsIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgY2hlY2tlZCB0aGUgYHN0cnVjdCBicGZfc29ja29wdF9rZXJuIGN0eCA9IHsgLi4uIH07YCBpbml0aWFsaXphdGlvbiBhcyB3ZWxsOyBhbGwgZmllbGRzIHdlcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gdGhpcyBsb29rcyBzb2xpZC5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBJdCdzIHJlYWxseSBqdXN0IGEgZmVhdHVyZSBhZGRpdGlvbiAob3IgcGVyaGFwcyBhIGJ1ZyBmaXgpLCBzbyB0aGUgc3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gVGhlIGJ1ZmZlcnMgYXJlIGVpdGhlciBzdGFjay1hbGxvY2F0ZWQgYW5kIHplcm9lZCBvciBoZWFwLWFsbG9jYXRlZCBhbmQgemVyb2VkIHZpYSBga3phbGxvY2AsIGFuZCB0aGUgY29udGV4dCBpdHNlbGYgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLCBzbyBubyBpc3N1ZXMgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY4MywiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MjE6NDMuOTc3NzU3OTI5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19jb21wYXRgIGZpZWxkIHRvIHRoZSBCUEYgc29ja29wdCBjb250ZXh0IGFuZCBlbmFibGVzIEJQRiBob29rcyBmb3IgY29tcGF0IHNldHNvY2tvcHQvZ2V0c29ja29wdCBzeXNjYWxscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYXNzaW5nIHRoZSBgY29tcGF0YCBmbGFnIHRvIHRoZSBCUEYgaG9va3MgYW5kIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcy4gVGhlIGJ1ZmZlcnMgdXNlZCBmb3IgQlBGIHNvY2tvcHQgaG9va3MgYXJlIGFsbG9jYXRlZCB2aWEgYHNvY2tvcHRfYWxsb2NfYnVmYCwgd2hpY2ggdXNlcyBlaXRoZXIgYSBzdGFjayBidWZmZXIgemVyby1pbml0aWFsaXplZCB2aWEgYHN0cnVjdCBicGZfc29ja29wdF9idWYgYnVmID0ge307YCBvciBoZWFwIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYC4gVGhlcmVmb3JlLCBhbGwgbWVtb3J5IGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBwYXNzZWQgdG8ga2VybmVsIGhhbmRsZXJzLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfa2VybmAgY29udGV4dCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCB6ZXJvLWZpbGwgdGhlIHVuYXNzaWduZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfY29tcGF0YCBmaWVsZCB0byB0aGUgQlBGIHNvY2tvcHQgY29udGV4dCBhbmQgZW5hYmxlcyBCUEYgaG9va3MgZm9yIGNvbXBhdCBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgc3lzY2FsbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFzc2luZyB0aGUgYGNvbXBhdGAgZmxhZyB0byB0aGUgQlBGIGhvb2tzIGFuZCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMuIFRoZSBidWZmZXJzIHVzZWQgZm9yIEJQRiBzb2Nrb3B0IGhvb2tzIGFyZSBhbGxvY2F0ZWQgdmlhIGBzb2Nrb3B0X2FsbG9jX2J1ZmAsIHdoaWNoIHVzZXMgZWl0aGVyIGEgc3RhY2sgYnVmZmVyIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBzdHJ1Y3QgYnBmX3NvY2tvcHRfYnVmIGJ1ZiA9IHt9O2Agb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuIFRoZXJlZm9yZSwgYWxsIG1lbW9yeSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgcGFzc2VkIHRvIGtlcm5lbCBoYW5kbGVycywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGJwZl9zb2Nrb3B0X2tlcm5gIGNvbnRleHQgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggemVyby1maWxsIHRoZSB1bmFzc2lnbmVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdrw8f[1] Phase: Succeeded StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 12:21:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 12:21:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2] Phase: Succeeded StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 12:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 12:21:55 +0000 UTC FinishedAt: 2026-08-13 12:22:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdrw8f/series-workflowdrw8f-convert-artifact-1563715845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 12:22:06 +0000 UTC FinishedAt: 2026-08-13 12:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 12:22:06 +0000 UTC FinishedAt: 2026-08-13 12:39:44 +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:*b75bcbfa-c690-403a-b45a-4d636d1cd268,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-workflowdrw8f/series-workflowdrw8f-convert-artifact-1563715845/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": "3670c108-4455-498e-a155-cb66ab593c4c", "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-workflowdrw8f/series-workflowdrw8f-build-action-1307780267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 12:22:06 +0000 UTC FinishedAt: 2026-08-13 12:39:34 +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:*b75bcbfa-c690-403a-b45a-4d636d1cd268,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-workflowdrw8f/series-workflowdrw8f-convert-artifact-1563715845/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": "3670c108-4455-498e-a155-cb66ab593c4c", "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-workflowdrw8f/series-workflowdrw8f-build-action-1307780267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 12:39:44 +0000 UTC FinishedAt: 2026-08-13 12:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 12:39:44 +0000 UTC FinishedAt: 2026-08-13 12:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 12:39:44 +0000 UTC FinishedAt: 2026-08-13 12:39:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 12:39:44 +0000 UTC FinishedAt: 2026-08-13 12:39:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdrw8f/series-workflowdrw8f-convert-artifact-1618203872/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 12:39:54 +0000 UTC FinishedAt: 2026-08-13 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 12:39:54 +0000 UTC FinishedAt: 2026-08-13 12:42:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3670c108-4455-498e-a155-cb66ab593c4c,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-workflowdrw8f/series-workflowdrw8f-build-action-1307780267/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-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 12:42:20 +0000 UTC FinishedAt: 2026-08-13 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 12:42:20 +0000 UTC FinishedAt: 2026-08-13 12:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 12:42:20 +0000 UTC FinishedAt: 2026-08-13 13:03:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 12:42:20 +0000 UTC FinishedAt: 2026-08-13 13:03:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b75bcbfa-c690-403a-b45a-4d636d1cd268,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-workflowdrw8f/series-workflowdrw8f-convert-artifact-1618203872/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": "5a9b466a-b5ed-4524-b01a-5ab28ad9124a", "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-workflowdrw8f/series-workflowdrw8f-build-action-3135652252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 12:42:20 +0000 UTC FinishedAt: 2026-08-13 13:03:07 +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:*b75bcbfa-c690-403a-b45a-4d636d1cd268,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-workflowdrw8f/series-workflowdrw8f-convert-artifact-1618203872/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": "5a9b466a-b5ed-4524-b01a-5ab28ad9124a", "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-workflowdrw8f/series-workflowdrw8f-build-action-3135652252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:03:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:03:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:05:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:05:03 +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:*5a9b466a-b5ed-4524-b01a-5ab28ad9124a,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-workflowdrw8f/series-workflowdrw8f-build-action-3135652252/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-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"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:*3670c108-4455-498e-a155-cb66ab593c4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a9b466a-b5ed-4524-b01a-5ab28ad9124a,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-workflowdrw8f/series-workflowdrw8f-build-action-1307780267/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-workflowdrw8f/series-workflowdrw8f-build-action-3135652252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 13:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 13:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"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-workflowdrw8f/series-workflowdrw8f-convert-artifact-2602177593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 13:05:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 13:05:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 13:05:13 +0000 UTC FinishedAt: 2026-08-13 13:05:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 13:05:38 +0000 UTC FinishedAt: 2026-08-13 16:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrw8f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["__cgroup_bpf_run_filter_setsockopt","__cgroup_bpf_run_filter_getsockopt","do_sock_setsockopt","do_sock_getsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","COMPAT","IA32_EMULATION"],"series_id":"c6228b20-fecb-4635-8e52-9e2ba88baf0d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 13:05:38 +0000 UTC FinishedAt: 2026-08-13 16:12:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3670c108-4455-498e-a155-cb66ab593c4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a9b466a-b5ed-4524-b01a-5ab28ad9124a,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-workflowdrw8f/series-workflowdrw8f-build-action-1307780267/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-workflowdrw8f/series-workflowdrw8f-build-action-3135652252/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-workflowdrw8f/series-workflowdrw8f-convert-artifact-2602177593/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,}