Name: series-workflowfnmgm Phase: Succeeded StartedAt: 2026-08-29 02:16:55 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[0] Phase: Succeeded StartedAt: 2026-08-29 02:16:55 +0000 UTC FinishedAt: 2026-08-29 02:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 02:16:55 +0000 UTC FinishedAt: 2026-08-29 02:42:38 +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": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "CGROUP_BPF", "INET", "NET" ], "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": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "CGROUP_BPF", "INET", "NET" ], "series_id": "2f4aa2f6-2f30-4013-953c-ef654d5db2df" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_get_from_fd", "sock_map_prog_detach", "sock_map_link_create", "sk_psock_init", "sk_psock_start_verdict", "sk_psock_stop_verdict", "sk_psock_init_strp", "sk_psock_start_strp", "sk_psock_stop_strp", "tcp_eat_skb", "tcp_bpf_strp_read_sock", "tcp_bpf_sendmsg_redir" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDcyOTgwNzYzNjQwZjNkNDZjZDY0MTQ5ZDNiY2ZhMDY0N2Y1YjVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcbmluZGV4IDI1MjFiNjQzZmEwNWQuLjVmYTdiOTYzOWVlZmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za21zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jXG5AQCAtMTAzOSwxMCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbiYjNDM7XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpkc3QgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbiYjNDM7XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4gXHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVx1MDAzZXNrKS4gVGhpcyBjb3JlIG5ldHdvcmtpbmcvZUJQRiBzb2NrbWFwIGxvZ2ljIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jCmluZGV4IDI1MjFiNjQzZmEwNWQuLjVmYTdiOTYzOWVlZmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuYwpAQCAtMTAzOSwxMCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCQlicmVhazsKLQljYXNlIF9fU0tfUkVESVJFQ1Q6Ci0JCXRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKTsKJiM0MzsJY2FzZSBfX1NLX1JFRElSRUNUOiB7CiYjNDM7CQlzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpOwomIzQzOwomIzQzOwkJaWYgKGRzdCAhPSBwc29jay0mZ3Q7c2spCiYjNDM7CQkJdGNwX2VhdF9za2IocHNvY2stJmd0O3NrLCBza2IpOwogCQllcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBfX1NLX0RST1A6CiAJZGVmYXVsdDoKIG91dF9mcmVlOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY2hhbmdlIGluIGBuZXQvY29yZS9za21zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTtyZSB0d2Vha2luZyBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBmcmFtZXdvcmsuIFRoZSBgX19TS19SRURJUkVDVGAgY2FzZSBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJsb2NrIHNjb3BlIHdpdGggYSBjb21wYXJpc29uIG9mIHNvY2tldHMuCgpTcGVjaWZpY2FsbHksIHRoZSBvbGQgY29kZSBqdXN0IGNhbGxlZCBgdGNwX2VhdF9za2JgIHVuY29uZGl0aW9uYWxseS4gTm93LCB0aGUgbmV3IGNvZGUgZmV0Y2hlcyBhIGRlc3RpbmF0aW9uIHNvY2tldCB1c2luZyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpYCwgdGhlbiBjaGVja3MgaWYgaXQmIzM5O3MgdGhlIHNhbWUgYXMgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhlIGBwc29ja2AuIE9ubHkgaWYgdGhleSYjMzk7cmUgKmRpZmZlcmVudCogZG9lcyBpdCBjYWxsIGB0Y3BfZWF0X3NrYmAuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gVGhhdCBjaGVjayBvZiBgZHN0ICE9IHBzb2NrLSZndDtza2AgZmVlbHMgc2lnbmlmaWNhbnQuIElzIHRoaXMgdG8gcHJldmVudCBjb25zdW1pbmcgYW5kIHJlZGlyZWN0aW5nIHRoZSBzYW1lIHBhY2tldD8gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIGJ1ZyBmaXggcmVsYXRlZCB0byByZWRpcmVjdCBsb29wcyBvciBzb21lIG90aGVyIHN1YnRsZSBpc3N1ZS4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGU6IGBuZXQvY29yZS9za21zZy5jYCBpdHNlbGYsIGluY2x1ZGluZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlLCB1bmRlcnN0YW5kIHRoZSBjYWxsZXJzIG9mIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgbG9vayBhdCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zLCBzZWUgd2hhdCBjb25maWdzIGFyZSBhdmFpbGFibGUsIGFuZCBjaGVjayB3aGljaCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMuIFRoZSB3aG9sZSBwaWN0dXJlIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBmdW5jdGlvbiBkb2VzLCB3aG8gc2V0cyB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24sIGFuZCBob3cgaXQgYWxsIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSBUQ1AuIFRoZSBkZXRhaWxzIGFyZSBpbiB0aGUgY29kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBub3cuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBzaWRlIGVmZmVjdHMgb2Ygbm90IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyMTpcdFx0XHRcdG9mZiA9IDA7XG4xMDIyOlx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjM6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjQ6XHRcbjEwMjU6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI2Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDI3Olx0XHRcdFx0fVxuMTAyODpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbjEwMjk6XHRcdFx0fVxuMTAzMDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDMxOlx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDMyOlx0XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4xMDMzOlx0XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbjEwMzQ6XHRcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwMzU6XHRcdFx0XHRcdGVyciA9IDA7XG4xMDM2Olx0XHRcdFx0fVxuMTAzNzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDM4Olx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMzk6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdFx0YnJlYWs7XG4xMDQyOlx0XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbjEwNDM6XHRcdFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbjEwNDY6XHRcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNDc6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xuMTA0ODpcdFx0XHRicmVhaztcbjEwNDk6XHRcdH1cbjEwNTA6XHRcdGNhc2UgX19TS19EUk9QOlxuMTA1MTpcdFx0ZGVmYXVsdDpcbjEwNTI6XHRvdXRfZnJlZTpcbjEwNTM6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuMTA1NDpcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTU6XHRcdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuMTA1NjpcdFx0fVxuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIGVycjtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMDY0Olx0XHR2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzaykgPSBOVUxMO1xuMTA2NTpcdFxuMTA2NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA2NzpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMDY4Olx0XHRpZiAobGlrZWx5KHBzb2NrKSkge1xuMTA2OTpcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc2ttc2cuY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQg4oCTIGhvdyBpdCYjMzk7cyBiZWluZyBpbnZva2VkLCB3aGF0IHByZXJlcXVpc2l0ZXMgb3IgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHRoYXQgZ292ZXJuIGl0cyBleGVjdXRpb24sIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHBhY2tldCBzb2NrZXQgZmlsdGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyBpdCBoYW5kbGVzIGFuZCBtYWtlIGEgbWFwIG9mIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5NS1cbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTctXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDItXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDM6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI2Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFBhdGggb2YgYG5ldC9jb3JlL3NrbXNnLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBuZXQvY29yZS9za21zZy5jYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZmlndXJlIG91dCB3aGljaCBNYWtlZmlsZXMgYXJlIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluIHRvIHNlZSB3aGVyZSB0aGlzIHNwZWNpZmljIGZpbGUgaXMgY29tcGlsZWQgZnJvbS4gS25vd2luZyB0aGUgc3BlY2lmaWMgTWFrZWZpbGUgdGhhdCBoYW5kbGVzIHRoaXMgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBmbGFncywgaW5jbHVkZSBwYXRocywgYW5kIGFueSBwb3RlbnRpYWwgY3VzdG9taXphdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGhpZ2hlciB1cCBpZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZGVmaW5lZCB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcnVsZXMgdGhhdCBkZWZpbmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgYC5vYCBvciBvYmplY3QgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIHNvdXJjZS4KCk9uY2UgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgTWFrZWZpbGUsIHRoZSBuZXh0IHRoaW5nIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gaXMgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBrbm93IHRoYXQgaW4gdGhlIGtlcm5lbCwgbWFueSBmZWF0dXJlcyBhbmQgY29tcG9uZW50cyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBjb21waWxhdGlvbiBvZiBgc2ttc2cuY2AuIFRoaXMgY291bGQgYmUgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBhIHNwZWNpZmljIG9wdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgaW5kaXJlY3QgcmVsYXRpb25zaGlwIHRocm91Z2ggc29tZSBvdGhlciBtb2R1bGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfU0tNU0dgLCBvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBjb250cm9sIGZlYXR1cmVzIHdoaWNoIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuIEkmIzM5O2xsIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyBvcHRpb25zLCBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhbmQgbXkgZXhwZWN0ZWQgbGluZSBvZiB0aGlua2luZzoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBSZWRpcmVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgS2NvbmZpZywgdG8gc2VlIGlmIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBCUEYgc29ja2V0IHJlZGlyZWN0aW9uIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGJ1aWxkIHN5c3RlbSBldmVuICphbGxvd3MqIG1lIHRvIGJ1aWxkIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cy4KCkJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgb2JqZWN0IGZpbGUgbmFtZXMuIEkgc3VzcGVjdCBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBjYWxsZWQgYHNvY2tfbWFwLm9gLCBvciBhIHNpbWlsYXIgbmFtZSByZWxhdGVkIHRvIHNvY2tldCBtYXBzIG9yIEJQRiByZWRpcmVjdGlvbi4gVGhlIGtlcm5lbCBvZnRlbiB1c2VzIHNwZWNpZmljIG1vZHVsZSBuYW1lcyBvciBvYmplY3QgZmlsZXMgdG8gcmVwcmVzZW50IHRoZXNlIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBJZiBJIGNhbiBmaW5kIGl0LCBJIHdpbGwgYmUgYWJsZSB0byBjaGVjayB0byBlbnN1cmUgdGhlIG1vZHVsZSBpcyBsb2FkaW5nIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBwaWVjZXMgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBpdOKAmXMgd2hlcmUgQlBGIHByb2dyYW1zIGNhbiBpbnRlcmNlcHQgYW5kIG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgYXQgdGhlIHNvY2tldCBsZXZlbC4gQnkgdW5kZXJzdGFuZGluZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBkaWFnbm9zZSBvciBhbmFseXplIHRoZSBuZXR3b3JrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU09DS19NU0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTI2LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHR0Y3BfdHNvcnRlZF9hbmNob3I7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjkyNzojaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MjgtXHRcdHVuc2lnbmVkIGxvbmdcdFx0X3NrX3JlZGlyO1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD01NTU9c3RhdGljIGlubGluZSBzc2l6ZV90IHNrX21zZ19maXJzdF9sZW4oc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC01NzItXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NTczOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc0LVxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD02MTk9c3RhdGljIGlubGluZSB2b2lkIHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjIyLX1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo2MjM6I2VuZGlmIC8qIENPTkZJR19ORVRfU09DS19NU0cgKi9cbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MjQtI2VuZGlmIC8qIF9MSU5VWF9TS01TR19IICovXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9MjgyOT12b2lkIHRjcF91cGRhdGVfdWxwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHByb3RvICpwLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MzUtXG5pbmNsdWRlL25ldC90Y3AuaDoyODM2OiNpZmRlZiBDT05GSUdfTkVUX1NPQ0tfTVNHXG5pbmNsdWRlL25ldC90Y3AuaC0yODM3LXN0cnVjdCBza19tc2c7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjg1OD1pbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1OS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmg6Mjg2MDojZW5kaWYgLyogQ09ORklHX05FVF9TT0NLX01TRyAqL1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg2MS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjI6I2lmICFkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgfHwgIWRlZmluZWQoQ09ORklHX05FVF9TT0NLX01TRylcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NjMtc3RhdGljIGlubGluZSB2b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cdHNlbGVjdCBCSU5BUllfUFJJTlRGXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4tLVxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy00ODItXHRoZWxwXG5uZXQvS2NvbmZpZzo0ODM6XHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxubmV0L0tjb25maWctNDg0LVx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTMtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjYvS2NvbmZpZzo5NDpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWctOTUtXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcbi0tXG5uZXQvdGxzL0tjb25maWctMTAtXHRzZWxlY3QgQ1JZUFRPX0dDTVxubmV0L3Rscy9LY29uZmlnOjExOlx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L3Rscy9LY29uZmlnLTEyLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIGFuZCBTeXN0ZW0gQ2FsbCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYEJQRl9TVFJFQU1fUEFSU0VSYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGhvdyBgTkVUX1NPQ0tfTVNHYCBhbmQgYHNvY2tfbWFwYCBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgb3JjaGVzdHJhdGVkLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYG5ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2MS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRcdGJvb2xcbiAzNTY6XHRcdHByb21wdCBcJiMzNDtFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gU1lTRlNcbiAzNTg6XHRcdHNlbGVjdCBEUUxcbiAzNTk6XHRcdGRlZmF1bHQgeVxuIDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4gMzc1Olx0XHRkZWZhdWx0IHlcbiAzNzY6XHRcdGhlbHBcbiAzNzc6XHRcdCAgVGhlIG5ldHdvcmsgc3RhY2sgaGFzIHRvIGRyb3AgcGFja2V0cyB3aGVuIGEgcmVjZWl2ZSBwcm9jZXNzaW5nIENQVSYjMzk7c1xuIDM3ODpcdFx0ICBiYWNrbG9nIHJlYWNoZXMgbmV0ZGV2X21heF9iYWNrbG9nLiBJZiBhIGZldyBvdXQgb2YgbWFueSBhY3RpdmUgZmxvd3NcbiAzNzk6XHRcdCAgZ2VuZXJhdGUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgbG9hZCwgZHJvcCB0aGVpciB0cmFmZmljIGVhcmxpZXIgdG9cbiAzODA6XHRcdCAgbWFpbnRhaW4gY2FwYWNpdHkgZm9yIHRoZSBvdGhlciBmbG93cy4gVGhpcyBmZWF0dXJlIHByb3ZpZGVzIHNlcnZlcnNcbiAzODE6XHRcdCAgd2l0aCBtYW55IGNsaWVudHMgc29tZSBwcm90ZWN0aW9uIGFnYWluc3QgRG9TIGJ5IGEgc2luZ2xlIChzcG9vZmVkKVxuIDM4MjpcdFx0ICBmbG93IHRoYXQgZ3JlYXRseSBleGNlZWRzIGF2ZXJhZ2Ugd29ya2xvYWQuXG4gMzgzOlx0XG4gMzg0Olx0bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbiAzODU6XHRcbiAzODY6XHRjb25maWcgTkVUX1BLVEdFTlxuIDM4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiAzODg6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDM4OTpcdFx0aGVscFxuIDM5MDpcdFx0ICBUaGlzIG1vZHVsZSB3aWxsIGluamVjdCBwcmVjb25maWd1cmVkIHBhY2tldHMsIGF0IGEgY29uZmlndXJhYmxlXG4gMzkxOlx0XHQgIHJhdGUsIG91dCBvZiBhIGdpdmVuIGludGVyZmFjZS4gIEl0IGlzIHVzZWQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlXG4gMzkyOlx0XHQgIHN0cmVzcyB0ZXN0aW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gIElmIHlvdSBkb24mIzM5O3QgdW5kZXJzdGFuZFxuIDM5MzpcdFx0ICB3aGF0IHdhcyBqdXN0IHNhaWQsIHlvdSBkb24mIzM5O3QgbmVlZCBpdDogc2F5IE4uXG4gMzk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBGaXJzdCwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhvc2UgdHdvIGtleSBmdW5jdGlvbnMgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYDogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgbG9naWMgdGhlc2UgYXJlIGltcGxlbWVudGluZyBhbmQgd2hhdCB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZWlyIHNwZWNpZmljIHJvbGVzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgcGF0Y2guIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHdvcmsgbXkgd2F5IG91dHdhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0fVxuIDk1NjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG4gOTU5Olx0e1xuIDk2MDpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcbiA5NjE6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbiA5NjI6XHRcbiA5NjM6XHRcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuIDk2NDpcdFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XG4gOTY1Olx0XHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbiYjMzk7dCBzZXQgYSByZWRpcmVjdCBpbnRlcmZhY2UuXG4gOTY2Olx0XHQgKi9cbiA5Njc6XHRcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XG4gOTY4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Njk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTcwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk3MTpcdFx0fVxuIDk3MjpcdFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XG4gOTczOlx0XHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxuIDk3NDpcdFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbiYjMzk7dCBzZW5kIGEgcGFja2V0IG9uXG4gOTc1Olx0XHQgKiBhIHNvY2tldCB0aGF0IGlzIGluIHRoaXMgc3RhdGUgc28gd2UgZHJvcCB0aGUgc2tiLlxuIDk3NjpcdFx0ICovXG4gOTc3Olx0XHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xuIDk3ODpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTc5Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4MDpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODE6XHRcdH1cbiA5ODI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4MzpcdFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuIDk4NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4NTpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTg2Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4NzpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuIDk5MTpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZXdvcmssIDApO1xuIDk5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5OTM6XHRcdHJldHVybiAwO1xuIDk5NDpcdH1cbiA5OTU6XHRcbiA5OTY6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTc6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4gOTk4Olx0e1xuIDk5OTpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuMTAwMDpcdFx0aW50IGVyciA9IDA7XG4xMDAxOlx0XHR1MzIgbGVuLCBvZmY7XG4xMDAyOlx0XG4xMDAzOlx0XHRzd2l0Y2ggKHZlcmRpY3QpIHtcbjEwMDQ6XHRcdGNhc2UgX19TS19QQVNTOlxuMTAwNTpcdFx0XHRlcnIgPSAtRUlPO1xuMTAwNjpcdFx0XHRza19vdGhlciA9IHBzb2NrLVx1MDAzZXNrO1xuMTAwNzpcdFx0XHRpZiAoc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpIHx8XG4xMDA4Olx0XHRcdCAgICAhc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4xMDA5Olx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwMTA6XHRcbjEwMTE6XHRcdFx0c2tiX2JwZl9zZXRfaW5ncmVzcyhza2IpO1xuMTAxMjpcdFxuMTAxMzpcdFx0XHQvKiBJZiB0aGUgcXVldWUgaXMgZW1wdHkgdGhlbiB3ZSBjYW4gc3VibWl0IGRpcmVjdGx5XG4xMDE0Olx0XHRcdCAqIGludG8gdGhlIG1zZyBxdWV1ZS4gSWYgaXRzIG5vdCBlbXB0eSB3ZSBoYXZlIHRvXG4xMDE1Olx0XHRcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcbjEwMTY6XHRcdFx0ICogaWYgc2tfcHNvY2tfc2tiX2luZ3Jlc3MgZXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieVxuMTAxNzpcdFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbjEwMTg6XHRcdFx0ICovXG4xMDE5Olx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4xMDIwOlx0XHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbjEwMjE6XHRcdFx0XHRvZmYgPSAwO1xuMTAyMjpcdFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG4xMDIzOlx0XHRcdFx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XG4xMDI0Olx0XG4xMDI1Olx0XHRcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuMTAyNjpcdFx0XHRcdFx0bGVuID0gc3RtLVx1MDAzZWZ1bGxfbGVuO1xuMTAyNzpcdFx0XHRcdH1cbjEwMjg6XHRcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XG4xMDI5Olx0XHRcdH1cbjEwMzA6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTAzMTpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzMjpcdFx0XHRcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuMTAzMzpcdFx0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XG4xMDM0Olx0XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHNvY2stXHUwMDNld29yaywgMCk7XG4xMDM1Olx0XHRcdFx0XHRlcnIgPSAwO1xuMTAzNjpcdFx0XHRcdH1cbjEwMzc6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzODpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDM5Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTA0MDpcdFx0XHR9XG4xMDQxOlx0XHRcdGJyZWFrO1xuMTA0MjpcdFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XG4xMDQzOlx0XHRcdHN0cnVjdCBzb2NrICpkc3QgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4xMDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgUmVkaXJlY3Rpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhY2tldCByZWRpcmVjdGlvbiBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBkZXN0aW5hdGlvbiAoYGRzdGApIGlzIG9yIGlzbiYjMzk7dCB0aGUgc2FtZSBhcyB0aGUgcHJvdG9jb2wgc29ja2V0IChgcHNvY2stJmd0O3NrYCkuIFRoZSBrZXkgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzLCB3aHkgaXMgYHRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGNvbnRleHQ/IFRoaXMgaXMgd2hlcmUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBUQ1Agc3RhY2sgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIHBhY2tldCBzb2NrZXRzIGNvbWUgdG8gYSBoZWFkLgoKSXQgYXBwZWFycyB0aGF0IHdoZW4gYGRzdGAgYW5kIGBwc29jay0mZ3Q7c2tgIGFyZSBkaWZmZXJlbnQsIGB0Y3BfZWF0X3NrYmAgZ2V0cyBpbnZva2VkIG9uIGBwc29jay0mZ3Q7c2tgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdo4oCUdGhlIHBhY2tldCYjMzk7cyBiZWluZyBjb25zdW1lZCBieSB0aGUgaW50ZW5kZWQgc29ja2V0LiBIb3dldmVyLCB3aGVuIGBkc3RgICppcyogdGhlIHNhbWUgYXMgYHBzb2NrLSZndDtza2AsIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBub3QgaW1tZWRpYXRlbHkgY2FsbGluZyBgdGNwX2VhdF9za2JgLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJvdXRpbmcgYW5kIHByb2Nlc3NpbmcgcGF0aHMsIHBvaW50cyB0b3dhcmQgZWl0aGVyIGBza19wc29ja19za2JfcmVkaXJlY3RgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgaGFuZGxpbmcgdGhlIHJlZGlyZWN0IGluIHRoYXQgY2FzZS4gSSYjMzk7bSBzdXNwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIFNLQiBpbiB0aGUgYGluZ3Jlc3Nfc2tiYCBxdWV1ZSwgcG90ZW50aWFsbHkgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCgpUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCBgdGNwX2VhdF9za2JgIGZ1bmN0aW9uIHRvIHNlZSBleGFjdGx5IHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lYXRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4NDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTE6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1NC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVx0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2Olx0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDU1LVx0XHRzb2NrX2Ryb3AocHNvY2stXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTItXHRcdGxlbiA9IDA7XG5uZXQvY29yZS9za21zZy5jOjEyMTM6XHRcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVx0XHRzb2NrX2Ryb3Aoc2ssIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGB0Y3BfZWF0X3NrYmAgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IGlmIEkgd2VyZSBkaWdnaW5nIGludG8gaXQ6CgoqKkRpdmluZyBpbnRvIGB0Y3BfZWF0X3NrYmAgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkmIzM5O20gaGl0dGluZyBgdGNwX2VhdF9za2JgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIEJQRiBwcm9ncmFtIGdldHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgYSBUQ1AgcGFja2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgU0tCLCB3aGVyZSB0aGUgZGF0YSBhY3R1YWxseSBlbmRzIHVwLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuCgpGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdy4gSG93IGlzIHRoZSBTS0IgbW9kaWZpZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGFueSBTS0JzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjbG9uaW5nLCBzaGFyaW5nLCBvciBkaXJlY3QgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucyBpbnNpZGUgdGhlIGtlcm5lbC4KCk5leHQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayB0cmFmZmljIGhlcmUsIHNvIGNvbmN1cnJlbnQgYWNjZXNzIGlzIGEgZ2l2ZW4uIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHM/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGF0PyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhdG9taWMgb3BlcmF0aW9ucyBvciBtdXRleGVzIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4KCkFuZCBmaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIEJQRiBpbnRlcmFjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB0byBoYW5kIGRhdGEgb2ZmIHRvIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBvbmU/IEhvdyBkb2VzIHRoZSBCUEYgcHJvZ3JhbSBnZXQgdGhlIGRhdGE/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBwcm9jZXNzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBkYXRhPyBJJiMzOTtsbCBhc3Nlc3MgdGhlIGVmZmljaWVuY3kgb2YgaG93IHRoZSBCUEYgcHJvZ3JhbSYjMzk7cyBhY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIFRDUCBzdGFjayYjMzk7cyBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIG92ZXJoZWFkIHRoaXMgc3RlcCBhZGRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNsZWFuIGludGVncmF0aW9uIHBvaW50IG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBwYWNrZXQgaXMgZWl0aGVyIGRyb3BwZWQgb3IgcmVkaXJlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91dGlsX21hY3Jvcy5oXHUwMDNlXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGxzLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2Nhc20vaW9jdGxzLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMTY6XHR7XG4gIDE3Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcbiAgMTg6XHRcdGludCBjb3BpZWQ7XG4gIDE5Olx0XG4gIDIwOlx0XHRpZiAoIXNrYiB8fCAhc2tiLVx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcbiAgMjE6XHRcdFx0cmV0dXJuO1xuICAyMjpcdFxuICAyMzpcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXG4gIDI0Olx0XHRcdHJldHVybjtcbiAgMjU6XHRcbiAgMjY6XHRcdHRjcCA9IHRjcF9zayhzayk7XG4gIDI3Olx0XHRjb3BpZWQgPSB0Y3AtXHUwMDNlY29waWVkX3NlcSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICAyODpcdFx0V1JJVEVfT05DRSh0Y3AtXHUwMDNlY29waWVkX3NlcSwgY29waWVkKTtcbiAgMjk6XHRcdHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTtcbiAgMzA6XHRcdF9fdGNwX2NsZWFudXBfcmJ1Zihzaywgc2tiLVx1MDAzZWxlbik7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiAgMzQ6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcylcbiAgMzU6XHR7XG4gIDM2Olx0XHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XG4gIDM3Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcbiAgMzg6XHRcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xuICAzOTpcdFx0c3RydWN0IHNrX21zZyAqdG1wO1xuICA0MDpcdFx0aW50IGksIHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQlBGIFNvY2ttYXAgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvcmUgQlBGIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCDigJMgc3BlY2lmaWNhbGx5IEJQRiBzb2NrbWFwIGFuZCByZWRpcmVjdGlvbiB1c2luZyBza21zZy5jLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFRoZXNlIGFyZSBzb2Z0d2FyZS1kZWZpbmVkIG5ldHdvcmtpbmcgZmVhdHVyZXMsIHBlcmZlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgc29ja2V0KClgLCBgYnBmKClgLCBgc2V0c29ja29wdCgpYCwgYHNlbmRtc2coKWAuIE5vIHNwZWNpYWwgaGFyZHdhcmUgaXMgcmVxdWlyZWQgaGVyZS4gVGhhdCBtYWtlcyBpdCBhIHNpZ25pZmljYW50IHRhcmdldC4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBCUEYgc29ja2V0IHZlcmRpY3QgcmVkaXJlY3QgbG9naWMgaW4gc2ttc2csIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGlzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBzcGVjaWZpY3MuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGBuZXQvY29yZS9za21zZy5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgdXMgYSBnb29kIGdyYXNwIG9uIHRoZSBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTI1LVxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cdFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmMtODYtXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcbm5ldC9jb3JlL3NrbXNnLmMtODgtXHRcdCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XG5uZXQvY29yZS9za21zZy5jLTEzNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTM4OnZvaWQgc2tfbXNnX3JldHVybl96ZXJvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTEzOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xNjA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JldHVybl96ZXJvKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTE2My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTIxMS1cbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XG5uZXQvY29yZS9za21zZy5jLTIxNy1cbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNTEtXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxubmV0L2NvcmUvc2ttc2cuYzoyNTg6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsX25vY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXHRcdFx0XHQgIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTI2My1cbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG5uZXQvY29yZS9za21zZy5jLTI2NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xubmV0L2NvcmUvc2ttc2cuYy0zMTEtXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVx0XHRcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy0zNjgtXG5uZXQvY29yZS9za21zZy5jOjM2OTppbnQgc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvc2ttc2cuYy03NDktXG5uZXQvY29yZS9za21zZy5jOjc1MDpzdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbm5ldC9jb3JlL3NrbXNnLmMtNzUxLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTgwMz1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19pbml0KTtcbm5ldC9jb3JlL3NrbXNnLmMtODA0LVxubmV0L2NvcmUvc2ttc2cuYzo4MDU6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTgwNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04NTMtXG5uZXQvY29yZS9za21zZy5jOjg1NDp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtODU1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTg2ND1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTg4OC1cbm5ldC9jb3JlL3NrbXNnLmM6ODg5OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg5MC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDc9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTkxOS1cbm5ldC9jb3JlL3NrbXNnLmM6OTIwOmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTkyMS1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE0Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE0OC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTY3LVxubmV0L2NvcmUvc2ttc2cuYzoxMTY4OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNjkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE3Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTE3ODp2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNzkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIzND1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI2MC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI2MTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjYyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzAtXG5uZXQvY29yZS9za21zZy5jOjEyNzE6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGFuZCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYXMgZm91bmQgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGxpbmVzIDExMDAtMTI3NS4KCioqRGlzc2VjdGluZyBQU09DSyBWZXJkaWN0IGFuZCBTdHJpbmcgUGFyc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0IHNvY2tldHMgKHBzb2NrcykgaGFuZGxlIHZlcmRpY3QgcmVjZXB0aW9uIGFuZCBzdHJpbmctYmFzZWQgZGF0YSByZWFkcywgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyBpbiBwYWNrZXQgcHJvY2Vzc2luZy4gTG9va2luZyBhdCB0aGVzZSBsaW5lcywgSSBzZWUgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgbGlrZWx5IGhhbmRsZXMgcmVjZWl2aW5nIHZlcmRpY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgc29ja2V0LCBwcm9iYWJseSBhZnRlciBzb21lIHNvcnQgb2YgZmlsdGVyaW5nIG9yIHByb2Nlc3NpbmcuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgZmF0ZSBvZiB0aGUgcGFja2V0IOKAkyBkcm9wLCBxdWV1ZSwgb3IgcGVyaGFwcyBtb2RpZmljYXRpb24uIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBvaW50LCBhbmQgSSYjMzk7ZCBiZXQgaXQgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc29ja2V0JiMzOTtzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBtYWtlIHRoZXNlIGRlY2lzaW9ucyBlZmZlY3RpdmUuCgpUaGVuIHRoZXJlJiMzOTtzIGBza19wc29ja19zdHJwX3JlYWRgLiBUaGUgbmFtZSBzdWdnZXN0cyBhIHN0cmluZy1iYXNlZCBwYXJzaW5nIGZ1bmN0aW9uLCB1c2VkIHRvIGV4dHJhY3QgcmVsZXZhbnQgZGF0YSBmcm9tIGEgcmVjZWl2ZWQgcGFja2V0LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBtaWdodCBtYW5hZ2UgdGhpbmdzIGxpa2Ugc3RyaW5nIHRlcm1pbmF0aW9uIChudWxsIGNoYXJhY3RlcnM/KSwgaGFuZGxlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgaW1wbGVtZW50IHZhcmlvdXMgY2hlY2tzIGZvciB0aGUgZGF0YSB0byBhdm9pZCBleHBsb2l0YWJsZSBzaXR1YXRpb25zLiBJdOKAmXMgYWxzbyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgd29ya3MgaW4gdGFuZGVtIHdpdGggdGhlIHZlcmRpY3Q7IHRoZSByZXR1cm5lZCBzdHJpbmcsIG9yIHBhcnQgdGhlcmVvZiwgY291bGQgZGljdGF0ZSB0aGUgdmVyZGljdC4gSSYjMzk7ZCBiZSBsb29raW5nIGNsb3NlbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIGJ1ZmZlciByZXNvdXJjZXMuIEFsc28sIGVycm9yIGhhbmRsaW5nIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB1bmV4cGVjdGVkIGRhdGEuIEFyZSB0aGVyZSBhbnkgYm91bmRhcnkgY2hlY2tzLCB0aW1lb3V0cywgb3Igc2FmZWd1YXJkcyBhZ2FpbnN0IG1hbGljaW91cyBpbnB1dD8gQW55IG9mIHRoZXNlIGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBkZXRhaWxzIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSXMgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgdHJpZ2dlcmVkIGZpcnN0LCB0aGUgdmVyZGljdCB0aGVuIGNhbGxzIGBza19wc29ja19zdHJwX3JlYWRgLCBvciBpcyB0aGUgaW50ZXJhY3Rpb24gbW9yZSBpbnRlcnR3aW5lZD8gSG93IGFyZSB0aGUgcGFyc2VkIHN0cmluZ3MgdXNlZCBpbiB0aGUgdmVyZGljdCBkZWNpc2lvbnM/IFRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGluIHRob3NlIGxpbmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2ZXJkaWN0LCB0aGUgcGFyc2VkIHN0cmluZyBkYXRhLCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBwYWNrZXQgc29ja2V0IGlzIGVzc2VudGlhbCBmb3Igb3B0aW1pemluZyB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xuMTEwMTpcdFx0XHRza2ItXHUwMDNlc2sgPSBOVUxMO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFx0c2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xuMTEwNDpcdG91dDpcbjExMDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTEwNjpcdH1cbjExMDc6XHRcbjExMDg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG4xMTA5Olx0e1xuMTExMDpcdFx0cmV0dXJuIGVycjtcbjExMTE6XHR9XG4xMTEyOlx0XG4xMTEzOlx0c3RhdGljIGludCBza19wc29ja19zdHJwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4xMTE0Olx0e1xuMTExNTpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29jayA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3Qgc2tfcHNvY2ssIHN0cnApO1xuMTExNjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTExNzpcdFx0aW50IHJldCA9IHNrYi1cdTAwM2VsZW47XG4xMTE4Olx0XG4xMTE5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMTIwOlx0XHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVx1MDAzZXByb2dzLnN0cmVhbV9wYXJzZXIpO1xuMTEyMTpcdFx0aWYgKGxpa2VseShwcm9nKSkge1xuMTEyMjpcdFx0XHRza2ItXHUwMDNlc2sgPSBwc29jay1cdTAwM2VzaztcbjExMjM6XHRcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbjExMjQ6XHRcdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbjExMjU6XHRcdH1cbjExMjY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTEyNzpcdFx0cmV0dXJuIHJldDtcbjExMjg6XHR9XG4xMTI5Olx0XG4xMTMwOlx0LyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cbjExMzE6XHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuMTEzMjpcdHtcbjExMzM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMTM0Olx0XG4xMTM1Olx0XHR0cmFjZV9za19kYXRhX3JlYWR5KHNrKTtcbjExMzY6XHRcbjExMzc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExMzg6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTEzOTpcdFx0aWYgKGxpa2VseShwc29jaykpIHtcbjExNDA6XHRcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuMTE0MTpcdFx0XHRzdHJwX2RhdGFfcmVhZHkoXHUwMDI2cHNvY2stXHUwMDNlc3RycCk7XG4xMTQyOlx0XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuMTE0MzpcdFx0fVxuMTE0NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMTQ1Olx0fVxuMTE0NjpcdFxuMTE0NzpcdGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuMTE0ODpcdHtcbjExNDk6XHRcdGludCByZXQ7XG4xMTUwOlx0XG4xMTUxOlx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xuMTE1MjpcdFx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG4xMTUzOlx0XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbjExNTQ6XHRcdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuMTE1NTpcdFx0fTtcbjExNTY6XHRcbjExNTc6XHRcdHJldCA9IHN0cnBfaW5pdChcdTAwMjZwc29jay1cdTAwM2VzdHJwLCBzaywgXHUwMDI2Y2IpO1xuMTE1ODpcdFx0aWYgKCFyZXQpXG4xMTU5Olx0XHRcdHNrX3Bzb2NrX3NldF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfUlhfU1RSUF9FTkFCTEVEKTtcbjExNjA6XHRcbjExNjE6XHRcdGlmIChza19pc190Y3Aoc2spKSB7XG4xMTYyOlx0XHRcdHBzb2NrLVx1MDAzZXN0cnAuY2IucmVhZF9zb2NrID0gdGNwX2JwZl9zdHJwX3JlYWRfc29jaztcbjExNjM6XHRcdFx0cHNvY2stXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXHUwMDNlY29waWVkX3NlcTtcbjExNjQ6XHRcdH1cbjExNjU6XHRcdHJldHVybiByZXQ7XG4xMTY2Olx0fVxuMTE2NzpcdFxuMTE2ODpcdHZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4xMTY5Olx0e1xuMTE3MDpcdFx0aWYgKHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMTcxOlx0XHRcdHJldHVybjtcbjExNzI6XHRcbjExNzM6XHRcdHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuMTE3NDpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkpO1xuMTE3NTpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xuMTE3NjpcdH1cbjExNzc6XHRcbjExNzg6XHR2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4xMTc5Olx0e1xuMTE4MDpcdFx0cHNvY2tfc2V0X3Byb2coXHUwMDI2cHNvY2stXHUwMDNlcHJvZ3Muc3RyZWFtX3BhcnNlciwgTlVMTCk7XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAoIXBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMTgzOlx0XHRcdHJldHVybjtcbjExODQ6XHRcbjExODU6XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XG4xMTg2Olx0XHRXUklURV9PTkNFKHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHksIE5VTEwpO1xuMTE4NzpcdFx0c3RycF9zdG9wKFx1MDAyNnBzb2NrLVx1MDAzZXN0cnApO1xuMTE4ODpcdH1cbjExODk6XHRcbjExOTA6XHRzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjExOTE6XHR7XG4xMTkyOlx0XHQvKiBQYXJzZXIgaGFzIGJlZW4gc3RvcHBlZCAqL1xuMTE5MzpcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1JYX1NUUlBfRU5BQkxFRCkpXG4xMTk0Olx0XHRcdHN0cnBfZG9uZShcdTAwMjZwc29jay1cdTAwM2VzdHJwKTtcbjExOTU6XHR9XG4xMTk2Olx0I2Vsc2VcbjExOTc6XHRzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjExOTg6XHR7XG4xMTk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSYjMzk7bSAmIzM0O3RoaW5raW5nJiMzNDsgYmFzZWQgb24gdGhhdCBwcm9tcHQsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB3aGF0IGNvbWVzIGFmdGVyIGxpbmUgMTIwMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMuIEl0JiMzOTtzIG5vdCBhYm91dCBwYXNzaXZlbHkgcmVhZGluZzsgaXQmIzM5O3MgYWJvdXQgYWN0aXZlbHkgcHJvY2Vzc2luZyBhbmQgaW50ZXJwcmV0aW5nIHRoZSBkYXRhIHRoYXQgbGllcyBiZXlvbmQgdGhpcyBwb2ludCwgYW5kIGhvdyBpdCBpbmZvcm1zIG15IGV4cGVydGlzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJlbGV2YW5jZSB3aXRoaW4gdGhlIGxhcmdlciBzY29wZSBvZiB0aGUgc3ViamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xuMTIwMTpcdFxuMTIwMjpcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyMDM6XHR7XG4xMjA0Olx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTIwNTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTIwNjpcdFx0aW50IHJldCA9IF9fU0tfRFJPUDtcbjEyMDc6XHRcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTIwODpcdFxuMTIwOTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTIxMDpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMjExOlx0XHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xuMTIxMjpcdFx0XHRsZW4gPSAwO1xuMTIxMzpcdFx0XHR0Y3BfZWF0X3NrYihzaywgc2tiKTtcbjEyMTQ6XHRcdFx0c29ja19kcm9wKHNrLCBza2IpO1xuMTIxNTpcdFx0XHRnb3RvIG91dDtcbjEyMTY6XHRcdH1cbjEyMTc6XHRcdHByb2cgPSBSRUFEX09OQ0UocHNvY2stXHUwMDNlcHJvZ3Muc3RyZWFtX3ZlcmRpY3QpO1xuMTIxODpcdFx0aWYgKCFwcm9nKVxuMTIxOTpcdFx0XHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVx1MDAzZXByb2dzLnNrYl92ZXJkaWN0KTtcbjEyMjA6XHRcdGlmIChsaWtlbHkocHJvZykpIHtcbjEyMjE6XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4xMjIyOlx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbjEyMjM6XHRcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbjEyMjQ6XHRcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xuMTIyNTpcdFx0fVxuMTIyNjpcdFx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xuMTIyNzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyMjg6XHRcdFx0bGVuID0gcmV0O1xuMTIyOTpcdG91dDpcbjEyMzA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTIzMTpcdFx0cmV0dXJuIGxlbjtcbjEyMzI6XHR9XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbjEyMzU6XHR7XG4xMjM2Olx0XHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBOVUxMO1xuMTIzNzpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbjEyMzg6XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4xMjM5Olx0XHRpbnQgY29waWVkO1xuMTI0MDpcdFxuMTI0MTpcdFx0dHJhY2Vfc2tfZGF0YV9yZWFkeShzayk7XG4xMjQyOlx0XG4xMjQzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMjQ0Olx0XHRzb2NrID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3NvY2tldCk7XG4xMjQ1Olx0XHRpZiAobGlrZWx5KHNvY2spKVxuMTI0NjpcdFx0XHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuMTI0NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMjQ4Olx0XHRpZiAoIW9wcyB8fCAhb3BzLVx1MDAzZXJlYWRfc2tiKVxuMTI0OTpcdFx0XHRyZXR1cm47XG4xMjUwOlx0XG4xMjUxOlx0XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG4xMjUyOlx0XHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuMTI1MzpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMjU0Olx0XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTI1NTpcdFx0XHRpZiAocHNvY2spXG4xMjU2Olx0XHRcdFx0c2tfcHNvY2tfZGF0YV9yZWFkeShzaywgcHNvY2spO1xuMTI1NzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEyNTg6XHRcdH1cbjEyNTk6XHR9XG4xMjYwOlx0XG4xMjYxOlx0dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjEyNjI6XHR7XG4xMjYzOlx0XHRpZiAocHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSlcbjEyNjQ6XHRcdFx0cmV0dXJuO1xuMTI2NTpcdFxuMTI2NjpcdFx0cHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4xMjY3Olx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XG4xMjY4Olx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XG4xMjY5Olx0fVxuMTI3MDpcdFxuMTI3MTpcdHZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjEyNzI6XHR7XG4xMjczOlx0XHRwc29ja19zZXRfcHJvZyhcdTAwMjZwc29jay1cdTAwM2Vwcm9ncy5zdHJlYW1fdmVyZGljdCwgTlVMTCk7XG4xMjc0Olx0XHRwc29ja19zZXRfcHJvZyhcdTAwMjZwc29jay1cdTAwM2Vwcm9ncy5za2JfdmVyZGljdCwgTlVMTCk7XG4xMjc1Olx0XG4xMjc2Olx0XHRpZiAoIXBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMjc3Olx0XHRcdHJldHVybjtcbjEyNzg6XHRcbjEyNzk6XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjI5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcm91bmQgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgbmV0L2NvcmUvc2ttc2cuY2AuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IEkgc2hvdWxkIGFsc28gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzZWFyY2ggZm9yIHdoZXJlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyBpdCBpcyB1c2VkLiBJJiMzOTtsbCBhbHNvIGJlIHN1cmUgdG8gY2hlY2sgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRvIHVuZGVyc3RhbmQgdGhlIGdyZWF0ZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHVzZXMgb2YgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFuZCBgc2tfcHNvY2tfaW5pdGAsIGJlY2F1c2UgdGhvc2UgYXJlIGxpa2VseSBpbnRlZ3JhbCB0byB0aGUgd29ya2Zsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3R8c2tfcHNvY2tfaW5pdF9zdHJwfHNvY2tfbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTA1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTQ9YW4gb3V0ZXIgbWFwIGNvbnRhaW5zIGluc3RhbmNlcyBvZiBhIHNpbmdsZSB0eXBlIG9mIGlubmVyIG1hcCwgZm9yIGV4YW1wbGVcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdDoxNTpgYGFycmF5X29mX21hcHMtXHUwMDNlc29ja19tYXBgYC5cbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xNi1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9MTE5PXNvY2tldCBlbnRyaWVzIG9mIHR5cGUgYGBzdHJ1Y3Qgc29jayAqYGAgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTIxLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjEyMjpicGZfc29ja19tYXBfdXBkYXRlKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0xMjMtXl5eXl5eXl5eXl5eXl5eXl5eXl5eXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyNS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDoxMjY6ICAgIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTI3LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0zNTQ9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBzb2NrbWFwLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjItXHRcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjM2MzpcdH0gc29ja19tYXBfcnggU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjQtXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0PTM3Nj1zb2NrbWFwIHRvIHJlZGlyZWN0IHRyYWZmaWMgdG8gYW5vdGhlciBzb2NrZXQgYmFzZWQgb24gdGhlIGxvY2FsIHBvcnQuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4Ni1cdFx0aWYgKGxwb3J0ID09IDEwMDAwKVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjM4NzpcdFx0XHRyZXR1cm4gYnBmX3NrX3JlZGlyZWN0X21hcChza2IsIFx1MDAyNnNvY2tfbWFwX3J4LCBpZHgsIDApO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4OC1cbi0tXG5NQUlOVEFJTkVSUz00OTcxPUY6XHRuZXQvY29yZS9za21zZy5jXG5NQUlOVEFJTkVSUzo0OTcyOkY6XHRuZXQvY29yZS9zb2NrX21hcC5jXG5NQUlOVEFJTkVSUy00OTczLUY6XHRuZXQvaXB2NC90Y3BfYnBmLmNcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00OT1zdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciB7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNTMtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1NDpzdHJ1Y3Qgc29ja19tYXBwaW5nIHtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTU1LVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTc1PXN0cnVjdCBzb2NrcGFzc19tYXBwaW5nIHtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04Ni1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjg3OnN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2JhY2tfY29ubl9ldmVudChpbnQgaXJxLCB2b2lkICpzb2NrX21hcCk7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04OC1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlX2FjdGl2ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MDpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05Mj1zdGF0aWMgYm9vbCBwdmNhbGxzX2Nvbm5fYmFja19yZWFkKHZvaWQgKm9wYXF1ZSlcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkzLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjk0Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilvcGFxdWU7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05NS1cdHN0cnVjdCBtc2doZHIgbXNnO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2Ny1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjE2ODpzdGF0aWMgYm9vbCBwdmNhbGxzX2Nvbm5fYmFja193cml0ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0xNjkte1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTIzMD1zdGF0aWMgdm9pZCBwdmNhbGxzX2JhY2tfaW93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTIzMy1cdFx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIsIHJlZ2lzdGVyX3dvcmspO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjM0Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gY29udGFpbmVyX29mKGlvd29ya2VyLCBzdHJ1Y3Qgc29ja19tYXBwaW5nLFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjM1LVx0XHRpb3dvcmtlcik7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9Mjg5PXN0YXRpYyB2b2lkIHB2Y2FsbHNfc2tfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzb2NrKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjkwLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjI5MTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXHUwMDNlc2tfdXNlcl9kYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjkyLVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTMwMD1zdGF0aWMgdm9pZCBwdmNhbGxzX3NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNvY2spXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDEte1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzAyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29jay1cdTAwM2Vza191c2VyX2RhdGE7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDMtXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjMxNjpzdGF0aWMgc3RydWN0IHNvY2tfbWFwcGluZyAqcHZjYWxsc19uZXdfYWN0aXZlX3NvY2tldChcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNy1cdFx0c3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzIzLVx0aW50IHJldDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjMyNDpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMyNS1cdHZvaWQgKnBhZ2U7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9MzkyPXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zOTctXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6Mzk4Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzk5LVx0c3RydWN0IHhlbl9wdmNhbGxzX3Jlc3BvbnNlICpyc3A7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9NDM2PXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX3JlbGVhc2VfYWN0aXZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy00MzctXHRcdFx0XHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo0Mzg6XHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDM5LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00Nzg9c3RhdGljIGludCBwdmNhbGxzX2JhY2tfcmVsZWFzZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQ4MS1cdHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDgyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLCAqbjtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQ4My1cdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTUxNj1zdGF0aWMgdm9pZCBfX3B2Y2FsbHNfYmFja19hY2NlcHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTUyMy1cdH07XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1MjQ6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01MjUtXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTg5MD1zdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2V2ZW50KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05MDgtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MDk6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfYmFja19jb25uX2V2ZW50KGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEwLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkxMTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2tfbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEyLVx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIgKmlvdztcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05OTc9c3RhdGljIGludCBiYWNrZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05OTktXHRzdHJ1Y3QgcHZjYWxsc19mZWRhdGEgKmZlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjEwMDA6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsICpuO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMTAwMS1cdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NT1zdGF0aWMgYXRvbWljX3QgcHZjYWxsc19yZWZjb3VudDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTYtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NTc6c3RydWN0IHNvY2tfbWFwcGluZyB7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTgtXHRib29sIGFjdGl2ZV9zb2NrZXQ7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTkzLVx0XHRcdHVpbnQzMl90IGluZmxpZ2h0X3JlcV9pZDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo5NDpcdFx0XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICphY2NlcHRfbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk1LVx0XHRcdHdhaXRfcXVldWVfaGVhZF90IGluZmxpZ2h0X2FjY2VwdF9yZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk5LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfZW50ZXJfc29jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMS17XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTAyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMy1cbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA3LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwODpcdG1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQ7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA5LVx0aWYgKG1hcCA9PSBOVUxMKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMTc9c3RhdGljIGlubGluZSB2b2lkIHB2Y2FsbHNfZXhpdF9zb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTE4LXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMTk6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIwLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEyMTpcdG1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQ7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIyLVx0YXRvbWljX2RlYyhcdTAwMjZtYXAtXHUwMDNlcmVmY291bnQpO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xNDA9c3RhdGljIGludCBwdmNhbGxzX2Zyb250X3dhaXRfcnNwKHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLCB1MzIgcmVxX2lkKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNDgtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTQ5OnN0YXRpYyBib29sIHB2Y2FsbHNfZnJvbnRfd3JpdGVfdG9kbyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTUwLXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY1LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjE2NjpzdGF0aWMgYm9vbCBwdmNhbGxzX2Zyb250X3JlYWRfdG9kbyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY3LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTgwPXN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2Zyb250X2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0yMjMtXHRcdGlmIChyc3AtXHUwMDNlY21kID09IFBWQ0FMTFNfUE9MTCkge1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjIyNDpcdFx0XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSAoc3RydWN0IHNvY2tfbWFwcGluZyAqKSh1aW50cHRyX3QpXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjI1LVx0XHRcdFx0XHRcdCAgIHJzcC1cdTAwM2V1LnBvbGwuaWQ7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Mi1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyNjM6c3RhdGljIHZvaWQgZnJlZV9hY3RpdmVfcmluZyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2NC1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0yNjU9c3RhdGljIHZvaWQgcHZjYWxsc19mcm9udF9kZXN0cm95X2FjdGl2ZShzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyNjY6XHRcdFx0XHRcdCBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjY3LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Mjg1PXN0YXRpYyB2b2lkIHB2Y2FsbHNfZnJvbnRfZnJlZV9tYXAoc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mjg2Olx0XHRcdFx0ICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI4Ny17XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5Mi1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTM6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfY29ubl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5NC17XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mjk1Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjk2LVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0zMDU9aW50IHB2Y2FsbHNfZnJvbnRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTMwNy1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjMwODpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEw7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA5LVx0c3RydWN0IHhlbl9wdmNhbGxzX3JlcXVlc3QgKnJlcTtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzQ2LVx0ICogc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQgaXMgbm90IHVzZWQgZm9yIGlwIHNvY2tldHM6IHJldXNlIHRoZVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjM0NzpcdCAqIGZpZWxkIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHNvY2tfbWFwcGluZ1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM0OC1cdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNvY2tldC4gVGhpcyB3YXksIHdlIGNhbiBlYXNpbHkgZ2V0IHRoZVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjM0OTpcdCAqIHN0cnVjdCBzb2NrX21hcHBpbmcgZnJvbSB0aGUgc3RydWN0IHNvY2tldC5cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zNTAtXHQgKi9cbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MzgyPUVYUE9SVF9TWU1CT0xfR1BMKHB2Y2FsbHNfZnJvbnRfc29ja2V0KTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zODMtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzg0OnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM4NS17XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM5My1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozOTQ6c3RhdGljIGludCBhbGxvY19hY3RpdmVfcmluZyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzk1LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDE5LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjQyMDpzdGF0aWMgaW50IGNyZWF0ZV9hY3RpdmUoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLCBldnRjaG5fcG9ydF90ICpldnRjaG4pXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDIxLXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9NDYxPWludCBwdmNhbGxzX2Zyb250X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy00NjQtXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo0NjU6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSBOVUxMO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTQ2Ni1cdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTU4ND1pbnQgcHZjYWxsc19mcm9udF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTg2LXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo1ODc6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTg4LVx0aW50IHNlbnQsIHRvdF9zZW50ID0gMDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Njc4PWludCBwdmNhbGxzX2Zyb250X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODEtXHRpbnQgcmV0O1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjY4MjpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODMtXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTcxNT1pbnQgcHZjYWxsc19mcm9udF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03MTctXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo3MTg6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSBOVUxMO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxOS1cdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTc3Mj1pbnQgcHZjYWxsc19mcm9udF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTc3NC1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjc3NTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03NzYtXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz04MjU9aW50IHB2Y2FsbHNfZnJvbnRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTgyOC1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjgyOTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4MzA6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAyID0gTlVMTDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy04MzEtXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz05Nzk9c3RhdGljIF9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbF9wYXNzaXZlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk4MC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk4MTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05ODItXHRcdFx0XHRcdCAgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDM2PXN0YXRpYyBfX3BvbGxfdCBwdmNhbGxzX2Zyb250X3BvbGxfYWN0aXZlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMzctXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMzg6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDM5LVx0XHRcdFx0XHQgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDU5PV9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2Mi1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwNjM6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2NC1cdF9fcG9sbF90IHJldDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTA4MD1pbnQgcHZjYWxsc19mcm9udF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODItXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDgzOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODQtXHRpbnQgcmVxX2lkLCBub3RpZnksIHJldDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTE3MD1zdGF0aWMgdm9pZCBwdmNhbGxzX2Zyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMTcyLVx0c3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGE7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTE3MzpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEwsICpuO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzQtXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNjUzPWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NTYtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTc6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaDozNjU4OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY1OTppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjA6aW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLVx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MjppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjMtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjQ6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2NTp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2Njp2b2lkIHNvY2tfbWFwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2Ny0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzczMD1zdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MzctI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9saW51eC9icGYuaDozNzM4OnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM5LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDMtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NDQ6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDUtXHRcdFx0XHQgICAgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0OS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MDpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MS1cdFx0XHRcdFx0ICAgdTY0IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1NS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1NjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1Ny1cdFx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc2MS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc2MjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzYzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4ODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xuaW5jbHVkZS9saW51eC9icGYuaDozODg1OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzg4Ni1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjMtQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDM3PXZvaWQgc2tfcHNvY2tfc3RvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDM5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDA6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0MS12b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NDI9dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDMtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDQ6c3RhdGljIGlubGluZSBpbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDUte1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NTM9c3RhdGljIGlubGluZSB2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ1Ny1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NTg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMTEzLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzExNDogKiBsb25nIGJwZl9zb2NrX21hcF91cGRhdGUoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMxMTUtICogXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU1LVx0Rk4oc2tfcmVkaXJlY3RfbWFwLCA1MiwgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MDU2Olx0Rk4oc29ja19tYXBfdXBkYXRlLCA1MywgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU3LVx0Rk4oeGRwX2FkanVzdF9tZXRhLCA1NCwgIyNjdHgpXHRcdFx0XFxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTA9c3RhdGljIGludCBicGZfbWFwX3VwZGF0ZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjYzLVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI2NDpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NS1cdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDU3OT1zdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MjI6XHRcdHJldCA9IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYyMy1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDY0OD1zdGF0aWMgaW50IGJwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjgxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2ODI6XHRcdHJldCA9IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGF0dHIsIHB0eXBlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2ODMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3MTg9c3RhdGljIGludCBicGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzY3LVx0Y2FzZSBCUEZfU0tfU0tCX1ZFUkRJQ1Q6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NzY4Olx0XHRyZXR1cm4gc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2OS1cdGNhc2UgQlBGX1RDWF9JTkdSRVNTOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg1Ny1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODU4Olx0XHRyZXQgPSBzb2NrX21hcF9saW5rX2NyZWF0ZShhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NTktXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MDIzPXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDk0LVx0XHRpZiAoZnVuY19pZCAhPSBCUEZfRlVOQ19za19yZWRpcmVjdF9tYXAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA5NTpcdFx0ICAgIGZ1bmNfaWQgIT0gQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwOTYtXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXAgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDUtXHRjYXNlIEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXA6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTIwNjpcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDctXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjktXG5uZXQvY29yZS9maWx0ZXIuYzo4ODMwOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MzEtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04ODM0PXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg0OC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX29wc19jYl9mbGFnc19zZXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODQ5Olx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XG5uZXQvY29yZS9maWx0ZXIuYzo4ODUwOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NTEtXHRjYXNlIEJQRl9GVU5DX3NvY2tfaGFzaF91cGRhdGU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE3MzM9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc1MC1cdFx0ICpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNzUxOlx0XHQgKiBPdGhlciBtYXBzIChlLmcuIHNvY2tfbWFwKSBkbyBub3QgcHJvdmlkZSB0aGlzIGd1YXJhbnRlZSBhbmRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzUyLVx0XHQgKiB0aGUgc2sgbWF5IG5ldmVyIGJlIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAgdG8gYmVnaW4gd2l0aC5cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3NS1lcnJvcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNzc2Olx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3Ny1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY4OC1cdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cbm5ldC9jb3JlL3NrbXNnLmM6Njg5Olx0ICogc29ja19tYXBfY2xvc2UoKSwgZW5zdXJpbmcgd2Ugd2FpdCBmb3IgYmFja2xvZyB0aHJlYWQgY29tcGxldGlvblxubmV0L2NvcmUvc2ttc2cuYy02OTAtXHQgKiBiZWZvcmUgc2tfc29ja2V0IGZyZWVkLiBJZiByZWZjbnQgaW5jcmVtZW50IGZhaWxzLCBpdCBpbmRpY2F0ZXNcbm5ldC9jb3JlL3NrbXNnLmM6NjkxOlx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cbm5ldC9jb3JlL3NrbXNnLmMtNjkyLVx0ICovXG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfZHJvcCk7XG5uZXQvY29yZS9za21zZy5jLTkwNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG5uZXQvY29yZS9za21zZy5jLTkwOC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTkzNi1cdG1zZy1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za21zZy5jOjkzNzpcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVx1MDAzZXNrX3JlZGlyKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTM4LVx0cHNvY2stXHUwMDNlYXBwbHlfYnl0ZXMgPSBtc2ctXHUwMDNlYXBwbHlfYnl0ZXM7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDc5PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA5OS1cdFx0c2tiX2JwZl9zZXRfc3RycGFyc2VyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjExMDA6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMS1cdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExMzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNDYtXG5uZXQvY29yZS9za21zZy5jOjExNDc6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjIzLVx0XHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMjI0Olx0XHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XG5uZXQvY29yZS9za21zZy5jLTEyMjUtXHR9XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLVxubmV0L2NvcmUvc2ttc2cuYzoxMjYxOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyNjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVx0XHRcdFx0dTMyIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxubmV0L2NvcmUvc29ja19tYXAuYy00MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy04Mi1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA5LVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBOVUxMLCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOC1cdF9fYWNxdWlyZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXHRfX3JlbGVhc2VzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0My1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cdTAwM2VtYXA7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjpcdFx0XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3Jhdylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cdGlmIChsaWtlbHkocHNvY2spKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDpcdFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NS1cdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBzdWNoIGFzIGBza19wc29ja19pbml0YCwgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCwgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0b3Bfc3RycGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAsIGBza19wc29ja19kcm9wYCwgYHNrX3Bzb2NrX3N0b3BgLCBhbmQgYHNrX21zZ19yZWN2bXNnYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBwb3RlbnRpYWxseSByZWxldmFudCBob29rcyBvciBlbnRyeSBwb2ludHMuCgpOZXh0LCBvdmVyIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCB0aGUgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBhdHRlbnRpb24gYXJlIGB0Y3BfZWF0X3NrYmAsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLiBJJiMzOTtsbCBoYXZlIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLgoKRmluYWxseSwgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCBJJiMzOTttIGxvb2tpbmcgYXQgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3Byb2dfZGV0YWNoYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGBzb2NrX21hcF9icGZfcHJvZ19xdWVyeWAsIGFuZCBgc29ja19tYXBfbGlua19jcmVhdGVgLiBUaGVzZSBzaG91bGQgYmUgcmV2ZWFsaW5nIGFib3V0IHRoZSBtYXAmIzM5O3Mgcm9sZS4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcGVyIGxvb2sgYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBnbyBmcm9tIHRoZXJlLiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgd2l0aCBhIGZvY3VzZWQgZXhhbWluYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHxedm9pZCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY3LVxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjg2OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1Mzc9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3My1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2MzU9c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDE6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3NTppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBTY3J1dGlueSBmb3IgRW5oYW5jZWQgTmV0d29ya2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHByb3BlciBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBteSB3b3JrIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCwgYE5FVF9TT0NLX01TR2AsIGFuZCBgQlBGX1NZU0NBTExgLCBhbmQgb2YgY291cnNlLCBgSU5FVGAuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIHdoYXQgSSYjMzk7bSBkb2luZy4gTXkgZmlyc3QgcG9pbnQgb2YgY2FsbCBpcyBga2VybmVsL2JwZi9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIGluIHBsYWNlIGZvciB0aGUga2VybmVsIGNvbXBvbmVudHMgSSYjMzk7bSByZWx5aW5nIG9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBCUEZfU1lTQ0FMTCBpbiB0aGUgS2VybmVsIENvbmZpZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBgQlBGX1NZU0NBTExgIOKAkyB3aGF0IGl0IHJlbGllcyBvbiwgYW5kIHdoYXQgaXQgZW5hYmxlcy4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGhlYWQgaXMgYWx3YXlzIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGZpbGUsIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBibG9jay4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGl0IGRlcGVuZHMgb24sIGFuZCAqd2hhdCogdGhvc2UgZGVwZW5kZW5jaWVzIHJlcHJlc2VudC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlnIGNvbnRleHQgd2lsbCBsZXQgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2ggc3VwcG9ydGluZyBmZWF0dXJlcyBuZWVkIHRvIGJlIGFjdGl2ZSBhbmQgdG8gYW50aWNpcGF0ZSBhbnkgY29uZmxpY3RzLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRl9TVFJFQU1fUEFSU0VSIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBCUEZfU1RSRUFNX1BBUlNFUmAgY29uZmlndXJhdGlvbiBhbmQgaXRzIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcyBpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgaGVyZSBpdCBpczogYGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBpdCBkZXBlbmRzIG9uIGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBDR1JPVVBfQlBGYC4gSXQgYWxzbyAqc2VsZWN0cyogYFNUUkVBTV9QQVJTRVJgIGFuZCBgTkVUX1NPQ0tfTVNHYC4gVGhhdCBtYWtlcyBzZW5zZTsgc3RyZWFtIHBhcnNpbmcgb2Z0ZW4gaW52b2x2ZXMgbmV0d29yayBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGlzIGNlbnRyYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENHUk9VUF9CUEZgIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlcGVuZGVudCBvbiBpdC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDR1JPVVBfQlBGYCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm91bmQgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB0byBlbnN1cmUgZXZlcnl0aGluZyBhbGlnbnMgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzU1LVxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzU3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBzcGVjaWZpYyBvcHRpb24mIzM5O3MgYmVoYXZpb3Igb3IgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgbGluZSAxMzU2IGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBhYm91dCB0aGUgZ2VuZXJhbCBhcmVhIGNvdmVyZWQgYnkgbGluZSAxMzU2LCBlLmcuLCAmIzM0O2Vhcmx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCYjMzQ7ICYjMzQ7ZGV2aWNlIGRyaXZlciBpbnRlZ3JhdGlvbiwmIzM0OyAmIzM0O2Egc3BlY2lmaWMgc3Vic3lzdGVtIEkga25vdyB3ZWxsJiMzNDtdLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIFttZW50aW9uIHlvdXIgZXhwZWN0YXRpb25zLCBlLmcuLCAmIzM0O2EgYm9vbGVhbiBvcHRpb24sJiMzNDsgJiMzNDthIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwmIzM0OyAmIzM0O2EgbWVudSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IGNvbXBvbmVudCYjMzQ7XS4gSG9wZWZ1bGx5LCB0aGlzIGxpbmUgd2lsbCBnaXZlIG1lIHRoZSBrZXkgSSBuZWVkIHRvIHVubG9jayB0aGUgcHV6emxlIEkmIzM5O20gY3VycmVudGx5IHNvbHZpbmcuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1NTpcdFxuMTM1NjpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzU3Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1ODpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1OTpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNjA6XHRcdGhlbHBcbjEzNjE6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM2MjpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM2MzpcdFxuMTM2NDpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzY1Olx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbjEzNjY6XHRcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXG4xMzY3Olx0XHQgIGluZXQgc29ja2V0cy5cbjEzNjg6XHRcbjEzNjk6XHRjb25maWcgQ0dST1VQX01JU0NcbjEzNzA6XHRcdGJvb2wgXCYjMzQ7TWlzYyByZXNvdXJjZSBjb250cm9sbGVyXCYjMzQ7XG4xMzcxOlx0XHRkZWZhdWx0IG5cbjEzNzI6XHRcdGhlbHBcbjEzNzM6XHRcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXG4xMzc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDk0CgkJCQkJCQlvdXRwdXQ6IDI4OAoJCQkJCQkJdGhvdWdodHM6IDcwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQg4oCTIHNwZWNpZmljYWxseSwgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0YXJnZXRlZCBzeW1ib2xzIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB1c2FibGUuIEkgc2VlIGBuZXQvY29yZS9za21zZy5jYCwgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCBhbmQgYG5ldC9pcHY0L3RjcF9icGYuY2AgYXJlIHRoZSBrZXkgZmlsZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja21hcCB2ZXJkaWN0IHJlZGlyZWN0aW9uLgoKSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIEkgbmVlZCB0byB2ZXJpZnk6IGBza19wc29ja19pbml0YCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCwgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0b3Bfc3RycGAsIGBza19wc29ja19tc2dfdmVyZGljdGAsIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF9wcm9nX2RldGFjaGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBgc29ja19tYXBfbGlua19jcmVhdGVgLCBgdGNwX2VhdF9za2JgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgZGVmaW5lZCBhbmQsIGNyaXRpY2FsbHksIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBrZXJuZWwgY29kZSBhbmQgY29uZmlybWVkIHRoZXNlIGZ1bmN0aW9ucyBleGlzdCBhbmQgYXJlLCBhcyBleHBlY3RlZCwgbm9uLXN0YXRpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBzeW1ib2xzIGluIHRoZSB2YXJpb3VzIGZpbGVzLiBUaGUgdmVyaWZpY2F0aW9uIGNvbmZpcm1zIHRoZSBzeW1ib2xzIGxpc3RlZCBhbmQgdGhlIHJlbGV2YW50IGV4cG9ydCBzeW1ib2xzOgpJbiBgbmV0L2NvcmUvc2ttc2cuY2A6Ci0gYHNrX3Bzb2NrX2luaXRgIChFWFBPUlRfU1lNQk9MX0dQTCkKLSBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIChFWFBPUlRfU1lNQk9MX0dQTCkKLSBgc2tfcHNvY2tfaW5pdF9zdHJwYAotIGBza19wc29ja19zdGFydF9zdHJwYAotIGBza19wc29ja19zdG9wX3N0cnBgCi0gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgCi0gYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAKLSBgc2tfcHNvY2tfZHJvcGAgKEVYUE9SVF9TWU1CT0xfR1BMKQotIGBza19wc29ja19zdG9wYAotIGBza19tc2dfcmVjdm1zZ2AKCkluIGBuZXQvY29yZS9zb2NrX21hcC5jYDoKLSBgc29ja19tYXBfZ2V0X2Zyb21fZmRgCi0gYHNvY2tfbWFwX3Byb2dfZGV0YWNoYAotIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgCi0gYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YAotIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAKLSBgc29ja19tYXBfZGVzdHJveWAKLSBgc29ja19tYXBfY2xvc2VgCgpJbiBgbmV0L2lwdjQvdGNwX2JwZi5jYDoKLSBgdGNwX2VhdF9za2JgCi0gYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgCi0gYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAKCkZpbmFsbHksIGJlZm9yZSBJIHNpZ24gb2ZmLCBsZXQmIzM5O3MgY29uZmlybSBteSBmaW5hbCBjaGVjazogVGhpcyBpcyB3b3J0aCBmdXp6aW5nLCB0aGUgZW5hYmxlIGNvbmZpZ3MgYXJlIGNvcnJlY3QsIHRoZSBmb2N1c2VkIHN5bWJvbHMgYXJlIHJlbGV2YW50IGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhlcmUmIzM5O3MgYSBjbGVhciByZWFzb24gZm9yIHRoaXMgZnV6emluZyBlZmZvcnQgKHNvY2ttYXAgdmVyZGljdCByZWRpcmVjdGlvbikuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVx1MDAzZXNrKS4gVGhpcyBjb3JlIG5ldHdvcmtpbmcvZUJQRiBzb2NrbWFwIGxvZ2ljIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RvcF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX2luaXRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3Bfc3RycCYjMzQ7LAogICAgJiMzNDt0Y3BfZWF0X3NrYiYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2ttc2cgQlBGIHNvY2tldCByZWRpcmVjdCB2ZXJkaWN0IGhhbmRsaW5nIChza19wc29ja192ZXJkaWN0X2FwcGx5KSB0byBhdm9pZCBjYWxsaW5nIHRjcF9lYXRfc2tiIHdoZW4gcmVkaXJlY3RpbmcgYW4gc2tiIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChkc3QgPT0gcHNvY2stXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXHUwMDNlc2spLlxuXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDcyOTgwNzYzNjQwZjNkNDZjZDY0MTQ5ZDNiY2ZhMDY0N2Y1YjVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMzksMTAgJiM0MzsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBfX1NLX1JFRElSRUNUOgotCQl0Y3BfZWF0X3NrYihwc29jay0mZ3Q7c2ssIHNrYik7CiYjNDM7CWNhc2UgX19TS19SRURJUkVDVDogewomIzQzOwkJc3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTsKJiM0MzsKJiM0MzsJCWlmIChkc3QgIT0gcHNvY2stJmd0O3NrKQomIzQzOwkJCXRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKTsKIAkJZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpOwogCQlicmVhazsKJiM0MzsJfQogCWNhc2UgX19TS19EUk9QOgogCWRlZmF1bHQ6CiBvdXRfZnJlZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXRoZXIgaXQgd2FycmFudHMgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIHJpc2sgYW5kIHNhZmV0eSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoYXQgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSB3ZXJlIGRlZmVuc2l2ZSBjb2RlIHJldmlld3MsIGFuZCBpZiBzbywgaG93IHRoYXQgbWF5IGFmZmVjdCBzYW5pdGl6ZXIgc2VsZWN0aW9uLCBlc3BlY2lhbGx5IGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgYmVuaWduIHRhc2ssIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBfX1NLX1JFRElSRUNUYCBjYXNlLiBXZSYjMzk7dmUgZ290IGEgbmV3IHNjb3BlIGJsb2NrIGFyb3VuZCB0aGUgYHRjcF9lYXRfc2tiYCBjYWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwuIFNvLCBwcmV2aW91c2x5LCBgdGNwX2VhdF9za2JgIHdhcyB1bmNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGJyYW5jaC4gTm93LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpZiBgZHN0ICE9IHBzb2NrLSZndDtza2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29udHJvbCBmbG93IGNoYW5nZSwgYW5kIG15IGJyYWluIGlzIHNjcmVhbWluZyAmIzM0O25ldyBwYXRoLCBuZXcgYnVncyEmIzM0Oy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBpcyBkb2luZyBhbmQgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2NvcmUvc2ttc2cuY2AgcGljdHVyZS4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHJlYWQtZmlsZSB0b29sIG9yIGZpcmUgdXAgYSBxdWljayBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHVzZWQgZWxzZXdoZXJlLCBhbmQgaXRzIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW9zIGludHJvZHVjZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGB0Y3BfZWF0X3NrYmAgY2FsbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGxpa2UgdG8gdW5kZXJzdGFuZCBob3cgYGRzdGAgaXMgb2J0YWluZWQgZnJvbSB0aGUgYHNrYmAgYW5kIGhvdyBpdCBjb3VsZCBkaXZlcmdlIGZyb20gYHBzb2NrLSZndDtza2AgaWYgdGhlIGNvZGUgZmxvdyBpcyBhZmZlY3RlZC4gSWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoYXQgbWlnaHQgdGlwIG1lIG9uZSB3YXkgb3IgdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyMTpcdFx0XHRcdG9mZiA9IDA7XG4xMDIyOlx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjM6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjQ6XHRcbjEwMjU6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI2Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDI3Olx0XHRcdFx0fVxuMTAyODpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbjEwMjk6XHRcdFx0fVxuMTAzMDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDMxOlx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDMyOlx0XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4xMDMzOlx0XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbjEwMzQ6XHRcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwMzU6XHRcdFx0XHRcdGVyciA9IDA7XG4xMDM2Olx0XHRcdFx0fVxuMTAzNzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDM4Olx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMzk6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdFx0YnJlYWs7XG4xMDQyOlx0XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbjEwNDM6XHRcdFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbjEwNDY6XHRcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNDc6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xuMTA0ODpcdFx0XHRicmVhaztcbjEwNDk6XHRcdH1cbjEwNTA6XHRcdGNhc2UgX19TS19EUk9QOlxuMTA1MTpcdFx0ZGVmYXVsdDpcbjEwNTI6XHRvdXRfZnJlZTpcbjEwNTM6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuMTA1NDpcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTU6XHRcdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuMTA1NjpcdFx0fVxuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIGVycjtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMDY0Olx0XHR2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzaykgPSBOVUxMO1xuMTA2NTpcdFxuMTA2NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA2NzpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMDY4Olx0XHRpZiAobGlrZWx5KHBzb2NrKSkge1xuMTA2OTpcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLgoKKipNeSBBbmFseXNpcyBvZiBTb2NrZXQgUmVkaXJlY3Rpb24qKgoKUmlnaHQsIHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgaW50ZXJwbGF5IG9mIGBza19wc29ja19za2JfcmVkaXJlY3RgLCBgdGNwX2VhdF9za2JgLCBhbmQgdGhhdCBuZXdlciBvbmUsIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgaGFuZGxlIHNvY2tldCByZWRpcmVjdGlvbiwgYW5kIHRoZSBzcGVjaWZpYyByb2xlIGVhY2ggcGxheXMgaW4gdGhhdCBwcm9jZXNzLiBJIHN1c3BlY3QgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAgaXMgdGhlIHByaW1hcnkgcmVkaXJlY3RvciBidXQgSSBoYXZlIHRvIGFzc2VzcyB3aGV0aGVyIGB0Y3BfZWF0X3NrYmAgYWN0cyBvbiB0aGUgcGFja2V0IGRhdGEgb3IgYWx0ZXJzIGl0cyBiZWhhdmlvdXIuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIGZpdHMgaW50byB0aGlzIHNjaGVtZS4gSXMgaXQgdGhlIGZyb250IGVuZCBpbiB0aGUgZUJQRiBsYXllciwgcHJvdmlkaW5nIHRoZSByZWRpcmVjdCB0YXJnZXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgc291cmNlIGlzIG5lZWRlZCB0byBjb25maXJtIHRoZSBoaWdoIGxldmVsIGZsb3cgYW5kIGZ1bmN0aW9uLCBiZWZvcmUgbG9va2luZyBhdCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc2tiX3JlZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTk1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XG5uZXQvY29yZS9za21zZy5jLTk1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6OTU4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtOTU5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTk5Nj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwNDYtXHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNDc6XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTA0OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXQgYXJvdW5kIGxpbmUgOTU4IGluIHRoZSByZWxldmFudCBmaWxlLiBUaW1lIHRvIHpvb20gaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWNrZXQgcmVkaXJlY3Rpb24uIElzIGl0IHRoZSBjb3JlIG9mIGhvdyBwYWNrZXRzIGdldCByZXJvdXRlZCB0byB0aGUgdXNlcnNwYWNlIHNvY2tldD8gRG9lcyBpdCBwZXJmb3JtIHRoZSBhY3R1YWwgY29weWluZyBhbmQgcXVldWVpbmcsIG9yIGlzIGl0IHJlc3BvbnNpYmxlIGZvciB0aGUgZGVjaXNpb24gbWFraW5nPyBQcm9iYWJseSB0aGUgZm9ybWVyLCBidXQgYmVzdCB0byBjb25maXJtIHRoZSBpbnRlcm5hbHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBsb2dpYyBoZXJlIC0gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCwgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgaXRzZWxmLiBHb3R0YSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIE15IGZvY3VzIGlzIG9uIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG4gOTU5Olx0e1xuIDk2MDpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcbiA5NjE6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbiA5NjI6XHRcbiA5NjM6XHRcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuIDk2NDpcdFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XG4gOTY1Olx0XHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbiYjMzk7dCBzZXQgYSByZWRpcmVjdCBpbnRlcmZhY2UuXG4gOTY2Olx0XHQgKi9cbiA5Njc6XHRcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XG4gOTY4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Njk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTcwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk3MTpcdFx0fVxuIDk3MjpcdFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XG4gOTczOlx0XHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxuIDk3NDpcdFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbiYjMzk7dCBzZW5kIGEgcGFja2V0IG9uXG4gOTc1Olx0XHQgKiBhIHNvY2tldCB0aGF0IGlzIGluIHRoaXMgc3RhdGUgc28gd2UgZHJvcCB0aGUgc2tiLlxuIDk3NjpcdFx0ICovXG4gOTc3Olx0XHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xuIDk3ODpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTc5Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4MDpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODE6XHRcdH1cbiA5ODI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4MzpcdFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuIDk4NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4NTpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTg2Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4NzpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuIDk5MTpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZXdvcmssIDApO1xuIDk5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5OTM6XHRcdHJldHVybiAwO1xuIDk5NDpcdH1cbiA5OTU6XHRcbiA5OTY6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTc6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyOTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHRjcF9lYXRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF9lYXRfc2tiYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvOiBlc3NlbnRpYWxseSwgcHJvY2VzcyBvciBjb25zdW1lIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSB3aXRoaW4gdGhlIFRDUCBsYXllci4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUg4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZSwgYW5kIHByZXN1bWFibHksIGhhbmRsaW5nIHRoZSBkYXRhIGJhc2VkIG9uIGl0cyBjb250ZW50cywgc2VxdWVuY2UgbnVtYmVyLCBhbmQgZmxhZ3MuCgpJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZnJvbSB0aGUgcmVjZWl2ZSBwYXRoLCB0aGUgcmV0cmFuc21pdCBwYXRoLCBvciBwZXJoYXBzIHNvbWV3aGVyZSBlbHNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgc3ByaW5nIHRvIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW50ZXJydXB0IGNvbnRleHQgdGhpcyBpcyBsaWtlbHkgY2FsbGVkIGluPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgaW4gdGhlIFRDUCBzdGFjay4gU3BlY2lmaWNhbGx5LCB3aGVyZSBhbmQgd2hlbiBpcyBgdGNwX2VhdF9za2JgIGdldHRpbmcgY2FsbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB0b3VjaGVzLCBsaWtlIHRoZSBUQ1AgY29udHJvbCBibG9jayAoVENCKSBvciB0aGUgc29ja2V0IGl0c2VsZj8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBjaGVja3N1bSB2YWxpZGF0aW9uLCBzZXF1ZW5jZSBudW1iZXIgdmVyaWZpY2F0aW9uLCByZWFzc2VtYmx5IGlmIHRoZSBTS0IgaXMgZnJhZ21lbnRlZCwgYW5kIHBlcmhhcHMgc29tZSBwcm9jZXNzaW5nIGJhc2VkIG9uIFRDUCBmbGFncyAoQUNLLCBTWU4sIEZJTiwgUFNILCBldGMuKS4gV2UmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggb3V0LW9mLW9yZGVyIHNlZ21lbnRzLCB3aW5kb3cgdXBkYXRlcywgYW5kIHBvc3NpYmxlIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBjaGVja3N1bSBlcnJvcnMgb3IgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBnb2FsIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgcmlnaHQgZGF0YSwgaW4gdGhlIHJpZ2h0IG9yZGVyLCBhbmQgYXQgdGhlIHJpZ2h0IHRpbWUuCgpJdCYjMzk7cyBnb2luZyB0byBiZSBlc3NlbnRpYWwgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYXMgd2VsbC4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmfigJRpbnZhbGlkIGNoZWNrc3VtLCBhbiB1bmV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciwgb3IgYSBwcm9ibGVtIHdpdGggdGhlIFNLQiBpdHNlbGbigJRob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbmQ/IERvZXMgaXQgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0LCBsb2cgYW4gZXJyb3IsIG9yIHRyaWdnZXIgc29tZSBtb3JlIGFnZ3Jlc3NpdmUgZXJyb3IgcmVjb3Zlcnkgb3IgcmVzZXQ/IEkgYW50aWNpcGF0ZSBzb21lIG9mIHRob3NlIGNvZGUgcGF0aHMgd2lsbCBiZSBpbnRlcmVzdGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdGllcy4KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGB0Y3BfZWF0X3NrYmAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgVENQIHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyB3b3JraG9yc2UgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lYXRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4NDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTE6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1NC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVx0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2Olx0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDU1LVx0XHRzb2NrX2Ryb3AocHNvY2stXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTItXHRcdGxlbiA9IDA7XG5uZXQvY29yZS9za21zZy5jOjEyMTM6XHRcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVx0XHRzb2NrX2Ryb3Aoc2ssIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHRjcF9lYXRfc2tiYCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgaGVhZGFjaGUpIG9mIEJQRiBpbnRlcmFjdGlvbiB3aXRoIFRDUCBkYXRhIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBhbmQgaW50ZXJhY3RzIHdpdGggYW55IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiBwbGFjZSBmb3IgVENQIHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgYXNwZWN0cyBsaWtlIHBhY2tldCBmaWx0ZXJpbmcsIGZsb3cgY29udHJvbCBtb2RpZmljYXRpb25zLCBvciBldmVuIG1vcmUgYWR2YW5jZWQgb3BlcmF0aW9ucyBpbXBsZW1lbnRlZCB1c2luZyBlQlBGLiBJJiMzOTttIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIHRoZSBsb2dpYyBieSB1c2luZyBhIGRlYnVnZ2VyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMTY6XHR7XG4gIDE3Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcbiAgMTg6XHRcdGludCBjb3BpZWQ7XG4gIDE5Olx0XG4gIDIwOlx0XHRpZiAoIXNrYiB8fCAhc2tiLVx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcbiAgMjE6XHRcdFx0cmV0dXJuO1xuICAyMjpcdFxuICAyMzpcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXG4gIDI0Olx0XHRcdHJldHVybjtcbiAgMjU6XHRcbiAgMjY6XHRcdHRjcCA9IHRjcF9zayhzayk7XG4gIDI3Olx0XHRjb3BpZWQgPSB0Y3AtXHUwMDNlY29waWVkX3NlcSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICAyODpcdFx0V1JJVEVfT05DRSh0Y3AtXHUwMDNlY29waWVkX3NlcSwgY29waWVkKTtcbiAgMjk6XHRcdHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTtcbiAgMzA6XHRcdF9fdGNwX2NsZWFudXBfcmJ1Zihzaywgc2tiLVx1MDAzZWxlbik7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiAgMzQ6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcylcbiAgMzU6XHR7XG4gIDM2Olx0XHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XG4gIDM3Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcbiAgMzg6XHRcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xuICAzOTpcdFx0c3RydWN0IHNrX21zZyAqdG1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS19SRURJUkVDVCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgd2UgaGFuZGxlIGBfX1NLX1JFRElSRUNUYCB2ZXJkaWN0cyBpbiBzb2NrbWFwL3NrbXNnLiBUaGUgY29yZSBjaGFuZ2UgaXMgcHJldmVudGluZyBgdGNwX2VhdF9za2IoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2hlbiB0aGUgcmVkaXJlY3Rpb24gdGFyZ2V0IChgZHN0YCkgaXMgdGhlIHNhbWUgc29ja2V0IChgcHNvY2stJmd0O3NrYCkg4oCTIGVzc2VudGlhbGx5LCByZWRpcmVjdGluZyB0byBzZWxmLgoKTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBDb3VsZCB0aGlzIGludHJvZHVjZSBhIEtNU0FOIGlzc3VlPyBMZXQmIzM5O3MgYW5hbHl6ZS4gSXQgbG9va3MgbGlrZSBpdC4KCjEuICAqKk5vIG5ldyBhbGxvY2F0aW9uczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYGttYWxsb2NgIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4KMi4gICoqTm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgozLiAgKipWYXJpYWJsZSBpbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgdmFyaWFibGUsIGBkc3RgLCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gb2YgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKWAuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSB2YWx1ZSwgc28gd2UmIzM5O3JlIHNhZmUgaGVyZS4KNC4gICoqTm8gY2hhbmdlZCBib3VuZHMgY2hlY2tpbmc6KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tpbmcsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkIGJlY2F1c2Ugb2YgYSBsb2dpYyBlcnJvci4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBmbG93IGFuZCBhY2NvdW50aW5nIHdpdGhpbiB0aGUgQlBGIHJlZGlyZWN0IGxvZ2ljIGZvciBza21zZy9zb2NrbWFwLgoKR2l2ZW4gdGhpcywgdGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG86CgoqICAgU29ja2V0IHN0YXRlCiogICBUQ1Agc2VxdWVuY2UgbnVtYmVyIGFjY291bnRpbmcKKiAgIEJ1ZmZlciBtYW5hZ2VtZW50CiogICBSZWZjb3VudGluZwoqICAgVXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgbG9naWMgYnVncwoKVGhlc2UgYXJlIGNsYXNzaWMgaXNzdWVzIHRoYXQgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIGl0IGZvciBjbGFyaXR5OgoKKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYF9fU0tfUkVESVJFQ1RgIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4KKiAgIEl0IHNraXBzIGB0Y3BfZWF0X3NrYigpYCB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldC4KKiAgIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLgoqICAgTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIHBhc3NlZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuCiogICBgZHN0YCBpcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4KKiAgIFBvdGVudGlhbCBpc3N1ZXMgYXJlIGZ1bmN0aW9uYWwvbG9naWMgb3Igc3RhdGUgcmVsYXRlZCBhbmQgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjMzLjE1MjMyNjY3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc5NzYxODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfZGV0YWNoXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX2NyZWF0ZVwiLFxuICAgIFwic2tfcHNvY2tfaW5pdFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0b3Bfc3RycFwiLFxuICAgIFwidGNwX2VhdF9za2JcIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDozMy4xNTIzMzI5MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzQ1NjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgX19TS19SRURJUkVDVDpcXG4tXFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbitcXHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG4rXFxuK1xcdFxcdGlmIChkc3QgIT0gcHNvY2stXFx1MDAzZXNrKVxcbitcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuIFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0Y2FzZSBfX1NLX0RST1A6XFxuIFxcdGRlZmF1bHQ6XFxuIG91dF9mcmVlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDozMy42MjA3MDc5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3Nzc3NzA3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwic29ja19tYXBfcHJvZ19kZXRhY2hcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJza19wc29ja19pbml0XCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19zdG9wX3ZlcmRpY3RcIixcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF9zdHJwXCIsXG4gICAgXCJ0Y3BfZWF0X3NrYlwiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVxcdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbitcdGNhc2UgX19TS19SRURJUkVDVDoge1xuK1x0XHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1xuK1x0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxuK1x0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6MzMuNjIwNzA5NDkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgxMzQ1MjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjaGFuZ2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkncmUgdHdlYWtpbmcgaG93IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHBhY2tldCBzb2NrZXQgZnJhbWV3b3JrLiBUaGUgYF9fU0tfUkVESVJFQ1RgIGNhc2UgaXMgdGhlIG9uZSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJsb2NrIHNjb3BlIHdpdGggYSBjb21wYXJpc29uIG9mIHNvY2tldHMuXG5cblNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlIGp1c3QgY2FsbGVkIGB0Y3BfZWF0X3NrYmAgdW5jb25kaXRpb25hbGx5LiBOb3csIHRoZSBuZXcgY29kZSBmZXRjaGVzIGEgZGVzdGluYXRpb24gc29ja2V0IHVzaW5nIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYilgLCB0aGVuIGNoZWNrcyBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBgcHNvY2tgLiBPbmx5IGlmIHRoZXkncmUgKmRpZmZlcmVudCogZG9lcyBpdCBjYWxsIGB0Y3BfZWF0X3NrYmAuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gVGhhdCBjaGVjayBvZiBgZHN0ICE9IHBzb2NrLVx1MDAzZXNrYCBmZWVscyBzaWduaWZpY2FudC4gSXMgdGhpcyB0byBwcmV2ZW50IGNvbnN1bWluZyBhbmQgcmVkaXJlY3RpbmcgdGhlIHNhbWUgcGFja2V0PyBUaGlzIGNvdWxkIGJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgYnVnIGZpeCByZWxhdGVkIHRvIHJlZGlyZWN0IGxvb3BzIG9yIHNvbWUgb3RoZXIgc3VidGxlIGlzc3VlLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGU6IGBuZXQvY29yZS9za21zZy5jYCBpdHNlbGYsIGluY2x1ZGluZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzIGNvZGUsIHVuZGVyc3RhbmQgdGhlIGNhbGxlcnMgb2YgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBsb29rIGF0IGFueSBleHBvcnRlZCBmdW5jdGlvbnMsIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIGF2YWlsYWJsZSwgYW5kIGNoZWNrIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy4gVGhlIHdob2xlIHBpY3R1cmUgaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIGZ1bmN0aW9uIGRvZXMsIHdobyBzZXRzIHRoZSByZWRpcmVjdCBkZXN0aW5hdGlvbiwgYW5kIGhvdyBpdCBhbGwgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IFRDUC4gVGhlIGRldGFpbHMgYXJlIGluIHRoZSBjb2RlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgd2hhdCBJJ20gbG9va2luZyBmb3IgcmlnaHQgbm93LiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBzaWRlIGVmZmVjdHMgb2Ygbm90IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjM4LjQzNDE2NDM4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0XFx0XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMTAyMTpcXHRcXHRcXHRcXHRvZmYgPSAwO1xcbjEwMjI6XFx0XFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG4xMDIzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuMTAyNjpcXHRcXHRcXHRcXHRcXHRsZW4gPSBzdG0tXFx1MDAzZWZ1bGxfbGVuO1xcbjEwMjc6XFx0XFx0XFx0XFx0fVxcbjEwMjg6XFx0XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xcbjEwMjk6XFx0XFx0XFx0fVxcbjEwMzA6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMDMxOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzMjpcXHRcXHRcXHRcXHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4xMDMzOlxcdFxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuMTAzNDpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrLCAwKTtcXG4xMDM1OlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTAzNjpcXHRcXHRcXHRcXHR9XFxuMTAzNzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzODpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDM5OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0MDpcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHRcXHRicmVhaztcXG4xMDQyOlxcdFxcdGNhc2UgX19TS19SRURJUkVDVDoge1xcbjEwNDM6XFx0XFx0XFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0XFx0aWYgKGRzdCAhPSBwc29jay1cXHUwMDNlc2spXFxuMTA0NjpcXHRcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA0NzpcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XFxuMTA0ODpcXHRcXHRcXHRicmVhaztcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcdGNhc2UgX19TS19EUk9QOlxcbjEwNTE6XFx0XFx0ZGVmYXVsdDpcXG4xMDUyOlxcdG91dF9mcmVlOlxcbjEwNTM6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbjEwNTQ6XFx0XFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTU6XFx0XFx0XFx0c29ja19kcm9wKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDU2OlxcdFxcdH1cXG4xMDU3OlxcdFxcbjEwNTg6XFx0XFx0cmV0dXJuIGVycjtcXG4xMDU5OlxcdH1cXG4xMDYwOlxcdFxcbjEwNjE6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4xMDY0OlxcdFxcdHZvaWQgKCp3cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKnNrKSA9IE5VTEw7XFxuMTA2NTpcXHRcXG4xMDY2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMDY3OlxcdFxcdHBzb2NrID0gc2tfcHNvY2soc2spO1xcbjEwNjg6XFx0XFx0aWYgKGxpa2VseShwc29jaykpIHtcXG4xMDY5OlxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6MzguNDM0MzA0MDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NTQ5Nzg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc2ttc2cuY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgY29udGV4dCDigJMgaG93IGl0J3MgYmVpbmcgaW52b2tlZCwgd2hhdCBwcmVyZXF1aXNpdGVzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSB0aGF0IGdvdmVybiBpdHMgZXhlY3V0aW9uLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBwYWNrZXQgc29ja2V0IGZpbHRlcmluZy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyBpdCBoYW5kbGVzIGFuZCBtYWtlIGEgbWFwIG9mIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGNvbWUgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo0MC44MDk4MDQ2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyODMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz05NTg9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05OTUtXFxubmV0L2NvcmUvc2ttc2cuYzo5OTY6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy05OTctXFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMi1cXHR9XFxubmV0L2NvcmUvc2ttc2cuYzoxMTAzOlxcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcXG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0Olxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIyNS1cXHR9XFxubmV0L2NvcmUvc2ttc2cuYzoxMjI2OlxcdHJldCA9IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcXG5uZXQvY29yZS9za21zZy5jLTEyMjctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjQwLjg1OTIzOTA3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTk0NjcwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFBhdGggb2YgYG5ldC9jb3JlL3NrbXNnLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZmlndXJlIG91dCB3aGljaCBNYWtlZmlsZXMgYXJlIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY3kgY2hhaW4gdG8gc2VlIHdoZXJlIHRoaXMgc3BlY2lmaWMgZmlsZSBpcyBjb21waWxlZCBmcm9tLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBNYWtlZmlsZSB0aGF0IGhhbmRsZXMgdGhpcyBmaWxlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBhbmQgYW55IHBvdGVudGlhbCBjdXN0b21pemF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGhpZ2hlciB1cCBpZiBpdCdzIG5vdCBkaXJlY3RseSBkZWZpbmVkIHRoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBjb21waWxhdGlvbiBvZiBhIGAub2Agb3Igb2JqZWN0IGZpbGUgdGhhdCByZXN1bHRzIGZyb20gY29tcGlsaW5nIHRoZSBzb3VyY2UuXG5cbk9uY2UgSSd2ZSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBNYWtlZmlsZSwgdGhlIG5leHQgdGhpbmcgSSdsbCB3YW50IHRvIGRpZyBpbnRvIGlzIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyB0aGF0IGluIHRoZSBrZXJuZWwsIG1hbnkgZmVhdHVyZXMgYW5kIGNvbXBvbmVudHMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgYHNrbXNnLmNgLiBUaGlzIGNvdWxkIGJlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYSBzcGVjaWZpYyBvcHRpb24sIG9yIHBlcmhhcHMgYSBtb3JlIGluZGlyZWN0IHJlbGF0aW9uc2hpcCB0aHJvdWdoIHNvbWUgb3RoZXIgbW9kdWxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfU0tNU0dgLCBvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBjb250cm9sIGZlYXR1cmVzIHdoaWNoIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuIEknbGwgYWxzbyBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDMuODE4NzEwMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTgzNzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21zZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDQuMjAwNTU0MDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMjg2NDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhbmQgbXkgZXhwZWN0ZWQgbGluZSBvZiB0aGlua2luZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IFJlZGlyZWN0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgS2NvbmZpZywgdG8gc2VlIGlmIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBlbmFibGVkLiBUaGF0J3MgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24gZnVuY3Rpb25hbGl0eSwgc28gaXQncyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBidWlsZCBzeXN0ZW0gZXZlbiAqYWxsb3dzKiBtZSB0byBidWlsZCB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuXG5cbkJleW9uZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpa2VseSBvYmplY3QgZmlsZSBuYW1lcy4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGNhbGxlZCBgc29ja19tYXAub2AsIG9yIGEgc2ltaWxhciBuYW1lIHJlbGF0ZWQgdG8gc29ja2V0IG1hcHMgb3IgQlBGIHJlZGlyZWN0aW9uLiBUaGUga2VybmVsIG9mdGVuIHVzZXMgc3BlY2lmaWMgbW9kdWxlIG5hbWVzIG9yIG9iamVjdCBmaWxlcyB0byByZXByZXNlbnQgdGhlc2UgY29yZSBmdW5jdGlvbmFsaXRpZXMuIElmIEkgY2FuIGZpbmQgaXQsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGxvYWRpbmcgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbkVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBwaWVjZXMgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBpdOKAmXMgd2hlcmUgQlBGIHByb2dyYW1zIGNhbiBpbnRlcmNlcHQgYW5kIG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgYXQgdGhlIHNvY2tldCBsZXZlbC4gQnkgdW5kZXJzdGFuZGluZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBkaWFnbm9zZSBvciBhbmFseXplIHRoZSBuZXR3b3JrIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDcuMTIzNDIwMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkxNzEzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NPQ0tfTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTI2LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR0Y3BfdHNvcnRlZF9hbmNob3I7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5Mjc6I2lmZGVmIENPTkZJR19ORVRfU09DS19NU0dcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTkyOC1cXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0X3NrX3JlZGlyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTcyLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TT0NLX01TRylcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTYxOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTYyMi19XFxuaW5jbHVkZS9saW51eC9za21zZy5oOjYyMzojZW5kaWYgLyogQ09ORklHX05FVF9TT0NLX01TRyAqL1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MjQtI2VuZGlmIC8qIF9MSU5VWF9TS01TR19IICovXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VwZGF0ZV91bHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODM1LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MzY6I2lmZGVmIENPTkZJR19ORVRfU09DS19NU0dcXG5pbmNsdWRlL25ldC90Y3AuaC0yODM3LXN0cnVjdCBza19tc2c7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODU4PWludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1OS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjA6I2VuZGlmIC8qIENPTkZJR19ORVRfU09DS19NU0cgKi9cXG5pbmNsdWRlL25ldC90Y3AuaC0yODYxLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjI6I2lmICFkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgfHwgIWRlZmluZWQoQ09ORklHX05FVF9TT0NLX01TRylcXG5pbmNsdWRlL25ldC90Y3AuaC0yODYzLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcbi0tXFxubmV0L0tjb25maWctNDgyLVxcdGhlbHBcXG5uZXQvS2NvbmZpZzo0ODM6XFx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3JcXG5uZXQvS2NvbmZpZy00ODQtXFx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT00Mz1vYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDguNjkyNTk4NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzAwMDI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIFBhcnNlciBhbmQgU3lzdGVtIENhbGwgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgQlBGX1NZU0NBTExgLCBhbmQgaG93IGBORVRfU09DS19NU0dgIGFuZCBgc29ja19tYXBgIGFyZSB1dGlsaXplZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBvcmNoZXN0cmF0ZWQuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYxLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZWlyIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo1MS42NjI2MDQxOTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzc1OlxcdFxcdGRlZmF1bHQgeVxcbiAzNzY6XFx0XFx0aGVscFxcbiAzNzc6XFx0XFx0ICBUaGUgbmV0d29yayBzdGFjayBoYXMgdG8gZHJvcCBwYWNrZXRzIHdoZW4gYSByZWNlaXZlIHByb2Nlc3NpbmcgQ1BVJ3NcXG4gMzc4OlxcdFxcdCAgYmFja2xvZyByZWFjaGVzIG5ldGRldl9tYXhfYmFja2xvZy4gSWYgYSBmZXcgb3V0IG9mIG1hbnkgYWN0aXZlIGZsb3dzXFxuIDM3OTpcXHRcXHQgIGdlbmVyYXRlIHRoZSB2YXN0IG1ham9yaXR5IG9mIGxvYWQsIGRyb3AgdGhlaXIgdHJhZmZpYyBlYXJsaWVyIHRvXFxuIDM4MDpcXHRcXHQgIG1haW50YWluIGNhcGFjaXR5IGZvciB0aGUgb3RoZXIgZmxvd3MuIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzZXJ2ZXJzXFxuIDM4MTpcXHRcXHQgIHdpdGggbWFueSBjbGllbnRzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IERvUyBieSBhIHNpbmdsZSAoc3Bvb2ZlZClcXG4gMzgyOlxcdFxcdCAgZmxvdyB0aGF0IGdyZWF0bHkgZXhjZWVkcyBhdmVyYWdlIHdvcmtsb2FkLlxcbiAzODM6XFx0XFxuIDM4NDpcXHRtZW51IFxcXCJOZXR3b3JrIHRlc3RpbmdcXFwiXFxuIDM4NTpcXHRcXG4gMzg2OlxcdGNvbmZpZyBORVRfUEtUR0VOXFxuIDM4NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcXFwiXFxuIDM4ODpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiAzODk6XFx0XFx0aGVscFxcbiAzOTA6XFx0XFx0ICBUaGlzIG1vZHVsZSB3aWxsIGluamVjdCBwcmVjb25maWd1cmVkIHBhY2tldHMsIGF0IGEgY29uZmlndXJhYmxlXFxuIDM5MTpcXHRcXHQgIHJhdGUsIG91dCBvZiBhIGdpdmVuIGludGVyZmFjZS4gIEl0IGlzIHVzZWQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlXFxuIDM5MjpcXHRcXHQgIHN0cmVzcyB0ZXN0aW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kXFxuIDM5MzpcXHRcXHQgIHdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbid0IG5lZWQgaXQ6IHNheSBOLlxcbiAzOTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjUxLjY2MjY3OTIxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODc2Njk4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBGaXJzdCwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhvc2UgdHdvIGtleSBmdW5jdGlvbnMgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYDogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZSwgc28gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBsb2dpYyB0aGVzZSBhcmUgaW1wbGVtZW50aW5nIGFuZCB3aGF0IHRoZWlyIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlaXIgc3BlY2lmaWMgcm9sZXMgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBwYXRjaC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCB3b3JrIG15IHdheSBvdXR3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo1OC41MzkzNzk5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHR9XFxuIDk1NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxuIDk1NzpcXHRcXG4gOTU4OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTU5OlxcdHtcXG4gOTYwOlxcdFxcdHN0cnVjdCBza19wc29jayAqcHNvY2tfb3RoZXI7XFxuIDk2MTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbiA5NjQ6XFx0XFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XFxuIDk2NTpcXHRcXHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbid0IHNldCBhIHJlZGlyZWN0IGludGVyZmFjZS5cXG4gOTY2OlxcdFxcdCAqL1xcbiA5Njc6XFx0XFx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcXG4gOTY4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTY5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTcwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5NzE6XFx0XFx0fVxcbiA5NzI6XFx0XFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XFxuIDk3MzpcXHRcXHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxcbiA5NzQ6XFx0XFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbid0IHNlbmQgYSBwYWNrZXQgb25cXG4gOTc1OlxcdFxcdCAqIGEgc29ja2V0IHRoYXQgaXMgaW4gdGhpcyBzdGF0ZSBzbyB3ZSBkcm9wIHRoZSBza2IuXFxuIDk3NjpcXHRcXHQgKi9cXG4gOTc3OlxcdFxcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XFxuIDk3ODpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIDk3OTpcXHRcXHRcXHRzb2NrX2Ryb3AoZnJvbS1cXHUwMDNlc2ssIHNrYik7XFxuIDk4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gOTgxOlxcdFxcdH1cXG4gOTgyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk4MzpcXHRcXHRpZiAoIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2tfb3RoZXIsIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XFxuIDk4NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk4NTpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIDk4NjpcXHRcXHRcXHRzb2NrX2Ryb3AoZnJvbS1cXHUwMDNlc2ssIHNrYik7XFxuIDk4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4gOTkxOlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZXdvcmssIDApO1xcbiA5OTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDk5NDpcXHR9XFxuIDk5NTpcXHRcXG4gOTk2OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA5OTc6XFx0XFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4gOTk4OlxcdHtcXG4gOTk5OlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4xMDAwOlxcdFxcdGludCBlcnIgPSAwO1xcbjEwMDE6XFx0XFx0dTMyIGxlbiwgb2ZmO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA0OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDU6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDA2OlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMDc6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMDg6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDA5OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDEyOlxcdFxcbjEwMTM6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTQ6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE1OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDE2OlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDE3OlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMTg6XFx0XFx0XFx0ICovXFxuMTAxOTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyMDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDIxOlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyMjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI2OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAyNzpcXHRcXHRcXHRcXHR9XFxuMTAyODpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzM6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMDM2OlxcdFxcdFxcdFxcdH1cXG4xMDM3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM4OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4xMDQwOlxcdFxcdFxcdH1cXG4xMDQxOlxcdFxcdFxcdGJyZWFrO1xcbjEwNDI6XFx0XFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XFxuMTA0MzpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbjEwNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjU4LjUzOTQ4MDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1ODE3NDk1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgUmVkaXJlY3Rpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYWNrZXQgcmVkaXJlY3Rpb24gY29kZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmVoYXZpb3Igd2hlbiB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSBpcyBvciBpc24ndCB0aGUgc2FtZSBhcyB0aGUgcHJvdG9jb2wgc29ja2V0IChgcHNvY2stXHUwMDNlc2tgKS4gVGhlIGtleSBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXMsIHdoeSBpcyBgdGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYilgIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBfX1NLX1JFRElSRUNUYCBjb250ZXh0PyBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgVENQIHN0YWNrIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBwYWNrZXQgc29ja2V0cyBjb21lIHRvIGEgaGVhZC5cblxuSXQgYXBwZWFycyB0aGF0IHdoZW4gYGRzdGAgYW5kIGBwc29jay1cdTAwM2Vza2AgYXJlIGRpZmZlcmVudCwgYHRjcF9lYXRfc2tiYCBnZXRzIGludm9rZWQgb24gYHBzb2NrLVx1MDAzZXNrYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaOKAlHRoZSBwYWNrZXQncyBiZWluZyBjb25zdW1lZCBieSB0aGUgaW50ZW5kZWQgc29ja2V0LiBIb3dldmVyLCB3aGVuIGBkc3RgICppcyogdGhlIHNhbWUgYXMgYHBzb2NrLVx1MDAzZXNrYCwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UncmUgbm90IGltbWVkaWF0ZWx5IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIHdpdGggc2ltaWxhciByb3V0aW5nIGFuZCBwcm9jZXNzaW5nIHBhdGhzLCBwb2ludHMgdG93YXJkIGVpdGhlciBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIGhhbmRsaW5nIHRoZSByZWRpcmVjdCBpbiB0aGF0IGNhc2UuIEknbSBzdXNwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIFNLQiBpbiB0aGUgYGluZ3Jlc3Nfc2tiYCBxdWV1ZSwgcG90ZW50aWFsbHkgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGdldCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfZWF0X3NrYmAgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjA1LjEyMTIzMjM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTU2MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZWF0X3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODQ1PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcXG5pbmNsdWRlL25ldC90Y3AuaDoyODUxOnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yODUyLSNlbHNlXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NTQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNDUtXFx0XFx0aWYgKGRzdCAhPSBwc29jay1cXHUwMDNlc2spXFxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2OlxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNDctXFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA1NS1cXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIxMi1cXHRcXHRsZW4gPSAwO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIxMzpcXHRcXHR0Y3BfZWF0X3NrYihzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEyMTQtXFx0XFx0c29ja19kcm9wKHNrLCBza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNTp2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTowNi43MTY4MDI1MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNDgxMzQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGB0Y3BfZWF0X3NrYmAgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHdoYXQgSSdkIGJlIGxvb2tpbmcgYXQgaWYgSSB3ZXJlIGRpZ2dpbmcgaW50byBpdDpcblxuKipEaXZpbmcgaW50byBgdGNwX2VhdF9za2JgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSdtIGhpdHRpbmcgYHRjcF9lYXRfc2tiYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIEJQRiBwcm9ncmFtIGdldHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgYSBUQ1AgcGFja2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBTS0IsIHdoZXJlIHRoZSBkYXRhIGFjdHVhbGx5IGVuZHMgdXAsIGFuZCBhbnkgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS5cblxuRmlyc3QsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdy4gSG93IGlzIHRoZSBTS0IgbW9kaWZpZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGFueSBTS0JzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjbG9uaW5nLCBzaGFyaW5nLCBvciBkaXJlY3QgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucyBpbnNpZGUgdGhlIGtlcm5lbC5cblxuTmV4dCwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayB0cmFmZmljIGhlcmUsIHNvIGNvbmN1cnJlbnQgYWNjZXNzIGlzIGEgZ2l2ZW4uIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHM/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGF0PyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGF0b21pYyBvcGVyYXRpb25zIG9yIG11dGV4ZXMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LlxuXG5BbmQgZmluYWxseSwgSSdtIGNoZWNraW5nIEJQRiBpbnRlcmFjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB0byBoYW5kIGRhdGEgb2ZmIHRvIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBvbmU/IEhvdyBkb2VzIHRoZSBCUEYgcHJvZ3JhbSBnZXQgdGhlIGRhdGE/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBwcm9jZXNzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBkYXRhPyBJJ2xsIGFzc2VzcyB0aGUgZWZmaWNpZW5jeSBvZiBob3cgdGhlIEJQRiBwcm9ncmFtJ3MgYWN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBUQ1Agc3RhY2sncyBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIG92ZXJoZWFkIHRoaXMgc3RlcCBhZGRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNsZWFuIGludGVncmF0aW9uIHBvaW50IG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhlIHBhY2tldCBpcyBlaXRoZXIgZHJvcHBlZCBvciByZWRpcmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MDkuNTUxNjE4NzY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IENvdmFsZW50IElPLCBJbmMuIGh0dHA6Ly9jb3ZhbGVudC5pbyAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3V0aWxfbWFjcm9zLmhcXHUwMDNlXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdGxzLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL2lvY3Rscy5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDE2OlxcdHtcXG4gIDE3OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdGNwO1xcbiAgMTg6XFx0XFx0aW50IGNvcGllZDtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0aWYgKCFza2IgfHwgIXNrYi1cXHUwMDNlbGVuIHx8ICFza19pc190Y3Aoc2spKVxcbiAgMjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSlcXG4gIDI0OlxcdFxcdFxcdHJldHVybjtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0dGNwID0gdGNwX3NrKHNrKTtcXG4gIDI3OlxcdFxcdGNvcGllZCA9IHRjcC1cXHUwMDNlY29waWVkX3NlcSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgMjg6XFx0XFx0V1JJVEVfT05DRSh0Y3AtXFx1MDAzZWNvcGllZF9zZXEsIGNvcGllZCk7XFxuICAyOTpcXHRcXHR0Y3BfcmN2X3NwYWNlX2FkanVzdChzayk7XFxuICAzMDpcXHRcXHRfX3RjcF9jbGVhbnVwX3JidWYoc2ssIHNrYi1cXHUwMDNlbGVuKTtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGludCBicGZfdGNwX2luZ3Jlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbiAgMzQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMpXFxuICAzNTpcXHR7XFxuICAzNjpcXHRcXHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XFxuICAzNzpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcXG4gIDM4OlxcdFxcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xcbiAgMzk6XFx0XFx0c3RydWN0IHNrX21zZyAqdG1wO1xcbiAgNDA6XFx0XFx0aW50IGksIHJldCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjA5LjU1MTY5Nzg0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njk0NTg4MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQlBGIFNvY2ttYXAgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBCUEYgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHdlJ3JlIHRhbGtpbmcgYWJvdXQg4oCTIHNwZWNpZmljYWxseSBCUEYgc29ja21hcCBhbmQgcmVkaXJlY3Rpb24gdXNpbmcgc2ttc2cuYy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHRoaXMgZXZlbiBiZSB0cmlnZ2VyZWQgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBUaGVzZSBhcmUgc29mdHdhcmUtZGVmaW5lZCBuZXR3b3JraW5nIGZlYXR1cmVzLCBwZXJmZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHNvY2tldCgpYCwgYGJwZigpYCwgYHNldHNvY2tvcHQoKWAsIGBzZW5kbXNnKClgLiBObyBzcGVjaWFsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIGhlcmUuIFRoYXQgbWFrZXMgaXQgYSBzaWduaWZpY2FudCB0YXJnZXQuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBCUEYgc29ja2V0IHZlcmRpY3QgcmVkaXJlY3QgbG9naWMgaW4gc2ttc2csIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGlzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0IHNob3VsZCBnaXZlIHVzIGEgZ29vZCBncmFzcCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MTYuMjQ2Mjg4ODY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUtXFxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxcbm5ldC9jb3JlL3NrbXNnLmMtMjctXFx0XFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfYWxsb2MpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODYtXFxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXFxubmV0L2NvcmUvc2ttc2cuYy04OC1cXHRcXHQgdTMyIG9mZiwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMzg6dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTEzOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE2MD1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmV0dXJuX3plcm8pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTYzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTIxMS1cXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXFxubmV0L2NvcmUvc2ttc2cuYy0yMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjE3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI1MS1cXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTI1My17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcXG5uZXQvY29yZS9za21zZy5jLTI1Ny1cXG5uZXQvY29yZS9za21zZy5jOjI1ODp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWxfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXFx0XFx0XFx0XFx0ICB1MzIgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI2My1cXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjY1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcXG5uZXQvY29yZS9za21zZy5jLTMxMS1cXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTMxMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MzY5OmludCBza19tc2dfbWVtY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03NDktXFxubmV0L2NvcmUvc2ttc2cuYzo3NTA6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxubmV0L2NvcmUvc2ttc2cuYy03NTEte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04MDM9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XFxubmV0L2NvcmUvc2ttc2cuYy04MDQtXFxubmV0L2NvcmUvc2ttc2cuYzo4MDU6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04MDYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTg1My1cXG5uZXQvY29yZS9za21zZy5jOjg1NDp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg1NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg2ND1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODg4LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODg5OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04OTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MDc9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTE5LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTIwOmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc2ttc2cuYy05MjEtXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTQ2LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTY3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE2ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE2OS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMTc4OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNzkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNjAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjYxOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjYyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3MC1cXG5uZXQvY29yZS9za21zZy5jOjEyNzE6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjE2LjI5OTIxODM5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDMwNzIwODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBmb2N1c2luZyBvbiBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBhbmQgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGFzIGZvdW5kIGluIGBuZXQvY29yZS9za21zZy5jYCBsaW5lcyAxMTAwLTEyNzUuXG5cbioqRGlzc2VjdGluZyBQU09DSyBWZXJkaWN0IGFuZCBTdHJpbmcgUGFyc2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0IHNvY2tldHMgKHBzb2NrcykgaGFuZGxlIHZlcmRpY3QgcmVjZXB0aW9uIGFuZCBzdHJpbmctYmFzZWQgZGF0YSByZWFkcywgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyBpbiBwYWNrZXQgcHJvY2Vzc2luZy4gTG9va2luZyBhdCB0aGVzZSBsaW5lcywgSSBzZWUgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgbGlrZWx5IGhhbmRsZXMgcmVjZWl2aW5nIHZlcmRpY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgc29ja2V0LCBwcm9iYWJseSBhZnRlciBzb21lIHNvcnQgb2YgZmlsdGVyaW5nIG9yIHByb2Nlc3NpbmcuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBmYXRlIG9mIHRoZSBwYWNrZXQg4oCTIGRyb3AsIHF1ZXVlLCBvciBwZXJoYXBzIG1vZGlmaWNhdGlvbi4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIEknZCBiZXQgaXQgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc29ja2V0J3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1ha2UgdGhlc2UgZGVjaXNpb25zIGVmZmVjdGl2ZS5cblxuVGhlbiB0aGVyZSdzIGBza19wc29ja19zdHJwX3JlYWRgLiBUaGUgbmFtZSBzdWdnZXN0cyBhIHN0cmluZy1iYXNlZCBwYXJzaW5nIGZ1bmN0aW9uLCB1c2VkIHRvIGV4dHJhY3QgcmVsZXZhbnQgZGF0YSBmcm9tIGEgcmVjZWl2ZWQgcGFja2V0LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBtaWdodCBtYW5hZ2UgdGhpbmdzIGxpa2Ugc3RyaW5nIHRlcm1pbmF0aW9uIChudWxsIGNoYXJhY3RlcnM/KSwgaGFuZGxlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgaW1wbGVtZW50IHZhcmlvdXMgY2hlY2tzIGZvciB0aGUgZGF0YSB0byBhdm9pZCBleHBsb2l0YWJsZSBzaXR1YXRpb25zLiBJdOKAmXMgYWxzbyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgd29ya3MgaW4gdGFuZGVtIHdpdGggdGhlIHZlcmRpY3Q7IHRoZSByZXR1cm5lZCBzdHJpbmcsIG9yIHBhcnQgdGhlcmVvZiwgY291bGQgZGljdGF0ZSB0aGUgdmVyZGljdC4gSSdkIGJlIGxvb2tpbmcgY2xvc2VseSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IGl0IG1hbmFnZXMgYnVmZmVyIHJlc291cmNlcy4gQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUga2V5LCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHVuZXhwZWN0ZWQgZGF0YS4gQXJlIHRoZXJlIGFueSBib3VuZGFyeSBjaGVja3MsIHRpbWVvdXRzLCBvciBzYWZlZ3VhcmRzIGFnYWluc3QgbWFsaWNpb3VzIGlucHV0PyBBbnkgb2YgdGhlc2UgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgZGV0YWlscyBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIElzIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIHRyaWdnZXJlZCBmaXJzdCwgdGhlIHZlcmRpY3QgdGhlbiBjYWxscyBgc2tfcHNvY2tfc3RycF9yZWFkYCwgb3IgaXMgdGhlIGludGVyYWN0aW9uIG1vcmUgaW50ZXJ0d2luZWQ/IEhvdyBhcmUgdGhlIHBhcnNlZCBzdHJpbmdzIHVzZWQgaW4gdGhlIHZlcmRpY3QgZGVjaXNpb25zPyBUaGF0J3Mgd2hhdCBJJ2QgYmUgbG9va2luZyBmb3IgaW4gdGhvc2UgbGluZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHZlcmRpY3QsIHRoZSBwYXJzZWQgc3RyaW5nIGRhdGEsIGFuZCB0aGUgc3RhdGUgb2YgdGhlIHBhY2tldCBzb2NrZXQgaXMgZXNzZW50aWFsIGZvciBvcHRpbWl6aW5nIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MToyMS43Mjk5NDE5NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbjExMDE6XFx0XFx0XFx0c2tiLVxcdTAwM2VzayA9IE5VTEw7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxuMTEwNDpcXHRvdXQ6XFxuMTEwNTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbjExMDk6XFx0e1xcbjExMTA6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTExOlxcdH1cXG4xMTEyOlxcdFxcbjExMTM6XFx0c3RhdGljIGludCBza19wc29ja19zdHJwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuMTExNDpcXHR7XFxuMTExNTpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBza19wc29jaywgc3RycCk7XFxuMTExNjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTExNzpcXHRcXHRpbnQgcmV0ID0gc2tiLVxcdTAwM2VsZW47XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMTIwOlxcdFxcdHByb2cgPSBSRUFEX09OQ0UocHNvY2stXFx1MDAzZXByb2dzLnN0cmVhbV9wYXJzZXIpO1xcbjExMjE6XFx0XFx0aWYgKGxpa2VseShwcm9nKSkge1xcbjExMjI6XFx0XFx0XFx0c2tiLVxcdTAwM2VzayA9IHBzb2NrLVxcdTAwM2VzaztcXG4xMTIzOlxcdFxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxuMTEyNDpcXHRcXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4xMTI1OlxcdFxcdH1cXG4xMTI2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0LyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cXG4xMTMxOlxcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuMTEzMjpcXHR7XFxuMTEzMzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjExMzQ6XFx0XFxuMTEzNTpcXHRcXHR0cmFjZV9za19kYXRhX3JlYWR5KHNrKTtcXG4xMTM2OlxcdFxcbjExMzc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjExMzg6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTEzOTpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjExNDA6XFx0XFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuMTE0MTpcXHRcXHRcXHRzdHJwX2RhdGFfcmVhZHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VzdHJwKTtcXG4xMTQyOlxcdFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuMTE0MzpcXHRcXHR9XFxuMTE0NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTQ1OlxcdH1cXG4xMTQ2OlxcdFxcbjExNDc6XFx0aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTE0ODpcXHR7XFxuMTE0OTpcXHRcXHRpbnQgcmV0O1xcbjExNTA6XFx0XFxuMTE1MTpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xcbjExNTI6XFx0XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG4xMTUzOlxcdFxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxuMTE1NDpcXHRcXHRcXHQucGFyc2VfbXNnXFx0PSBza19wc29ja19zdHJwX3BhcnNlLFxcbjExNTU6XFx0XFx0fTtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0cmV0ID0gc3RycF9pbml0KFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCwgc2ssIFxcdTAwMjZjYik7XFxuMTE1ODpcXHRcXHRpZiAoIXJldClcXG4xMTU5OlxcdFxcdFxcdHNrX3Bzb2NrX3NldF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfUlhfU1RSUF9FTkFCTEVEKTtcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpIHtcXG4xMTYyOlxcdFxcdFxcdHBzb2NrLVxcdTAwM2VzdHJwLmNiLnJlYWRfc29jayA9IHRjcF9icGZfc3RycF9yZWFkX3NvY2s7XFxuMTE2MzpcXHRcXHRcXHRwc29jay1cXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXFx1MDAzZWNvcGllZF9zZXE7XFxuMTE2NDpcXHRcXHR9XFxuMTE2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjY6XFx0fVxcbjExNjc6XFx0XFxuMTE2ODpcXHR2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbjExNjk6XFx0e1xcbjExNzA6XFx0XFx0aWYgKHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KVxcbjExNzE6XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbjExNzQ6XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSwgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KTtcXG4xMTc1OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XFxuMTE3NjpcXHR9XFxuMTE3NzpcXHRcXG4xMTc4OlxcdHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4xMTc5OlxcdHtcXG4xMTgwOlxcdFxcdHBzb2NrX3NldF9wcm9nKFxcdTAwMjZwc29jay1cXHUwMDNlcHJvZ3Muc3RyZWFtX3BhcnNlciwgTlVMTCk7XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmICghcHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXFxuMTE4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KTtcXG4xMTg2OlxcdFxcdFdSSVRFX09OQ0UocHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHksIE5VTEwpO1xcbjExODc6XFx0XFx0c3RycF9zdG9wKFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCk7XFxuMTE4ODpcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbjExOTE6XFx0e1xcbjExOTI6XFx0XFx0LyogUGFyc2VyIGhhcyBiZWVuIHN0b3BwZWQgKi9cXG4xMTkzOlxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19SWF9TVFJQX0VOQUJMRUQpKVxcbjExOTQ6XFx0XFx0XFx0c3RycF9kb25lKFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCk7XFxuMTE5NTpcXHR9XFxuMTE5NjpcXHQjZWxzZVxcbjExOTc6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTE5ODpcXHR7XFxuMTE5OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjIxLjczMDA0Mzk2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQyNTcxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJ20gXCJ0aGlua2luZ1wiIGJhc2VkIG9uIHRoYXQgcHJvbXB0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gd2hhdCBjb21lcyBhZnRlciBsaW5lIDEyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBzdWJzZXF1ZW50IHNlY3Rpb25zLiBJdCdzIG5vdCBhYm91dCBwYXNzaXZlbHkgcmVhZGluZzsgaXQncyBhYm91dCBhY3RpdmVseSBwcm9jZXNzaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlIGRhdGEgdGhhdCBsaWVzIGJleW9uZCB0aGlzIHBvaW50LCBhbmQgaG93IGl0IGluZm9ybXMgbXkgZXhwZXJ0aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcmVsZXZhbmNlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjb3BlIG9mIHRoZSBzdWJqZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MjUuNDcyNjE4NjU0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbjEyMDE6XFx0XFxuMTIwMjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTIwMzpcXHR7XFxuMTIwNDpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEyMDU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjEyMDY6XFx0XFx0aW50IHJldCA9IF9fU0tfRFJPUDtcXG4xMjA3OlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMjA4OlxcdFxcbjEyMDk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyMTA6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTIxMTpcXHRcXHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xcbjEyMTI6XFx0XFx0XFx0bGVuID0gMDtcXG4xMjEzOlxcdFxcdFxcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xcbjEyMTQ6XFx0XFx0XFx0c29ja19kcm9wKHNrLCBza2IpO1xcbjEyMTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxNjpcXHRcXHR9XFxuMTIxNzpcXHRcXHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVxcdTAwM2Vwcm9ncy5zdHJlYW1fdmVyZGljdCk7XFxuMTIxODpcXHRcXHRpZiAoIXByb2cpXFxuMTIxOTpcXHRcXHRcXHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVxcdTAwM2Vwcm9ncy5za2JfdmVyZGljdCk7XFxuMTIyMDpcXHRcXHRpZiAobGlrZWx5KHByb2cpKSB7XFxuMTIyMTpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xMjIyOlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4xMjIzOlxcdFxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxuMTIyNDpcXHRcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxuMTIyNTpcXHRcXHR9XFxuMTIyNjpcXHRcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxuMTIyNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjI4OlxcdFxcdFxcdGxlbiA9IHJldDtcXG4xMjI5OlxcdG91dDpcXG4xMjMwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEyMzE6XFx0XFx0cmV0dXJuIGxlbjtcXG4xMjMyOlxcdH1cXG4xMjMzOlxcdFxcbjEyMzQ6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4xMjM1OlxcdHtcXG4xMjM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IE5VTEw7XFxuMTIzNzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEyMzg6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMjM5OlxcdFxcdGludCBjb3BpZWQ7XFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdHRyYWNlX3NrX2RhdGFfcmVhZHkoc2spO1xcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTI0NDpcXHRcXHRzb2NrID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQpO1xcbjEyNDU6XFx0XFx0aWYgKGxpa2VseShzb2NrKSlcXG4xMjQ2OlxcdFxcdFxcdG9wcyA9IFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpO1xcbjEyNDc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTI0ODpcXHRcXHRpZiAoIW9wcyB8fCAhb3BzLVxcdTAwM2VyZWFkX3NrYilcXG4xMjQ5OlxcdFxcdFxcdHJldHVybjtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0Y29waWVkID0gb3BzLVxcdTAwM2VyZWFkX3NrYihzaywgc2tfcHNvY2tfdmVyZGljdF9yZWN2KTtcXG4xMjUyOlxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcbjEyNTM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyNTQ6XFx0XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTI1NTpcXHRcXHRcXHRpZiAocHNvY2spXFxuMTI1NjpcXHRcXHRcXHRcXHRza19wc29ja19kYXRhX3JlYWR5KHNrLCBwc29jayk7XFxuMTI1NzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjU4OlxcdFxcdH1cXG4xMjU5OlxcdH1cXG4xMjYwOlxcdFxcbjEyNjE6XFx0dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4xMjYyOlxcdHtcXG4xMjYzOlxcdFxcdGlmIChwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSlcXG4xMjY0OlxcdFxcdFxcdHJldHVybjtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeTtcXG4xMjY3OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XFxuMTI2ODpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xcbjEyNjk6XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHR2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRwc29ja19zZXRfcHJvZyhcXHUwMDI2cHNvY2stXFx1MDAzZXByb2dzLnN0cmVhbV92ZXJkaWN0LCBOVUxMKTtcXG4xMjc0OlxcdFxcdHBzb2NrX3NldF9wcm9nKFxcdTAwMjZwc29jay1cXHUwMDNlcHJvZ3Muc2tiX3ZlcmRpY3QsIE5VTEwpO1xcbjEyNzU6XFx0XFxuMTI3NjpcXHRcXHRpZiAoIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KVxcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5LCBwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjI1LjQ3Mjc1NjE2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE3MTE4Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYG5ldC9jb3JlL3NrbXNnLmNgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IEkgc2hvdWxkIGFsc28gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHNlYXJjaCBmb3Igd2hlcmUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGNhbGxlZC4gVGhhdCBzaG91bGQgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IGl0IGlzIHVzZWQuIEknbGwgYWxzbyBiZSBzdXJlIHRvIGNoZWNrIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBncmVhdGVyIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSB1c2VzIG9mIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBhbmQgYHNrX3Bzb2NrX2luaXRgLCBiZWNhdXNlIHRob3NlIGFyZSBsaWtlbHkgaW50ZWdyYWwgdG8gdGhlIHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MjkuNTg5ODc3ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk1MzEzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdHxza19wc29ja19pbml0X3N0cnB8c29ja19tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTA1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTQ9YW4gb3V0ZXIgbWFwIGNvbnRhaW5zIGluc3RhbmNlcyBvZiBhIHNpbmdsZSB0eXBlIG9mIGlubmVyIG1hcCwgZm9yIGV4YW1wbGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6MTU6YGBhcnJheV9vZl9tYXBzLVxcdTAwM2Vzb2NrX21hcGBgLlxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0xMTk9c29ja2V0IGVudHJpZXMgb2YgdHlwZSBgYHN0cnVjdCBzb2NrICpgYCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyMS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q6MTIyOmJwZl9zb2NrX21hcF91cGRhdGUoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0xMjMtXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDoxMjY6ICAgIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0zNTQ9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBzb2NrbWFwLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM2Mi1cXHRcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q6MzYzOlxcdH0gc29ja19tYXBfcnggU0VDKFxcXCIubWFwc1xcXCIpO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9Mzc2PXNvY2ttYXAgdG8gcmVkaXJlY3QgdHJhZmZpYyB0byBhbm90aGVyIHNvY2tldCBiYXNlZCBvbiB0aGUgbG9jYWwgcG9ydC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zODYtXFx0XFx0aWYgKGxwb3J0ID09IDEwMDAwKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDozODc6XFx0XFx0XFx0cmV0dXJuIGJwZl9za19yZWRpcmVjdF9tYXAoc2tiLCBcXHUwMDI2c29ja19tYXBfcngsIGlkeCwgMCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4OC1cXG4tLVxcbk1BSU5UQUlORVJTPTQ5NzE9RjpcXHRuZXQvY29yZS9za21zZy5jXFxuTUFJTlRBSU5FUlM6NDk3MjpGOlxcdG5ldC9jb3JlL3NvY2tfbWFwLmNcXG5NQUlOVEFJTkVSUy00OTczLUY6XFx0bmV0L2lwdjQvdGNwX2JwZi5jXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00OT1zdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciB7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1NDpzdHJ1Y3Qgc29ja19tYXBwaW5nIHtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz03NT1zdHJ1Y3Qgc29ja3Bhc3NfbWFwcGluZyB7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04Ni1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo4NzpzdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2Nvbm5fZXZlbnQoaW50IGlycSwgdm9pZCAqc29ja19tYXApO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTg4LXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX3JlbGVhc2VfYWN0aXZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtODktXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhLFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkxLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTkyPXN0YXRpYyBib29sIHB2Y2FsbHNfY29ubl9iYWNrX3JlYWQodm9pZCAqb3BhcXVlKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkzLXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5NDpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSAoc3RydWN0IHNvY2tfbWFwcGluZyAqKW9wYXF1ZTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05NS1cXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2Ny1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzoxNjg6c3RhdGljIGJvb2wgcHZjYWxsc19jb25uX2JhY2tfd3JpdGUoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz0yMzA9c3RhdGljIHZvaWQgcHZjYWxsc19iYWNrX2lvd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTIzMy1cXHRcXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciwgcmVnaXN0ZXJfd29yayk7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjM0OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IGNvbnRhaW5lcl9vZihpb3dvcmtlciwgc3RydWN0IHNvY2tfbWFwcGluZyxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0yMzUtXFx0XFx0aW93b3JrZXIpO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9Mjg5PXN0YXRpYyB2b2lkIHB2Y2FsbHNfc2tfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTI5MC17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjkxOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0yOTItXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz0zMDA9c3RhdGljIHZvaWQgcHZjYWxsc19za19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMwMS17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzAyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDMtXFx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIgKmlvdztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzozMTY6c3RhdGljIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfbmV3X2FjdGl2ZV9zb2NrZXQoXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzE3LVxcdFxcdHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhLFxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzIzLVxcdGludCByZXQ7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzI0OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMjUtXFx0dm9pZCAqcGFnZTtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTM5Mj1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19jb25uZWN0KHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zOTctXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzozOTg6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTM5OS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVzcG9uc2UgKnJzcDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTQzNj1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlX2FjdGl2ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQzNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDM4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTQ3OD1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy00ODEtXFx0c3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGE7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDgyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDgzLVxcdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9NTE2PXN0YXRpYyB2b2lkIF9fcHZjYWxsc19iYWNrX2FjY2VwdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01MjMtXFx0fTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1MjQ6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTUyNS1cXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9ODkwPXN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2JhY2tfZXZlbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTA4LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkwOTpzdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2Nvbm5fZXZlbnQoaW50IGlycSwgdm9pZCAqc29ja19tYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEwLXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MTE6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEyLVxcdHN0cnVjdCBwdmNhbGxzX2lvd29ya2VyICppb3c7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05OTc9c3RhdGljIGludCBiYWNrZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTk5OS1cXHRzdHJ1Y3QgcHZjYWxsc19mZWRhdGEgKmZlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzoxMDAwOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMTAwMS1cXHRzdHJ1Y3Qgc29ja3Bhc3NfbWFwcGluZyAqbWFwcGFzcztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NT1zdGF0aWMgYXRvbWljX3QgcHZjYWxsc19yZWZjb3VudDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy01Ni1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NTc6c3RydWN0IHNvY2tfbWFwcGluZyB7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4LVxcdGJvb2wgYWN0aXZlX3NvY2tldDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05My1cXHRcXHRcXHR1aW50MzJfdCBpbmZsaWdodF9yZXFfaWQ7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk0OlxcdFxcdFxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKmFjY2VwdF9tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk1LVxcdFxcdFxcdHdhaXRfcXVldWVfaGVhZF90IGluZmxpZ2h0X2FjY2VwdF9yZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtOTktXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfZW50ZXJfc29jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDEte1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDI6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDMtXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA3LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDg6XFx0bWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfc2VuZF9oZWFkO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDktXFx0aWYgKG1hcCA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTExNz1zdGF0aWMgaW5saW5lIHZvaWQgcHZjYWxsc19leGl0X3NvY2soc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTE4LXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTE5OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIwLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMjE6XFx0bWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfc2VuZF9oZWFkO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMjItXFx0YXRvbWljX2RlYyhcXHUwMDI2bWFwLVxcdTAwM2VyZWZjb3VudCk7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTQwPXN0YXRpYyBpbnQgcHZjYWxsc19mcm9udF93YWl0X3JzcChzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSwgdTMyIHJlcV9pZClcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNDgtXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjE0OTpzdGF0aWMgYm9vbCBwdmNhbGxzX2Zyb250X3dyaXRlX3RvZG8oc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNTAte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTE2NS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTY2OnN0YXRpYyBib29sIHB2Y2FsbHNfZnJvbnRfcmVhZF90b2RvKHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcClcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xODA9c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjIzLVxcdFxcdGlmIChyc3AtXFx1MDAzZWNtZCA9PSBQVkNBTExTX1BPTEwpIHtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjI0OlxcdFxcdFxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopKHVpbnRwdHJfdClcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHJzcC1cXHUwMDNldS5wb2xsLmlkO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Mi1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjYzOnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjY0LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0yNjU9c3RhdGljIHZvaWQgcHZjYWxsc19mcm9udF9kZXN0cm95X2FjdGl2ZShzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjY2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Ny17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Mjg1PXN0YXRpYyB2b2lkIHB2Y2FsbHNfZnJvbnRfZnJlZV9tYXAoc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjI4NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjkyLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTM6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfY29ubl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0yOTQte1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5Ni1cXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0zMDU9aW50IHB2Y2FsbHNfZnJvbnRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA3LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozMDg6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA5LVxcdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzQ2LVxcdCAqIHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zZW5kX2hlYWQgaXMgbm90IHVzZWQgZm9yIGlwIHNvY2tldHM6IHJldXNlIHRoZVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozNDc6XFx0ICogZmllbGQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc29ja19tYXBwaW5nXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM0OC1cXHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb2NrZXQuIFRoaXMgd2F5LCB3ZSBjYW4gZWFzaWx5IGdldCB0aGVcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MzQ5OlxcdCAqIHN0cnVjdCBzb2NrX21hcHBpbmcgZnJvbSB0aGUgc3RydWN0IHNvY2tldC5cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzUwLVxcdCAqL1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTM4Mj1FWFBPUlRfU1lNQk9MX0dQTChwdmNhbGxzX2Zyb250X3NvY2tldCk7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM4My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzg0OnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zODUte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM5My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzk0OnN0YXRpYyBpbnQgYWxsb2NfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zOTUte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTQxOS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NDIwOnN0YXRpYyBpbnQgY3JlYXRlX2FjdGl2ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsIGV2dGNobl9wb3J0X3QgKmV2dGNobilcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDIxLXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NjE9aW50IHB2Y2FsbHNfZnJvbnRfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDY0LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo0NjU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDY2LVxcdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9NTg0PWludCBwdmNhbGxzX2Zyb250X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4Ni17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjU4NzpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4OC1cXHRpbnQgc2VudCwgdG90X3NlbnQgPSAwO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTY3OD1pbnQgcHZjYWxsc19mcm9udF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODEtXFx0aW50IHJldDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NjgyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNjgzLVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTcxNT1pbnQgcHZjYWxsc19mcm9udF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxNy1cXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NzE4OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEw7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxOS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTc3Mj1pbnQgcHZjYWxsc19mcm9udF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNzc0LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo3NzU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03NzYtXFx0c3RydWN0IHhlbl9wdmNhbGxzX3JlcXVlc3QgKnJlcTtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz04MjU9aW50IHB2Y2FsbHNfZnJvbnRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtODI4LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4Mjk6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4MzA6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwMiA9IE5VTEw7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTgzMS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTk3OT1zdGF0aWMgX19wb2xsX3QgcHZjYWxsc19mcm9udF9wb2xsX3Bhc3NpdmUoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk4MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05ODItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTAzNj1zdGF0aWMgX19wb2xsX3QgcHZjYWxsc19mcm9udF9wb2xsX2FjdGl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTAzNy1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTAzODpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMzktXFx0XFx0XFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDU5PV9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDYyLVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDYzOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2NC1cXHRfX3BvbGxfdCByZXQ7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTA4MD1pbnQgcHZjYWxsc19mcm9udF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA4Mi1cXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTA4MzpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODQtXFx0aW50IHJlcV9pZCwgbm90aWZ5LCByZXQ7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTE3MD1zdGF0aWMgdm9pZCBwdmNhbGxzX2Zyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzItXFx0c3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGE7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjExNzM6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTM9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjU2LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY1NzppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjU4OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTk6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjI6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2My1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjQ6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjU6dm9pZCBzb2NrX21hcF9kZXN0cm95KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjY2OnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2Ny0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzMwPXN0YXRpYyBpbmxpbmUgaW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3Mzg6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDMtXFxuaW5jbHVkZS9saW51eC9icGYuaDozNzQ0OnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0NS1cXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzQ5LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MDpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTEtXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzU1LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1NjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTctXFx0XFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzYxLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc2MjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc2My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4ODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzg4NTpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zODg2LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfaGFzaF91cGRhdGVfcHJvdG87XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTExOT1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEyMjpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIHNvY2tfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMy1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tIQVNILCBzb2NrX2hhc2hfb3BzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTQzNz12b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDM5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDQwOmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQxLXZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NDI9dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0NDpzdGF0aWMgaW5saW5lIGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTctXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzExMy0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozMTE0OiAqIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMxMTUtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU1LVxcdEZOKHNrX3JlZGlyZWN0X21hcCwgNTIsICMjY3R4KVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjA1NjpcXHRGTihzb2NrX21hcF91cGRhdGUsIDUzLCAjI2N0eClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYwNTctXFx0Rk4oeGRwX2FkanVzdF9tZXRhLCA1NCwgIyNjdHgpXFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUwPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjYzLVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjQ6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjUtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ1Nzk9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDYyMjpcXHRcXHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIzLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDY0OD1zdGF0aWMgaW50IGJwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2ODEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjgyOlxcdFxcdHJldCA9IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGF0dHIsIHB0eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjgzLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDcxOD1zdGF0aWMgaW50IGJwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2Ny1cXHRjYXNlIEJQRl9TS19TS0JfVkVSRElDVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NzY4OlxcdFxcdHJldHVybiBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2OS1cXHRjYXNlIEJQRl9UQ1hfSU5HUkVTUzpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODU3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg1ODpcXHRcXHRyZXQgPSBzb2NrX21hcF9saW5rX2NyZWF0ZShhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODU5LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjM9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5NC1cXHRcXHRpZiAoZnVuY19pZCAhPSBCUEZfRlVOQ19za19yZWRpcmVjdF9tYXAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA5NTpcXHRcXHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGUgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5Ni1cXHRcXHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19tc2dfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwNS1cXHRjYXNlIEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkyMDY6XFx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDctXFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NzU5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODgyOS1cXG5uZXQvY29yZS9maWx0ZXIuYzo4ODMwOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2VhaztcXG5uZXQvY29yZS9maWx0ZXIuYy04ODMxLWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19oYXNoX3VwZGF0ZV9wcm90byBfX3dlYWs7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04ODM0PXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODQ4LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODQ5OlxcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NTA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NTEtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2hhc2hfdXBkYXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE3MzM9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzUwLVxcdFxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE3NTE6XFx0XFx0ICogT3RoZXIgbWFwcyAoZS5nLiBzb2NrX21hcCkgZG8gbm90IHByb3ZpZGUgdGhpcyBndWFyYW50ZWUgYW5kXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE3NTItXFx0XFx0ICogdGhlIHNrIG1heSBuZXZlciBiZSBpbiB0aGUgcmV1c2Vwb3J0IGdyb3VwIHRvIGJlZ2luIHdpdGguXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3NS1lcnJvcjpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTc3NjpcXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3Ny1cXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjg4LVxcdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cXG5uZXQvY29yZS9za21zZy5jOjY4OTpcXHQgKiBzb2NrX21hcF9jbG9zZSgpLCBlbnN1cmluZyB3ZSB3YWl0IGZvciBiYWNrbG9nIHRocmVhZCBjb21wbGV0aW9uXFxubmV0L2NvcmUvc2ttc2cuYy02OTAtXFx0ICogYmVmb3JlIHNrX3NvY2tldCBmcmVlZC4gSWYgcmVmY250IGluY3JlbWVudCBmYWlscywgaXQgaW5kaWNhdGVzXFxubmV0L2NvcmUvc2ttc2cuYzo2OTE6XFx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cXG5uZXQvY29yZS9za21zZy5jLTY5Mi1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTA1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTA2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXFxubmV0L2NvcmUvc2ttc2cuYy05MDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LVxcdG1zZy1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrbXNnLmM6OTM3OlxcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVxcdTAwM2Vza19yZWRpcik7XFxubmV0L2NvcmUvc2ttc2cuYy05MzgtXFx0cHNvY2stXFx1MDAzZWFwcGx5X2J5dGVzID0gbXNnLVxcdTAwM2VhcHBseV9ieXRlcztcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA5OS1cXHRcXHRza2JfYnBmX3NldF9zdHJwYXJzZXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjExMDA6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMS1cXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTQ2LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMy1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNDpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIzND1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI2MTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI2Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXFx0X19hY3F1aXJlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cXHUwMDNlbWFwO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyOlxcdFxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0OlxcdFxcdHNvY2tfbWFwX2RlbF9saW5rKHNrLCBwc29jaywgbGlua19yYXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1LVxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozMS44Njk0MTQ3MjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwMjQ0MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIGluIGBuZXQvY29yZS9za21zZy5jYCwgSSBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIHN1Y2ggYXMgYHNrX3Bzb2NrX2luaXRgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfc3RvcGAsIGFuZCBgc2tfbXNnX3JlY3Ztc2dgLiBUaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbGx5IHJlbGV2YW50IGhvb2tzIG9yIGVudHJ5IHBvaW50cy5cblxuTmV4dCwgb3ZlciBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYXR0ZW50aW9uIGFyZSBgdGNwX2VhdF9za2JgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4gSSdsbCBoYXZlIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLlxuXG5GaW5hbGx5LCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AsIEknbSBsb29raW5nIGF0IGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF9wcm9nX2RldGFjaGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBhbmQgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYC4gVGhlc2Ugc2hvdWxkIGJlIHJldmVhbGluZyBhYm91dCB0aGUgbWFwJ3Mgcm9sZS5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXBlciBsb29rIGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzQuODcxODU3ODU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5OTM3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB8XnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjg2OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTktXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1Mzc9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzMtXFx0XFx0XFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2MzU9c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY0NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY0Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjcyOnZvaWQgc29ja19tYXBfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTY5OT1FWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF9kZXN0cm95KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzAxOnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAyLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzUuMDE1ODU3Mzc4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NjY4OTIwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBTY3J1dGlueSBmb3IgRW5oYW5jZWQgTmV0d29ya2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwcm9wZXIgS2NvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIHRvIHN1cHBvcnQgbXkgd29yayB3aXRoIGBCUEZfU1RSRUFNX1BBUlNFUmAsIGBORVRfU09DS19NU0dgLCBhbmQgYEJQRl9TWVNDQUxMYCwgYW5kIG9mIGNvdXJzZSwgYElORVRgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciB3aGF0IEknbSBkb2luZy4gTXkgZmlyc3QgcG9pbnQgb2YgY2FsbCBpcyBga2VybmVsL2JwZi9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIGluIHBsYWNlIGZvciB0aGUga2VybmVsIGNvbXBvbmVudHMgSSdtIHJlbHlpbmcgb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjM2LjY4Mjc1Mjc5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MDI0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzYuNzI3NjYxMDk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzg0NDA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIEJQRl9TWVNDQUxMIGluIHRoZSBLZXJuZWwgQ29uZmlnKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJQRl9TWVNDQUxMYCDigJMgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGl0IGVuYWJsZXMuIFRoZSBmaXJzdCBwbGFjZSBJJ2xsIGhlYWQgaXMgYWx3YXlzIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNldHRpbmdzIGFyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBmaWxlLCBsb29raW5nIGZvciB0aGUgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgYmxvY2suIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLCBhbmQgKndoYXQqIHRob3NlIGRlcGVuZGVuY2llcyByZXByZXNlbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBjb250ZXh0IHdpbGwgbGV0IG1lIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIHN1cHBvcnRpbmcgZmVhdHVyZXMgbmVlZCB0byBiZSBhY3RpdmUgYW5kIHRvIGFudGljaXBhdGUgYW55IGNvbmZsaWN0cy4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozOC45NjYxMDUwMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozOC45NjYyMDkyODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTQ4MDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRl9TVFJFQU1fUEFSU0VSIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMgaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIGhlcmUgaXQgaXM6IGBjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgaXQgZGVwZW5kcyBvbiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIEl0IGFsc28gKnNlbGVjdHMqIGBTVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHN0cmVhbSBwYXJzaW5nIG9mdGVuIGludm9sdmVzIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBpcyBjZW50cmFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDR1JPVVBfQlBGYCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYmVjYXVzZSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBkZXBlbmRlbnQgb24gaXQuIFNvLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDR1JPVVBfQlBGYCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm91bmQgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB0byBlbnN1cmUgZXZlcnl0aGluZyBhbGlnbnMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6NDEuMjgxNjkyMTIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxNDAxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjQyLjgwMzEwMjg2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNjQzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHN5c3RlbSBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGluaXQvS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoaXMgc3BlY2lmaWMgb3B0aW9uJ3MgYmVoYXZpb3Igb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIGxpbmUgMTM1NiBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VjdGlvbiB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCB5b3VyIGV4cGVydCBrbm93bGVkZ2UgYWJvdXQgdGhlIGdlbmVyYWwgYXJlYSBjb3ZlcmVkIGJ5IGxpbmUgMTM1NiwgZS5nLiwgXCJlYXJseSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyxcIiBcImRldmljZSBkcml2ZXIgaW50ZWdyYXRpb24sXCIgXCJhIHNwZWNpZmljIHN1YnN5c3RlbSBJIGtub3cgd2VsbFwiXS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIFttZW50aW9uIHlvdXIgZXhwZWN0YXRpb25zLCBlLmcuLCBcImEgYm9vbGVhbiBvcHRpb24sXCIgXCJhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbixcIiBcImEgbWVudSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IGNvbXBvbmVudFwiXS4gSG9wZWZ1bGx5LCB0aGlzIGxpbmUgd2lsbCBnaXZlIG1lIHRoZSBrZXkgSSBuZWVkIHRvIHVubG9jayB0aGUgcHV6emxlIEknbSBjdXJyZW50bHkgc29sdmluZy4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjQ1LjQ2Mzc0OTUyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTU6XFx0XFxuMTM1NjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTc6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTk6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzYwOlxcdFxcdGhlbHBcXG4xMzYxOlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNjI6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNjM6XFx0XFxuMTM2NDpcXHRcXHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcXG4xMzY1OlxcdFxcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xcbjEzNjY6XFx0XFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcXG4xMzY3OlxcdFxcdCAgaW5ldCBzb2NrZXRzLlxcbjEzNjg6XFx0XFxuMTM2OTpcXHRjb25maWcgQ0dST1VQX01JU0NcXG4xMzcwOlxcdFxcdGJvb2wgXFxcIk1pc2MgcmVzb3VyY2UgY29udHJvbGxlclxcXCJcXG4xMzcxOlxcdFxcdGRlZmF1bHQgblxcbjEzNzI6XFx0XFx0aGVscFxcbjEzNzM6XFx0XFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cXG4xMzc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTo0NS40NjM4NjgwMDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg2Mjc0Mzk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hlcmUgd2UncmUgYXQgd2l0aCB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQg4oCTIHNwZWNpZmljYWxseSwgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0ZWQgc3ltYm9scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgdXNhYmxlLiBJIHNlZSBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFyZSB0aGUga2V5IGZpbGVzLiBJJ20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja21hcCB2ZXJkaWN0IHJlZGlyZWN0aW9uLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gdmVyaWZ5OiBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAsIGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGBza19wc29ja19zdG9wX3N0cnBgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc29ja19tYXBfZ2V0X2Zyb21fZmRgLCBgc29ja19tYXBfcHJvZ19kZXRhY2hgLCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YCwgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCwgYHRjcF9lYXRfc2tiYCwgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGFjdHVhbGx5IGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLlxuXG5JJ3ZlIGdvbmUgdGhyb3VnaCB0aGUga2VybmVsIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSwgYXMgZXhwZWN0ZWQsIG5vbi1zdGF0aWMuIFNwZWNpZmljYWxseSwgSSd2ZSBjaGVja2VkIHRoZSBzeW1ib2xzIGluIHRoZSB2YXJpb3VzIGZpbGVzLiBUaGUgdmVyaWZpY2F0aW9uIGNvbmZpcm1zIHRoZSBzeW1ib2xzIGxpc3RlZCBhbmQgdGhlIHJlbGV2YW50IGV4cG9ydCBzeW1ib2xzOlxuSW4gYG5ldC9jb3JlL3NrbXNnLmNgOlxuLSBgc2tfcHNvY2tfaW5pdGAgKEVYUE9SVF9TWU1CT0xfR1BMKVxuLSBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIChFWFBPUlRfU1lNQk9MX0dQTClcbi0gYHNrX3Bzb2NrX2luaXRfc3RycGBcbi0gYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgXG4tIGBza19wc29ja19zdG9wX3N0cnBgXG4tIGBza19wc29ja19zdGFydF92ZXJkaWN0YFxuLSBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YFxuLSBgc2tfcHNvY2tfZHJvcGAgKEVYUE9SVF9TWU1CT0xfR1BMKVxuLSBgc2tfcHNvY2tfc3RvcGBcbi0gYHNrX21zZ19yZWN2bXNnYFxuXG5JbiBgbmV0L2NvcmUvc29ja19tYXAuY2A6XG4tIGBzb2NrX21hcF9nZXRfZnJvbV9mZGBcbi0gYHNvY2tfbWFwX3Byb2dfZGV0YWNoYFxuLSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYFxuLSBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgXG4tIGBzb2NrX21hcF9saW5rX2NyZWF0ZWBcbi0gYHNvY2tfbWFwX2Rlc3Ryb3lgXG4tIGBzb2NrX21hcF9jbG9zZWBcblxuSW4gYG5ldC9pcHY0L3RjcF9icGYuY2A6XG4tIGB0Y3BfZWF0X3NrYmBcbi0gYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgXG4tIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgXG5cbkZpbmFsbHksIGJlZm9yZSBJIHNpZ24gb2ZmLCBsZXQncyBjb25maXJtIG15IGZpbmFsIGNoZWNrOiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoZSBlbmFibGUgY29uZmlncyBhcmUgY29ycmVjdCwgdGhlIGZvY3VzZWQgc3ltYm9scyBhcmUgcmVsZXZhbnQgYW5kIGFjY2Vzc2libGUsIGFuZCB0aGVyZSdzIGEgY2xlYXIgcmVhc29uIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IChzb2NrbWFwIHZlcmRpY3QgcmVkaXJlY3Rpb24pLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBjb25maWRlbnQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDk0LCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjUxLjMyNjYxNDc2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzk4MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfZGV0YWNoXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX2NyZWF0ZVwiLFxuICAgIFwic2tfcHNvY2tfaW5pdFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0b3Bfc3RycFwiLFxuICAgIFwidGNwX2VhdF9za2JcIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwic29ja19tYXBfcHJvZ19kZXRhY2hcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJza19wc29ja19pbml0XCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19zdG9wX3ZlcmRpY3RcIixcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF9zdHJwXCIsXG4gICAgXCJ0Y3BfZWF0X3NrYlwiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVxcdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjUxLjM5ODQxOTUzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NTE1MTY2MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTo1MS4zOTg5MzA5NzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjU1MTAwMTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbitcdGNhc2UgX19TS19SRURJUkVDVDoge1xuK1x0XHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1xuK1x0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxuK1x0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6NTEuMzk4OTMxOTExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzUyMDc5OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciBpdCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggcmlzayBhbmQgc2FmZXR5LCBzbyBsZXQncyBicmVhayB0aGF0IGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlcmUgd2VyZSBkZWZlbnNpdmUgY29kZSByZXZpZXdzLCBhbmQgaWYgc28sIGhvdyB0aGF0IG1heSBhZmZlY3Qgc2FuaXRpemVyIHNlbGVjdGlvbiwgZXNwZWNpYWxseSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGJlbmlnbiB0YXNrLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgX19TS19SRURJUkVDVGAgY2FzZS4gV2UndmUgZ290IGEgbmV3IHNjb3BlIGJsb2NrIGFyb3VuZCB0aGUgYHRjcF9lYXRfc2tiYCBjYWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwuIFNvLCBwcmV2aW91c2x5LCBgdGNwX2VhdF9za2JgIHdhcyB1bmNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGJyYW5jaC4gTm93LCBpdCdzIG9ubHkgY2FsbGVkIGlmIGBkc3QgIT0gcHNvY2stXHUwMDNlc2tgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2UsIGFuZCBteSBicmFpbiBpcyBzY3JlYW1pbmcgXCJuZXcgcGF0aCwgbmV3IGJ1Z3MhXCIuXG5cbk15IG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBpcyBkb2luZyBhbmQgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2NvcmUvc2ttc2cuY2AgcGljdHVyZS4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgbXkgcmVhZC1maWxlIHRvb2wgb3IgZmlyZSB1cCBhIHF1aWNrIGBncmVwcGVyYCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdXNlZCBlbHNld2hlcmUsIGFuZCBpdHMgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb25kaXRpb25hbCBgdGNwX2VhdF9za2JgIGNhbGwuIFNwZWNpZmljYWxseSwgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCBob3cgYGRzdGAgaXMgb2J0YWluZWQgZnJvbSB0aGUgYHNrYmAgYW5kIGhvdyBpdCBjb3VsZCBkaXZlcmdlIGZyb20gYHBzb2NrLVx1MDAzZXNrYCBpZiB0aGUgY29kZSBmbG93IGlzIGFmZmVjdGVkLiBJZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhhdCBtaWdodCB0aXAgbWUgb25lIHdheSBvciB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNC4xNTEwMTQ3MjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAyMDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDIxOlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyMjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI2OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAyNzpcXHRcXHRcXHRcXHR9XFxuMTAyODpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzM6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMDM2OlxcdFxcdFxcdFxcdH1cXG4xMDM3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM4OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4xMDQwOlxcdFxcdFxcdH1cXG4xMDQxOlxcdFxcdFxcdGJyZWFrO1xcbjEwNDI6XFx0XFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XFxuMTA0MzpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbjEwNDQ6XFx0XFxuMTA0NTpcXHRcXHRcXHRpZiAoZHN0ICE9IHBzb2NrLVxcdTAwM2VzaylcXG4xMDQ2OlxcdFxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDQ3OlxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4xMDQ4OlxcdFxcdFxcdGJyZWFrO1xcbjEwNDk6XFx0XFx0fVxcbjEwNTA6XFx0XFx0Y2FzZSBfX1NLX0RST1A6XFxuMTA1MTpcXHRcXHRkZWZhdWx0OlxcbjEwNTI6XFx0b3V0X2ZyZWU6XFxuMTA1MzpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuMTA1NDpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA1NTpcXHRcXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTY6XFx0XFx0fVxcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNTk6XFx0fVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRzdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuMTA2MjpcXHR7XFxuMTA2MzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEwNjQ6XFx0XFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNjc6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA2ODpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjEwNjk6XFx0XFx0XFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNC4xNTExMzUzOThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4OTMzMjAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIuXG5cbioqTXkgQW5hbHlzaXMgb2YgU29ja2V0IFJlZGlyZWN0aW9uKipcblxuUmlnaHQsIHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3MgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgb2YgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAsIGB0Y3BfZWF0X3NrYmAsIGFuZCB0aGF0IG5ld2VyIG9uZSwgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBoYW5kbGUgc29ja2V0IHJlZGlyZWN0aW9uLCBhbmQgdGhlIHNwZWNpZmljIHJvbGUgZWFjaCBwbGF5cyBpbiB0aGF0IHByb2Nlc3MuIEkgc3VzcGVjdCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBpcyB0aGUgcHJpbWFyeSByZWRpcmVjdG9yIGJ1dCBJIGhhdmUgdG8gYXNzZXNzIHdoZXRoZXIgYHRjcF9lYXRfc2tiYCBhY3RzIG9uIHRoZSBwYWNrZXQgZGF0YSBvciBhbHRlcnMgaXRzIGJlaGF2aW91ci4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgZml0cyBpbnRvIHRoaXMgc2NoZW1lLiBJcyBpdCB0aGUgZnJvbnQgZW5kIGluIHRoZSBlQlBGIGxheWVyLCBwcm92aWRpbmcgdGhlIHJlZGlyZWN0IHRhcmdldCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgaXMgbmVlZGVkIHRvIGNvbmZpcm0gdGhlIGhpZ2ggbGV2ZWwgZmxvdyBhbmQgZnVuY3Rpb24sIGJlZm9yZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNi4xNDA0NzExMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzI0MDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19za2JfcmVkaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTk1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxubmV0L2NvcmUvc2ttc2cuYy05NTctXFxubmV0L2NvcmUvc2ttc2cuYzo5NTg6c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTU5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTk2PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ2LVxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwNDc6XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA0OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MDYuNjUzNzIyNDM2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODU5Mzk3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGlzIGBza19wc29ja19za2JfcmVkaXJlY3RgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA5NTggaW4gdGhlIHJlbGV2YW50IGZpbGUuIFRpbWUgdG8gem9vbSBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcGFja2V0IHJlZGlyZWN0aW9uLiBJcyBpdCB0aGUgY29yZSBvZiBob3cgcGFja2V0cyBnZXQgcmVyb3V0ZWQgdG8gdGhlIHVzZXJzcGFjZSBzb2NrZXQ/IERvZXMgaXQgcGVyZm9ybSB0aGUgYWN0dWFsIGNvcHlpbmcgYW5kIHF1ZXVlaW5nLCBvciBpcyBpdCByZXNwb25zaWJsZSBmb3IgdGhlIGRlY2lzaW9uIG1ha2luZz8gUHJvYmFibHkgdGhlIGZvcm1lciwgYnV0IGJlc3QgdG8gY29uZmlybSB0aGUgaW50ZXJuYWxzLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2dpYyBoZXJlIC0gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCwgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgaXRzZWxmLiBHb3R0YSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIE15IGZvY3VzIGlzIG9uIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjA4LjYzOTY2NDQzNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTg6XFx0c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NTk6XFx0e1xcbiA5NjA6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcXG4gOTYxOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XFxuIDk2NDpcXHRcXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4gOTY1OlxcdFxcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJ3Qgc2V0IGEgcmVkaXJlY3QgaW50ZXJmYWNlLlxcbiA5NjY6XFx0XFx0ICovXFxuIDk2NzpcXHRcXHRpZiAodW5saWtlbHkoIXNrX290aGVyKSkge1xcbiA5Njg6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5Njk6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcXG4gOTczOlxcdFxcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXFxuIDk3NDpcXHRcXHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJ3Qgc2VuZCBhIHBhY2tldCBvblxcbiA5NzU6XFx0XFx0ICogYSBzb2NrZXQgdGhhdCBpcyBpbiB0aGlzIHN0YXRlIHNvIHdlIGRyb3AgdGhlIHNrYi5cXG4gOTc2OlxcdFxcdCAqL1xcbiA5Nzc6XFx0XFx0aWYgKCFwc29ja19vdGhlciB8fCBzb2NrX2ZsYWcoc2tfb3RoZXIsIFNPQ0tfREVBRCkpIHtcXG4gOTc4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTc5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTgzOlxcdFxcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4gOTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTg1OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTg2OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODg6XFx0XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xcbiA5OTE6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNld29yaywgMCk7XFxuIDk5MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk5MzpcXHRcXHRyZXR1cm4gMDtcXG4gOTk0OlxcdH1cXG4gOTk1OlxcdFxcbiA5OTY6XFx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDk5NzpcXHRcXHRcXHRcXHRcXHQgIGludCB2ZXJkaWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowOC42Mzk3OTkwMDVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIyMzYxMTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfZWF0X3NrYmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNwX2VhdF9za2JgLiBJdCdzIHByZXR0eSBjbGVhciBmcm9tIHRoZSBuYW1lIHdoYXQgdGhlIGZ1bmN0aW9uICppbnRlbmRzKiB0byBkbzogZXNzZW50aWFsbHksIHByb2Nlc3Mgb3IgY29uc3VtZSBhIFNvY2tldCBCdWZmZXIgKFNLQikgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgcHJlc3VtYWJseSwgaGFuZGxpbmcgdGhlIGRhdGEgYmFzZWQgb24gaXRzIGNvbnRlbnRzLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCBmbGFncy5cblxuSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZnJvbSB0aGUgcmVjZWl2ZSBwYXRoLCB0aGUgcmV0cmFuc21pdCBwYXRoLCBvciBwZXJoYXBzIHNvbWV3aGVyZSBlbHNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgc3ByaW5nIHRvIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW50ZXJydXB0IGNvbnRleHQgdGhpcyBpcyBsaWtlbHkgY2FsbGVkIGluPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbiB0aGUgVENQIHN0YWNrLiBTcGVjaWZpY2FsbHksIHdoZXJlIGFuZCB3aGVuIGlzIGB0Y3BfZWF0X3NrYmAgZ2V0dGluZyBjYWxsZWQ/IEFyZSB0aGVyZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJvdGVjdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHRvdWNoZXMsIGxpa2UgdGhlIFRDUCBjb250cm9sIGJsb2NrIChUQ0IpIG9yIHRoZSBzb2NrZXQgaXRzZWxmP1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBjaGVja3N1bSB2YWxpZGF0aW9uLCBzZXF1ZW5jZSBudW1iZXIgdmVyaWZpY2F0aW9uLCByZWFzc2VtYmx5IGlmIHRoZSBTS0IgaXMgZnJhZ21lbnRlZCwgYW5kIHBlcmhhcHMgc29tZSBwcm9jZXNzaW5nIGJhc2VkIG9uIFRDUCBmbGFncyAoQUNLLCBTWU4sIEZJTiwgUFNILCBldGMuKS4gV2UnbGwgd2FudCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIG91dC1vZi1vcmRlciBzZWdtZW50cywgd2luZG93IHVwZGF0ZXMsIGFuZCBwb3NzaWJsZSBlcnJvciBjb25kaXRpb25zIHN1Y2ggYXMgY2hlY2tzdW0gZXJyb3JzIG9yIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgd2UncmUgZ2V0dGluZyB0aGUgcmlnaHQgZGF0YSwgaW4gdGhlIHJpZ2h0IG9yZGVyLCBhbmQgYXQgdGhlIHJpZ2h0IHRpbWUuXG5cbkl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGV4YW1pbmUgdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwuIElmIHNvbWV0aGluZyBnb2VzIHdyb25n4oCUaW52YWxpZCBjaGVja3N1bSwgYW4gdW5leHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIsIG9yIGEgcHJvYmxlbSB3aXRoIHRoZSBTS0IgaXRzZWxm4oCUaG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZXNwb25kPyBEb2VzIGl0IHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCwgbG9nIGFuIGVycm9yLCBvciB0cmlnZ2VyIHNvbWUgbW9yZSBhZ2dyZXNzaXZlIGVycm9yIHJlY292ZXJ5IG9yIHJlc2V0PyBJIGFudGljaXBhdGUgc29tZSBvZiB0aG9zZSBjb2RlIHBhdGhzIHdpbGwgYmUgaW50ZXJlc3RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdGllcy5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHRjcF9lYXRfc2tiYCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBUQ1Agc3RhdGUgbWFjaGluZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgd29ya2hvcnNlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjoxNS44NjM0MTI5ODVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE5Nzk1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2VhdF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9Mjg0NT1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NTAtI2lmZGVmIENPTkZJR19JTkVUXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MTp2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTM6c3RhdGljIGlubGluZSB2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC90Y3AuaC0yODU0LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTk2PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVxcdFxcdGlmIChkc3QgIT0gcHNvY2stXFx1MDAzZXNrKVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA0NjpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA1My1cXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYzoxMDU0OlxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNTUtXFx0XFx0c29ja19kcm9wKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTItXFx0XFx0bGVuID0gMDtcXG5uZXQvY29yZS9za21zZy5jOjEyMTM6XFx0XFx0dGNwX2VhdF9za2Ioc2ssIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVxcdFxcdHNvY2tfZHJvcChzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MTcuMzQ1Mzk4NDAyWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzgwMTc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHRjcF9lYXRfc2tiYCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgaGVhZGFjaGUpIG9mIEJQRiBpbnRlcmFjdGlvbiB3aXRoIFRDUCBkYXRhIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBhbmQgaW50ZXJhY3RzIHdpdGggYW55IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiBwbGFjZSBmb3IgVENQIHByb2Nlc3NpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3BlY3RzIGxpa2UgcGFja2V0IGZpbHRlcmluZywgZmxvdyBjb250cm9sIG1vZGlmaWNhdGlvbnMsIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCBvcGVyYXRpb25zIGltcGxlbWVudGVkIHVzaW5nIGVCUEYuIEknbSBob3BpbmcgSSBjYW4gZWFzaWx5IHNlZSB0aGUgbG9naWMgYnkgdXNpbmcgYSBkZWJ1Z2dlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjIxLjgyMzQyMDkzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAxNjpcXHR7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcXG4gIDE4OlxcdFxcdGludCBjb3BpZWQ7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdGlmICghc2tiIHx8ICFza2ItXFx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcXG4gIDIxOlxcdFxcdFxcdHJldHVybjtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXFxuICAyNDpcXHRcXHRcXHRyZXR1cm47XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdHRjcCA9IHRjcF9zayhzayk7XFxuICAyNzpcXHRcXHRjb3BpZWQgPSB0Y3AtXFx1MDAzZWNvcGllZF9zZXEgKyBza2ItXFx1MDAzZWxlbjtcXG4gIDI4OlxcdFxcdFdSSVRFX09OQ0UodGNwLVxcdTAwM2Vjb3BpZWRfc2VxLCBjb3BpZWQpO1xcbiAgMjk6XFx0XFx0dGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc2spO1xcbiAgMzA6XFx0XFx0X190Y3BfY2xlYW51cF9yYnVmKHNrLCBza2ItXFx1MDAzZWxlbik7XFxuICAzMTpcXHR9XFxuICAzMjpcXHRcXG4gIDMzOlxcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gIDM0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzKVxcbiAgMzU6XFx0e1xcbiAgMzY6XFx0XFx0Ym9vbCBhcHBseSA9IGFwcGx5X2J5dGVzO1xcbiAgMzc6XFx0XFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2U7XFxuICAzODpcXHRcXHR1MzIgc2l6ZSwgY29waWVkID0gMDtcXG4gIDM5OlxcdFxcdHN0cnVjdCBza19tc2cgKnRtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MjEuODIzNTIzNzk5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjYzODgyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU0tfUkVESVJFQ1QgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyB3ZSBoYW5kbGUgYF9fU0tfUkVESVJFQ1RgIHZlcmRpY3RzIGluIHNvY2ttYXAvc2ttc2cuIFRoZSBjb3JlIGNoYW5nZSBpcyBwcmV2ZW50aW5nIGB0Y3BfZWF0X3NrYigpYCBmcm9tIGJlaW5nIGNhbGxlZCB3aGVuIHRoZSByZWRpcmVjdGlvbiB0YXJnZXQgKGBkc3RgKSBpcyB0aGUgc2FtZSBzb2NrZXQgKGBwc29jay1cdTAwM2Vza2ApIOKAkyBlc3NlbnRpYWxseSwgcmVkaXJlY3RpbmcgdG8gc2VsZi5cblxuTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBDb3VsZCB0aGlzIGludHJvZHVjZSBhIEtNU0FOIGlzc3VlPyBMZXQncyBhbmFseXplLiBJdCBsb29rcyBsaWtlIGl0LlxuXG4xLiAgKipObyBuZXcgYWxsb2NhdGlvbnM6KiogVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYGttYWxsb2NgIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBzbyB3ZSdyZSBzYWZlIHRoZXJlLlxuMi4gICoqTm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMy4gICoqVmFyaWFibGUgaW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHZhcmlhYmxlLCBgZHN0YCwgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcmV0dXJuIG9mIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYilgLiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdmFsdWUsIHNvIHdlJ3JlIHNhZmUgaGVyZS5cbjQuICAqKk5vIGNoYW5nZWQgYm91bmRzIGNoZWNraW5nOioqIFRoZSBwYXRjaCBkb2Vzbid0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tpbmcsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkIGJlY2F1c2Ugb2YgYSBsb2dpYyBlcnJvci5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgZmxvdyBhbmQgYWNjb3VudGluZyB3aXRoaW4gdGhlIEJQRiByZWRpcmVjdCBsb2dpYyBmb3Igc2ttc2cvc29ja21hcC5cblxuR2l2ZW4gdGhpcywgdGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG86XG5cbiogICBTb2NrZXQgc3RhdGVcbiogICBUQ1Agc2VxdWVuY2UgbnVtYmVyIGFjY291bnRpbmdcbiogICBCdWZmZXIgbWFuYWdlbWVudFxuKiAgIFJlZmNvdW50aW5nXG4qICAgVXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgbG9naWMgYnVnc1xuXG5UaGVzZSBhcmUgY2xhc3NpYyBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBLTVNBTiwgd2l0aCBpdHMgZm9jdXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkxldCdzIHN1bW1hcml6ZSBpdCBmb3IgY2xhcml0eTpcblxuKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYF9fU0tfUkVESVJFQ1RgIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC5cbiogICBJdCBza2lwcyBgdGNwX2VhdF9za2IoKWAgd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQuXG4qICAgTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQuXG4qICAgTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIHBhc3NlZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4qICAgYGRzdGAgaXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkuXG4qICAgUG90ZW50aWFsIGlzc3VlcyBhcmUgZnVuY3Rpb25hbC9sb2dpYyBvciBzdGF0ZSByZWxhdGVkIGFuZCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50aW5nLlxuXG5Ob3csIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTc1LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjI3Ljk0OTkxNTMwM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpIGluIG5ldC9jb3JlL3NrbXNnLmMgdG8gY29uZGl0aW9uYWxseSBjYWxsIHRjcF9lYXRfc2tiKCkgb25seSB3aGVuIHRoZSByZWRpcmVjdCBkZXN0aW5hdGlvbiBzb2NrZXQgKGRzdCkgZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hdGluZyBzb2NrZXQgKHBzb2NrLVxcdTAwM2VzaykuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIFRDUCBzb2NrZXQgYnVmZmVyIGFjY291bnRpbmcgYW5kIGNvbnRyb2wgZmxvdyBkdXJpbmcgQlBGIHNrYiByZWRpcmVjdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzLCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGJvdW5kcyBvciBzaXplcyBmb3IgZGF0YSByZWFkcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBrZXJuZWwgc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIHNvY2tldCBzdGF0ZS9hY2NvdW50aW5nIGxvZ2ljLCB3aGljaCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 02:16:55 +0000 UTC FinishedAt: 2026-08-29 02:42:29 +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": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "CGROUP_BPF", "INET", "NET" ], "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": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "CGROUP_BPF", "INET", "NET" ], "series_id": "2f4aa2f6-2f30-4013-953c-ef654d5db2df" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_get_from_fd", "sock_map_prog_detach", "sock_map_link_create", "sk_psock_init", "sk_psock_start_verdict", "sk_psock_stop_verdict", "sk_psock_init_strp", "sk_psock_start_strp", "sk_psock_stop_strp", "tcp_eat_skb", "tcp_bpf_strp_read_sock", "tcp_bpf_sendmsg_redir" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDcyOTgwNzYzNjQwZjNkNDZjZDY0MTQ5ZDNiY2ZhMDY0N2Y1YjVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcbmluZGV4IDI1MjFiNjQzZmEwNWQuLjVmYTdiOTYzOWVlZmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za21zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jXG5AQCAtMTAzOSwxMCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbiYjNDM7XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpkc3QgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbiYjNDM7XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4gXHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVx1MDAzZXNrKS4gVGhpcyBjb3JlIG5ldHdvcmtpbmcvZUJQRiBzb2NrbWFwIGxvZ2ljIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jCmluZGV4IDI1MjFiNjQzZmEwNWQuLjVmYTdiOTYzOWVlZmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuYwpAQCAtMTAzOSwxMCAmIzQzOzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCQlicmVhazsKLQljYXNlIF9fU0tfUkVESVJFQ1Q6Ci0JCXRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKTsKJiM0MzsJY2FzZSBfX1NLX1JFRElSRUNUOiB7CiYjNDM7CQlzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpOwomIzQzOwomIzQzOwkJaWYgKGRzdCAhPSBwc29jay0mZ3Q7c2spCiYjNDM7CQkJdGNwX2VhdF9za2IocHNvY2stJmd0O3NrLCBza2IpOwogCQllcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBfX1NLX0RST1A6CiAJZGVmYXVsdDoKIG91dF9mcmVlOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY2hhbmdlIGluIGBuZXQvY29yZS9za21zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5JiMzOTtyZSB0d2Vha2luZyBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgcGFja2V0IHNvY2tldCBmcmFtZXdvcmsuIFRoZSBgX19TS19SRURJUkVDVGAgY2FzZSBpcyB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJsb2NrIHNjb3BlIHdpdGggYSBjb21wYXJpc29uIG9mIHNvY2tldHMuCgpTcGVjaWZpY2FsbHksIHRoZSBvbGQgY29kZSBqdXN0IGNhbGxlZCBgdGNwX2VhdF9za2JgIHVuY29uZGl0aW9uYWxseS4gTm93LCB0aGUgbmV3IGNvZGUgZmV0Y2hlcyBhIGRlc3RpbmF0aW9uIHNvY2tldCB1c2luZyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpYCwgdGhlbiBjaGVja3MgaWYgaXQmIzM5O3MgdGhlIHNhbWUgYXMgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhlIGBwc29ja2AuIE9ubHkgaWYgdGhleSYjMzk7cmUgKmRpZmZlcmVudCogZG9lcyBpdCBjYWxsIGB0Y3BfZWF0X3NrYmAuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gVGhhdCBjaGVjayBvZiBgZHN0ICE9IHBzb2NrLSZndDtza2AgZmVlbHMgc2lnbmlmaWNhbnQuIElzIHRoaXMgdG8gcHJldmVudCBjb25zdW1pbmcgYW5kIHJlZGlyZWN0aW5nIHRoZSBzYW1lIHBhY2tldD8gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIGJ1ZyBmaXggcmVsYXRlZCB0byByZWRpcmVjdCBsb29wcyBvciBzb21lIG90aGVyIHN1YnRsZSBpc3N1ZS4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGU6IGBuZXQvY29yZS9za21zZy5jYCBpdHNlbGYsIGluY2x1ZGluZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlLCB1bmRlcnN0YW5kIHRoZSBjYWxsZXJzIG9mIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgbG9vayBhdCBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zLCBzZWUgd2hhdCBjb25maWdzIGFyZSBhdmFpbGFibGUsIGFuZCBjaGVjayB3aGljaCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMuIFRoZSB3aG9sZSBwaWN0dXJlIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBmdW5jdGlvbiBkb2VzLCB3aG8gc2V0cyB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24sIGFuZCBob3cgaXQgYWxsIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSBUQ1AuIFRoZSBkZXRhaWxzIGFyZSBpbiB0aGUgY29kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBub3cuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBzaWRlIGVmZmVjdHMgb2Ygbm90IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyMTpcdFx0XHRcdG9mZiA9IDA7XG4xMDIyOlx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjM6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjQ6XHRcbjEwMjU6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI2Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDI3Olx0XHRcdFx0fVxuMTAyODpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbjEwMjk6XHRcdFx0fVxuMTAzMDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDMxOlx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDMyOlx0XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4xMDMzOlx0XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbjEwMzQ6XHRcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwMzU6XHRcdFx0XHRcdGVyciA9IDA7XG4xMDM2Olx0XHRcdFx0fVxuMTAzNzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDM4Olx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMzk6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdFx0YnJlYWs7XG4xMDQyOlx0XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbjEwNDM6XHRcdFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbjEwNDY6XHRcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNDc6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xuMTA0ODpcdFx0XHRicmVhaztcbjEwNDk6XHRcdH1cbjEwNTA6XHRcdGNhc2UgX19TS19EUk9QOlxuMTA1MTpcdFx0ZGVmYXVsdDpcbjEwNTI6XHRvdXRfZnJlZTpcbjEwNTM6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuMTA1NDpcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTU6XHRcdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuMTA1NjpcdFx0fVxuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIGVycjtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMDY0Olx0XHR2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzaykgPSBOVUxMO1xuMTA2NTpcdFxuMTA2NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA2NzpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMDY4Olx0XHRpZiAobGlrZWx5KHBzb2NrKSkge1xuMTA2OTpcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc2ttc2cuY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNvbnRleHQg4oCTIGhvdyBpdCYjMzk7cyBiZWluZyBpbnZva2VkLCB3aGF0IHByZXJlcXVpc2l0ZXMgb3IgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHRoYXQgZ292ZXJuIGl0cyBleGVjdXRpb24sIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHBhY2tldCBzb2NrZXQgZmlsdGVyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyBpdCBoYW5kbGVzIGFuZCBtYWtlIGEgbWFwIG9mIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5NS1cbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTctXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDItXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDM6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI2Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFBhdGggb2YgYG5ldC9jb3JlL3NrbXNnLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBuZXQvY29yZS9za21zZy5jYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZmlndXJlIG91dCB3aGljaCBNYWtlZmlsZXMgYXJlIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluIHRvIHNlZSB3aGVyZSB0aGlzIHNwZWNpZmljIGZpbGUgaXMgY29tcGlsZWQgZnJvbS4gS25vd2luZyB0aGUgc3BlY2lmaWMgTWFrZWZpbGUgdGhhdCBoYW5kbGVzIHRoaXMgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBmbGFncywgaW5jbHVkZSBwYXRocywgYW5kIGFueSBwb3RlbnRpYWwgY3VzdG9taXphdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGhpZ2hlciB1cCBpZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZGVmaW5lZCB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcnVsZXMgdGhhdCBkZWZpbmUgdGhlIGNvbXBpbGF0aW9uIG9mIGEgYC5vYCBvciBvYmplY3QgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIHNvdXJjZS4KCk9uY2UgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgcmVsZXZhbnQgTWFrZWZpbGUsIHRoZSBuZXh0IHRoaW5nIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gaXMgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBrbm93IHRoYXQgaW4gdGhlIGtlcm5lbCwgbWFueSBmZWF0dXJlcyBhbmQgY29tcG9uZW50cyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBjb21waWxhdGlvbiBvZiBgc2ttc2cuY2AuIFRoaXMgY291bGQgYmUgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBhIHNwZWNpZmljIG9wdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgaW5kaXJlY3QgcmVsYXRpb25zaGlwIHRocm91Z2ggc29tZSBvdGhlciBtb2R1bGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfU0tNU0dgLCBvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBjb250cm9sIGZlYXR1cmVzIHdoaWNoIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuIEkmIzM5O2xsIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyBvcHRpb25zLCBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhbmQgbXkgZXhwZWN0ZWQgbGluZSBvZiB0aGlua2luZzoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBSZWRpcmVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgS2NvbmZpZywgdG8gc2VlIGlmIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBCUEYgc29ja2V0IHJlZGlyZWN0aW9uIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGJ1aWxkIHN5c3RlbSBldmVuICphbGxvd3MqIG1lIHRvIGJ1aWxkIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cy4KCkJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsaWtlbHkgb2JqZWN0IGZpbGUgbmFtZXMuIEkgc3VzcGVjdCBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBjYWxsZWQgYHNvY2tfbWFwLm9gLCBvciBhIHNpbWlsYXIgbmFtZSByZWxhdGVkIHRvIHNvY2tldCBtYXBzIG9yIEJQRiByZWRpcmVjdGlvbi4gVGhlIGtlcm5lbCBvZnRlbiB1c2VzIHNwZWNpZmljIG1vZHVsZSBuYW1lcyBvciBvYmplY3QgZmlsZXMgdG8gcmVwcmVzZW50IHRoZXNlIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBJZiBJIGNhbiBmaW5kIGl0LCBJIHdpbGwgYmUgYWJsZSB0byBjaGVjayB0byBlbnN1cmUgdGhlIG1vZHVsZSBpcyBsb2FkaW5nIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBwaWVjZXMgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBpdOKAmXMgd2hlcmUgQlBGIHByb2dyYW1zIGNhbiBpbnRlcmNlcHQgYW5kIG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgYXQgdGhlIHNvY2tldCBsZXZlbC4gQnkgdW5kZXJzdGFuZGluZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBkaWFnbm9zZSBvciBhbmFseXplIHRoZSBuZXR3b3JrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU09DS19NU0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTI2LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHR0Y3BfdHNvcnRlZF9hbmNob3I7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjkyNzojaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05MjgtXHRcdHVuc2lnbmVkIGxvbmdcdFx0X3NrX3JlZGlyO1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD01NTU9c3RhdGljIGlubGluZSBzc2l6ZV90IHNrX21zZ19maXJzdF9sZW4oc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC01NzItXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NTczOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfU09DS19NU0cpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc0LVxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD02MTk9c3RhdGljIGlubGluZSB2b2lkIHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjIyLX1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo2MjM6I2VuZGlmIC8qIENPTkZJR19ORVRfU09DS19NU0cgKi9cbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MjQtI2VuZGlmIC8qIF9MSU5VWF9TS01TR19IICovXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9MjgyOT12b2lkIHRjcF91cGRhdGVfdWxwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHByb3RvICpwLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MzUtXG5pbmNsdWRlL25ldC90Y3AuaDoyODM2OiNpZmRlZiBDT05GSUdfTkVUX1NPQ0tfTVNHXG5pbmNsdWRlL25ldC90Y3AuaC0yODM3LXN0cnVjdCBza19tc2c7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9Mjg1OD1pbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1OS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmg6Mjg2MDojZW5kaWYgLyogQ09ORklHX05FVF9TT0NLX01TRyAqL1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg2MS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjI6I2lmICFkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgfHwgIWRlZmluZWQoQ09ORklHX05FVF9TT0NLX01TRylcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NjMtc3RhdGljIGlubGluZSB2b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cdHNlbGVjdCBCSU5BUllfUFJJTlRGXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4tLVxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy00ODItXHRoZWxwXG5uZXQvS2NvbmZpZzo0ODM6XHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxubmV0L0tjb25maWctNDg0LVx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTMtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjYvS2NvbmZpZzo5NDpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWctOTUtXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcbi0tXG5uZXQvdGxzL0tjb25maWctMTAtXHRzZWxlY3QgQ1JZUFRPX0dDTVxubmV0L3Rscy9LY29uZmlnOjExOlx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L3Rscy9LY29uZmlnLTEyLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBTdHJlYW0gUGFyc2VyIGFuZCBTeXN0ZW0gQ2FsbCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYEJQRl9TVFJFQU1fUEFSU0VSYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGhvdyBgTkVUX1NPQ0tfTVNHYCBhbmQgYHNvY2tfbWFwYCBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgb3JjaGVzdHJhdGVkLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYG5ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2MS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRcdGJvb2xcbiAzNTY6XHRcdHByb21wdCBcJiMzNDtFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gU1lTRlNcbiAzNTg6XHRcdHNlbGVjdCBEUUxcbiAzNTk6XHRcdGRlZmF1bHQgeVxuIDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4gMzc1Olx0XHRkZWZhdWx0IHlcbiAzNzY6XHRcdGhlbHBcbiAzNzc6XHRcdCAgVGhlIG5ldHdvcmsgc3RhY2sgaGFzIHRvIGRyb3AgcGFja2V0cyB3aGVuIGEgcmVjZWl2ZSBwcm9jZXNzaW5nIENQVSYjMzk7c1xuIDM3ODpcdFx0ICBiYWNrbG9nIHJlYWNoZXMgbmV0ZGV2X21heF9iYWNrbG9nLiBJZiBhIGZldyBvdXQgb2YgbWFueSBhY3RpdmUgZmxvd3NcbiAzNzk6XHRcdCAgZ2VuZXJhdGUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgbG9hZCwgZHJvcCB0aGVpciB0cmFmZmljIGVhcmxpZXIgdG9cbiAzODA6XHRcdCAgbWFpbnRhaW4gY2FwYWNpdHkgZm9yIHRoZSBvdGhlciBmbG93cy4gVGhpcyBmZWF0dXJlIHByb3ZpZGVzIHNlcnZlcnNcbiAzODE6XHRcdCAgd2l0aCBtYW55IGNsaWVudHMgc29tZSBwcm90ZWN0aW9uIGFnYWluc3QgRG9TIGJ5IGEgc2luZ2xlIChzcG9vZmVkKVxuIDM4MjpcdFx0ICBmbG93IHRoYXQgZ3JlYXRseSBleGNlZWRzIGF2ZXJhZ2Ugd29ya2xvYWQuXG4gMzgzOlx0XG4gMzg0Olx0bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbiAzODU6XHRcbiAzODY6XHRjb25maWcgTkVUX1BLVEdFTlxuIDM4NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiAzODg6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDM4OTpcdFx0aGVscFxuIDM5MDpcdFx0ICBUaGlzIG1vZHVsZSB3aWxsIGluamVjdCBwcmVjb25maWd1cmVkIHBhY2tldHMsIGF0IGEgY29uZmlndXJhYmxlXG4gMzkxOlx0XHQgIHJhdGUsIG91dCBvZiBhIGdpdmVuIGludGVyZmFjZS4gIEl0IGlzIHVzZWQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlXG4gMzkyOlx0XHQgIHN0cmVzcyB0ZXN0aW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gIElmIHlvdSBkb24mIzM5O3QgdW5kZXJzdGFuZFxuIDM5MzpcdFx0ICB3aGF0IHdhcyBqdXN0IHNhaWQsIHlvdSBkb24mIzM5O3QgbmVlZCBpdDogc2F5IE4uXG4gMzk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBGaXJzdCwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhvc2UgdHdvIGtleSBmdW5jdGlvbnMgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYDogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgbG9naWMgdGhlc2UgYXJlIGltcGxlbWVudGluZyBhbmQgd2hhdCB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZWlyIHNwZWNpZmljIHJvbGVzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgcGF0Y2guIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHdvcmsgbXkgd2F5IG91dHdhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0fVxuIDk1NjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG4gOTU5Olx0e1xuIDk2MDpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcbiA5NjE6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbiA5NjI6XHRcbiA5NjM6XHRcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuIDk2NDpcdFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XG4gOTY1Olx0XHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbiYjMzk7dCBzZXQgYSByZWRpcmVjdCBpbnRlcmZhY2UuXG4gOTY2Olx0XHQgKi9cbiA5Njc6XHRcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XG4gOTY4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Njk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTcwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk3MTpcdFx0fVxuIDk3MjpcdFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XG4gOTczOlx0XHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxuIDk3NDpcdFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbiYjMzk7dCBzZW5kIGEgcGFja2V0IG9uXG4gOTc1Olx0XHQgKiBhIHNvY2tldCB0aGF0IGlzIGluIHRoaXMgc3RhdGUgc28gd2UgZHJvcCB0aGUgc2tiLlxuIDk3NjpcdFx0ICovXG4gOTc3Olx0XHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xuIDk3ODpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTc5Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4MDpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODE6XHRcdH1cbiA5ODI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4MzpcdFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuIDk4NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4NTpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTg2Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4NzpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuIDk5MTpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZXdvcmssIDApO1xuIDk5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5OTM6XHRcdHJldHVybiAwO1xuIDk5NDpcdH1cbiA5OTU6XHRcbiA5OTY6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTc6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4gOTk4Olx0e1xuIDk5OTpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuMTAwMDpcdFx0aW50IGVyciA9IDA7XG4xMDAxOlx0XHR1MzIgbGVuLCBvZmY7XG4xMDAyOlx0XG4xMDAzOlx0XHRzd2l0Y2ggKHZlcmRpY3QpIHtcbjEwMDQ6XHRcdGNhc2UgX19TS19QQVNTOlxuMTAwNTpcdFx0XHRlcnIgPSAtRUlPO1xuMTAwNjpcdFx0XHRza19vdGhlciA9IHBzb2NrLVx1MDAzZXNrO1xuMTAwNzpcdFx0XHRpZiAoc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpIHx8XG4xMDA4Olx0XHRcdCAgICAhc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4xMDA5Olx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwMTA6XHRcbjEwMTE6XHRcdFx0c2tiX2JwZl9zZXRfaW5ncmVzcyhza2IpO1xuMTAxMjpcdFxuMTAxMzpcdFx0XHQvKiBJZiB0aGUgcXVldWUgaXMgZW1wdHkgdGhlbiB3ZSBjYW4gc3VibWl0IGRpcmVjdGx5XG4xMDE0Olx0XHRcdCAqIGludG8gdGhlIG1zZyBxdWV1ZS4gSWYgaXRzIG5vdCBlbXB0eSB3ZSBoYXZlIHRvXG4xMDE1Olx0XHRcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcbjEwMTY6XHRcdFx0ICogaWYgc2tfcHNvY2tfc2tiX2luZ3Jlc3MgZXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieVxuMTAxNzpcdFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbjEwMTg6XHRcdFx0ICovXG4xMDE5Olx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4xMDIwOlx0XHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbjEwMjE6XHRcdFx0XHRvZmYgPSAwO1xuMTAyMjpcdFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG4xMDIzOlx0XHRcdFx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XG4xMDI0Olx0XG4xMDI1Olx0XHRcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuMTAyNjpcdFx0XHRcdFx0bGVuID0gc3RtLVx1MDAzZWZ1bGxfbGVuO1xuMTAyNzpcdFx0XHRcdH1cbjEwMjg6XHRcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XG4xMDI5Olx0XHRcdH1cbjEwMzA6XHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMTAzMTpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzMjpcdFx0XHRcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuMTAzMzpcdFx0XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XG4xMDM0Olx0XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHNvY2stXHUwMDNld29yaywgMCk7XG4xMDM1Olx0XHRcdFx0XHRlcnIgPSAwO1xuMTAzNjpcdFx0XHRcdH1cbjEwMzc6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuMTAzODpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDM5Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTA0MDpcdFx0XHR9XG4xMDQxOlx0XHRcdGJyZWFrO1xuMTA0MjpcdFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XG4xMDQzOlx0XHRcdHN0cnVjdCBzb2NrICpkc3QgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4xMDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgUmVkaXJlY3Rpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhY2tldCByZWRpcmVjdGlvbiBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBkZXN0aW5hdGlvbiAoYGRzdGApIGlzIG9yIGlzbiYjMzk7dCB0aGUgc2FtZSBhcyB0aGUgcHJvdG9jb2wgc29ja2V0IChgcHNvY2stJmd0O3NrYCkuIFRoZSBrZXkgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzLCB3aHkgaXMgYHRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKWAgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGNvbnRleHQ/IFRoaXMgaXMgd2hlcmUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBUQ1Agc3RhY2sgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIHBhY2tldCBzb2NrZXRzIGNvbWUgdG8gYSBoZWFkLgoKSXQgYXBwZWFycyB0aGF0IHdoZW4gYGRzdGAgYW5kIGBwc29jay0mZ3Q7c2tgIGFyZSBkaWZmZXJlbnQsIGB0Y3BfZWF0X3NrYmAgZ2V0cyBpbnZva2VkIG9uIGBwc29jay0mZ3Q7c2tgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdo4oCUdGhlIHBhY2tldCYjMzk7cyBiZWluZyBjb25zdW1lZCBieSB0aGUgaW50ZW5kZWQgc29ja2V0LiBIb3dldmVyLCB3aGVuIGBkc3RgICppcyogdGhlIHNhbWUgYXMgYHBzb2NrLSZndDtza2AsIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBub3QgaW1tZWRpYXRlbHkgY2FsbGluZyBgdGNwX2VhdF9za2JgLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJvdXRpbmcgYW5kIHByb2Nlc3NpbmcgcGF0aHMsIHBvaW50cyB0b3dhcmQgZWl0aGVyIGBza19wc29ja19za2JfcmVkaXJlY3RgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMgaGFuZGxpbmcgdGhlIHJlZGlyZWN0IGluIHRoYXQgY2FzZS4gSSYjMzk7bSBzdXNwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIFNLQiBpbiB0aGUgYGluZ3Jlc3Nfc2tiYCBxdWV1ZSwgcG90ZW50aWFsbHkgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCgpUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBjbG9zZXIgbG9vayBhdCBgdGNwX2VhdF9za2JgIGZ1bmN0aW9uIHRvIHNlZSBleGFjdGx5IHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lYXRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4NDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTE6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1NC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVx0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2Olx0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDU1LVx0XHRzb2NrX2Ryb3AocHNvY2stXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTItXHRcdGxlbiA9IDA7XG5uZXQvY29yZS9za21zZy5jOjEyMTM6XHRcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVx0XHRzb2NrX2Ryb3Aoc2ssIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGB0Y3BfZWF0X3NrYmAgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHdoYXQgSSYjMzk7ZCBiZSBsb29raW5nIGF0IGlmIEkgd2VyZSBkaWdnaW5nIGludG8gaXQ6CgoqKkRpdmluZyBpbnRvIGB0Y3BfZWF0X3NrYmAgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkmIzM5O20gaGl0dGluZyBgdGNwX2VhdF9za2JgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIEJQRiBwcm9ncmFtIGdldHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgYSBUQ1AgcGFja2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgU0tCLCB3aGVyZSB0aGUgZGF0YSBhY3R1YWxseSBlbmRzIHVwLCBhbmQgYW55IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuCgpGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdy4gSG93IGlzIHRoZSBTS0IgbW9kaWZpZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGFueSBTS0JzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjbG9uaW5nLCBzaGFyaW5nLCBvciBkaXJlY3QgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucyBpbnNpZGUgdGhlIGtlcm5lbC4KCk5leHQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayB0cmFmZmljIGhlcmUsIHNvIGNvbmN1cnJlbnQgYWNjZXNzIGlzIGEgZ2l2ZW4uIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHM/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGF0PyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhdG9taWMgb3BlcmF0aW9ucyBvciBtdXRleGVzIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4KCkFuZCBmaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIEJQRiBpbnRlcmFjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB0byBoYW5kIGRhdGEgb2ZmIHRvIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBvbmU/IEhvdyBkb2VzIHRoZSBCUEYgcHJvZ3JhbSBnZXQgdGhlIGRhdGE/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBwcm9jZXNzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBkYXRhPyBJJiMzOTtsbCBhc3Nlc3MgdGhlIGVmZmljaWVuY3kgb2YgaG93IHRoZSBCUEYgcHJvZ3JhbSYjMzk7cyBhY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIFRDUCBzdGFjayYjMzk7cyBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIG92ZXJoZWFkIHRoaXMgc3RlcCBhZGRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNsZWFuIGludGVncmF0aW9uIHBvaW50IG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBwYWNrZXQgaXMgZWl0aGVyIGRyb3BwZWQgb3IgcmVkaXJlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91dGlsX21hY3Jvcy5oXHUwMDNlXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGxzLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2Nhc20vaW9jdGxzLmhcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMTY6XHR7XG4gIDE3Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcbiAgMTg6XHRcdGludCBjb3BpZWQ7XG4gIDE5Olx0XG4gIDIwOlx0XHRpZiAoIXNrYiB8fCAhc2tiLVx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcbiAgMjE6XHRcdFx0cmV0dXJuO1xuICAyMjpcdFxuICAyMzpcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXG4gIDI0Olx0XHRcdHJldHVybjtcbiAgMjU6XHRcbiAgMjY6XHRcdHRjcCA9IHRjcF9zayhzayk7XG4gIDI3Olx0XHRjb3BpZWQgPSB0Y3AtXHUwMDNlY29waWVkX3NlcSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICAyODpcdFx0V1JJVEVfT05DRSh0Y3AtXHUwMDNlY29waWVkX3NlcSwgY29waWVkKTtcbiAgMjk6XHRcdHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTtcbiAgMzA6XHRcdF9fdGNwX2NsZWFudXBfcmJ1Zihzaywgc2tiLVx1MDAzZWxlbik7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiAgMzQ6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcylcbiAgMzU6XHR7XG4gIDM2Olx0XHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XG4gIDM3Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcbiAgMzg6XHRcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xuICAzOTpcdFx0c3RydWN0IHNrX21zZyAqdG1wO1xuICA0MDpcdFx0aW50IGksIHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQlBGIFNvY2ttYXAgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvcmUgQlBGIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCDigJMgc3BlY2lmaWNhbGx5IEJQRiBzb2NrbWFwIGFuZCByZWRpcmVjdGlvbiB1c2luZyBza21zZy5jLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFRoZXNlIGFyZSBzb2Z0d2FyZS1kZWZpbmVkIG5ldHdvcmtpbmcgZmVhdHVyZXMsIHBlcmZlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgc29ja2V0KClgLCBgYnBmKClgLCBgc2V0c29ja29wdCgpYCwgYHNlbmRtc2coKWAuIE5vIHNwZWNpYWwgaGFyZHdhcmUgaXMgcmVxdWlyZWQgaGVyZS4gVGhhdCBtYWtlcyBpdCBhIHNpZ25pZmljYW50IHRhcmdldC4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBCUEYgc29ja2V0IHZlcmRpY3QgcmVkaXJlY3QgbG9naWMgaW4gc2ttc2csIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGlzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBzcGVjaWZpY3MuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGBuZXQvY29yZS9za21zZy5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgdXMgYSBnb29kIGdyYXNwIG9uIHRoZSBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCB8XnZvaWQgfF5zdHJ1Y3QgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTI1LVxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cdFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmMtODYtXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcbm5ldC9jb3JlL3NrbXNnLmMtODgtXHRcdCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XG5uZXQvY29yZS9za21zZy5jLTEzNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTM4OnZvaWQgc2tfbXNnX3JldHVybl96ZXJvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTEzOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xNjA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JldHVybl96ZXJvKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTE2My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTIxMS1cbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XG5uZXQvY29yZS9za21zZy5jLTIxNy1cbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNTEtXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxubmV0L2NvcmUvc2ttc2cuYzoyNTg6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsX25vY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXHRcdFx0XHQgIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTI2My1cbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG5uZXQvY29yZS9za21zZy5jLTI2NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xubmV0L2NvcmUvc2ttc2cuYy0zMTEtXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVx0XHRcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy0zNjgtXG5uZXQvY29yZS9za21zZy5jOjM2OTppbnQgc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvc2ttc2cuYy03NDktXG5uZXQvY29yZS9za21zZy5jOjc1MDpzdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbm5ldC9jb3JlL3NrbXNnLmMtNzUxLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTgwMz1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19pbml0KTtcbm5ldC9jb3JlL3NrbXNnLmMtODA0LVxubmV0L2NvcmUvc2ttc2cuYzo4MDU6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTgwNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04NTMtXG5uZXQvY29yZS9za21zZy5jOjg1NDp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtODU1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTg2ND1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTg4OC1cbm5ldC9jb3JlL3NrbXNnLmM6ODg5OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg5MC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDc9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTkxOS1cbm5ldC9jb3JlL3NrbXNnLmM6OTIwOmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTkyMS1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE0Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE0OC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTY3LVxubmV0L2NvcmUvc2ttc2cuYzoxMTY4OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNjkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE3Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTE3ODp2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNzkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIzND1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI2MC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI2MTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjYyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzAtXG5uZXQvY29yZS9za21zZy5jOjEyNzE6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGFuZCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYXMgZm91bmQgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGxpbmVzIDExMDAtMTI3NS4KCioqRGlzc2VjdGluZyBQU09DSyBWZXJkaWN0IGFuZCBTdHJpbmcgUGFyc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0IHNvY2tldHMgKHBzb2NrcykgaGFuZGxlIHZlcmRpY3QgcmVjZXB0aW9uIGFuZCBzdHJpbmctYmFzZWQgZGF0YSByZWFkcywgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyBpbiBwYWNrZXQgcHJvY2Vzc2luZy4gTG9va2luZyBhdCB0aGVzZSBsaW5lcywgSSBzZWUgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgbGlrZWx5IGhhbmRsZXMgcmVjZWl2aW5nIHZlcmRpY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgc29ja2V0LCBwcm9iYWJseSBhZnRlciBzb21lIHNvcnQgb2YgZmlsdGVyaW5nIG9yIHByb2Nlc3NpbmcuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgZmF0ZSBvZiB0aGUgcGFja2V0IOKAkyBkcm9wLCBxdWV1ZSwgb3IgcGVyaGFwcyBtb2RpZmljYXRpb24uIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBvaW50LCBhbmQgSSYjMzk7ZCBiZXQgaXQgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc29ja2V0JiMzOTtzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBtYWtlIHRoZXNlIGRlY2lzaW9ucyBlZmZlY3RpdmUuCgpUaGVuIHRoZXJlJiMzOTtzIGBza19wc29ja19zdHJwX3JlYWRgLiBUaGUgbmFtZSBzdWdnZXN0cyBhIHN0cmluZy1iYXNlZCBwYXJzaW5nIGZ1bmN0aW9uLCB1c2VkIHRvIGV4dHJhY3QgcmVsZXZhbnQgZGF0YSBmcm9tIGEgcmVjZWl2ZWQgcGFja2V0LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBtaWdodCBtYW5hZ2UgdGhpbmdzIGxpa2Ugc3RyaW5nIHRlcm1pbmF0aW9uIChudWxsIGNoYXJhY3RlcnM/KSwgaGFuZGxlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgaW1wbGVtZW50IHZhcmlvdXMgY2hlY2tzIGZvciB0aGUgZGF0YSB0byBhdm9pZCBleHBsb2l0YWJsZSBzaXR1YXRpb25zLiBJdOKAmXMgYWxzbyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgd29ya3MgaW4gdGFuZGVtIHdpdGggdGhlIHZlcmRpY3Q7IHRoZSByZXR1cm5lZCBzdHJpbmcsIG9yIHBhcnQgdGhlcmVvZiwgY291bGQgZGljdGF0ZSB0aGUgdmVyZGljdC4gSSYjMzk7ZCBiZSBsb29raW5nIGNsb3NlbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIGJ1ZmZlciByZXNvdXJjZXMuIEFsc28sIGVycm9yIGhhbmRsaW5nIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB1bmV4cGVjdGVkIGRhdGEuIEFyZSB0aGVyZSBhbnkgYm91bmRhcnkgY2hlY2tzLCB0aW1lb3V0cywgb3Igc2FmZWd1YXJkcyBhZ2FpbnN0IG1hbGljaW91cyBpbnB1dD8gQW55IG9mIHRoZXNlIGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBkZXRhaWxzIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCBhcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSXMgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgdHJpZ2dlcmVkIGZpcnN0LCB0aGUgdmVyZGljdCB0aGVuIGNhbGxzIGBza19wc29ja19zdHJwX3JlYWRgLCBvciBpcyB0aGUgaW50ZXJhY3Rpb24gbW9yZSBpbnRlcnR3aW5lZD8gSG93IGFyZSB0aGUgcGFyc2VkIHN0cmluZ3MgdXNlZCBpbiB0aGUgdmVyZGljdCBkZWNpc2lvbnM/IFRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGluIHRob3NlIGxpbmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2ZXJkaWN0LCB0aGUgcGFyc2VkIHN0cmluZyBkYXRhLCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBwYWNrZXQgc29ja2V0IGlzIGVzc2VudGlhbCBmb3Igb3B0aW1pemluZyB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xuMTEwMTpcdFx0XHRza2ItXHUwMDNlc2sgPSBOVUxMO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFx0c2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xuMTEwNDpcdG91dDpcbjExMDU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTEwNjpcdH1cbjExMDc6XHRcbjExMDg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG4xMTA5Olx0e1xuMTExMDpcdFx0cmV0dXJuIGVycjtcbjExMTE6XHR9XG4xMTEyOlx0XG4xMTEzOlx0c3RhdGljIGludCBza19wc29ja19zdHJwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4xMTE0Olx0e1xuMTExNTpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29jayA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3Qgc2tfcHNvY2ssIHN0cnApO1xuMTExNjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTExNzpcdFx0aW50IHJldCA9IHNrYi1cdTAwM2VsZW47XG4xMTE4Olx0XG4xMTE5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMTIwOlx0XHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVx1MDAzZXByb2dzLnN0cmVhbV9wYXJzZXIpO1xuMTEyMTpcdFx0aWYgKGxpa2VseShwcm9nKSkge1xuMTEyMjpcdFx0XHRza2ItXHUwMDNlc2sgPSBwc29jay1cdTAwM2VzaztcbjExMjM6XHRcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbjExMjQ6XHRcdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbjExMjU6XHRcdH1cbjExMjY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTEyNzpcdFx0cmV0dXJuIHJldDtcbjExMjg6XHR9XG4xMTI5Olx0XG4xMTMwOlx0LyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cbjExMzE6XHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuMTEzMjpcdHtcbjExMzM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMTM0Olx0XG4xMTM1Olx0XHR0cmFjZV9za19kYXRhX3JlYWR5KHNrKTtcbjExMzY6XHRcbjExMzc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExMzg6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTEzOTpcdFx0aWYgKGxpa2VseShwc29jaykpIHtcbjExNDA6XHRcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuMTE0MTpcdFx0XHRzdHJwX2RhdGFfcmVhZHkoXHUwMDI2cHNvY2stXHUwMDNlc3RycCk7XG4xMTQyOlx0XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xuMTE0MzpcdFx0fVxuMTE0NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMTQ1Olx0fVxuMTE0NjpcdFxuMTE0NzpcdGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuMTE0ODpcdHtcbjExNDk6XHRcdGludCByZXQ7XG4xMTUwOlx0XG4xMTUxOlx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xuMTE1MjpcdFx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG4xMTUzOlx0XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbjExNTQ6XHRcdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuMTE1NTpcdFx0fTtcbjExNTY6XHRcbjExNTc6XHRcdHJldCA9IHN0cnBfaW5pdChcdTAwMjZwc29jay1cdTAwM2VzdHJwLCBzaywgXHUwMDI2Y2IpO1xuMTE1ODpcdFx0aWYgKCFyZXQpXG4xMTU5Olx0XHRcdHNrX3Bzb2NrX3NldF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfUlhfU1RSUF9FTkFCTEVEKTtcbjExNjA6XHRcbjExNjE6XHRcdGlmIChza19pc190Y3Aoc2spKSB7XG4xMTYyOlx0XHRcdHBzb2NrLVx1MDAzZXN0cnAuY2IucmVhZF9zb2NrID0gdGNwX2JwZl9zdHJwX3JlYWRfc29jaztcbjExNjM6XHRcdFx0cHNvY2stXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXHUwMDNlY29waWVkX3NlcTtcbjExNjQ6XHRcdH1cbjExNjU6XHRcdHJldHVybiByZXQ7XG4xMTY2Olx0fVxuMTE2NzpcdFxuMTE2ODpcdHZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4xMTY5Olx0e1xuMTE3MDpcdFx0aWYgKHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMTcxOlx0XHRcdHJldHVybjtcbjExNzI6XHRcbjExNzM6XHRcdHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xuMTE3NDpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkpO1xuMTE3NTpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xuMTE3NjpcdH1cbjExNzc6XHRcbjExNzg6XHR2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4xMTc5Olx0e1xuMTE4MDpcdFx0cHNvY2tfc2V0X3Byb2coXHUwMDI2cHNvY2stXHUwMDNlcHJvZ3Muc3RyZWFtX3BhcnNlciwgTlVMTCk7XG4xMTgxOlx0XG4xMTgyOlx0XHRpZiAoIXBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMTgzOlx0XHRcdHJldHVybjtcbjExODQ6XHRcbjExODU6XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XG4xMTg2Olx0XHRXUklURV9PTkNFKHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHksIE5VTEwpO1xuMTE4NzpcdFx0c3RycF9zdG9wKFx1MDAyNnBzb2NrLVx1MDAzZXN0cnApO1xuMTE4ODpcdH1cbjExODk6XHRcbjExOTA6XHRzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjExOTE6XHR7XG4xMTkyOlx0XHQvKiBQYXJzZXIgaGFzIGJlZW4gc3RvcHBlZCAqL1xuMTE5MzpcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1JYX1NUUlBfRU5BQkxFRCkpXG4xMTk0Olx0XHRcdHN0cnBfZG9uZShcdTAwMjZwc29jay1cdTAwM2VzdHJwKTtcbjExOTU6XHR9XG4xMTk2Olx0I2Vsc2VcbjExOTc6XHRzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjExOTg6XHR7XG4xMTk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSYjMzk7bSAmIzM0O3RoaW5raW5nJiMzNDsgYmFzZWQgb24gdGhhdCBwcm9tcHQsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB3aGF0IGNvbWVzIGFmdGVyIGxpbmUgMTIwMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMuIEl0JiMzOTtzIG5vdCBhYm91dCBwYXNzaXZlbHkgcmVhZGluZzsgaXQmIzM5O3MgYWJvdXQgYWN0aXZlbHkgcHJvY2Vzc2luZyBhbmQgaW50ZXJwcmV0aW5nIHRoZSBkYXRhIHRoYXQgbGllcyBiZXlvbmQgdGhpcyBwb2ludCwgYW5kIGhvdyBpdCBpbmZvcm1zIG15IGV4cGVydGlzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJlbGV2YW5jZSB3aXRoaW4gdGhlIGxhcmdlciBzY29wZSBvZiB0aGUgc3ViamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xuMTIwMTpcdFxuMTIwMjpcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyMDM6XHR7XG4xMjA0Olx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTIwNTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTIwNjpcdFx0aW50IHJldCA9IF9fU0tfRFJPUDtcbjEyMDc6XHRcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTIwODpcdFxuMTIwOTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTIxMDpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMjExOlx0XHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xuMTIxMjpcdFx0XHRsZW4gPSAwO1xuMTIxMzpcdFx0XHR0Y3BfZWF0X3NrYihzaywgc2tiKTtcbjEyMTQ6XHRcdFx0c29ja19kcm9wKHNrLCBza2IpO1xuMTIxNTpcdFx0XHRnb3RvIG91dDtcbjEyMTY6XHRcdH1cbjEyMTc6XHRcdHByb2cgPSBSRUFEX09OQ0UocHNvY2stXHUwMDNlcHJvZ3Muc3RyZWFtX3ZlcmRpY3QpO1xuMTIxODpcdFx0aWYgKCFwcm9nKVxuMTIxOTpcdFx0XHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVx1MDAzZXByb2dzLnNrYl92ZXJkaWN0KTtcbjEyMjA6XHRcdGlmIChsaWtlbHkocHJvZykpIHtcbjEyMjE6XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4xMjIyOlx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbjEyMjM6XHRcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbjEyMjQ6XHRcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xuMTIyNTpcdFx0fVxuMTIyNjpcdFx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xuMTIyNzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyMjg6XHRcdFx0bGVuID0gcmV0O1xuMTIyOTpcdG91dDpcbjEyMzA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTIzMTpcdFx0cmV0dXJuIGxlbjtcbjEyMzI6XHR9XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbjEyMzU6XHR7XG4xMjM2Olx0XHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBOVUxMO1xuMTIzNzpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbjEyMzg6XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4xMjM5Olx0XHRpbnQgY29waWVkO1xuMTI0MDpcdFxuMTI0MTpcdFx0dHJhY2Vfc2tfZGF0YV9yZWFkeShzayk7XG4xMjQyOlx0XG4xMjQzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMjQ0Olx0XHRzb2NrID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3NvY2tldCk7XG4xMjQ1Olx0XHRpZiAobGlrZWx5KHNvY2spKVxuMTI0NjpcdFx0XHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuMTI0NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMjQ4Olx0XHRpZiAoIW9wcyB8fCAhb3BzLVx1MDAzZXJlYWRfc2tiKVxuMTI0OTpcdFx0XHRyZXR1cm47XG4xMjUwOlx0XG4xMjUxOlx0XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG4xMjUyOlx0XHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuMTI1MzpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMjU0Olx0XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTI1NTpcdFx0XHRpZiAocHNvY2spXG4xMjU2Olx0XHRcdFx0c2tfcHNvY2tfZGF0YV9yZWFkeShzaywgcHNvY2spO1xuMTI1NzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEyNTg6XHRcdH1cbjEyNTk6XHR9XG4xMjYwOlx0XG4xMjYxOlx0dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjEyNjI6XHR7XG4xMjYzOlx0XHRpZiAocHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSlcbjEyNjQ6XHRcdFx0cmV0dXJuO1xuMTI2NTpcdFxuMTI2NjpcdFx0cHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVx1MDAzZXNrX2RhdGFfcmVhZHk7XG4xMjY3Olx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XG4xMjY4Olx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XG4xMjY5Olx0fVxuMTI3MDpcdFxuMTI3MTpcdHZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbjEyNzI6XHR7XG4xMjczOlx0XHRwc29ja19zZXRfcHJvZyhcdTAwMjZwc29jay1cdTAwM2Vwcm9ncy5zdHJlYW1fdmVyZGljdCwgTlVMTCk7XG4xMjc0Olx0XHRwc29ja19zZXRfcHJvZyhcdTAwMjZwc29jay1cdTAwM2Vwcm9ncy5za2JfdmVyZGljdCwgTlVMTCk7XG4xMjc1Olx0XG4xMjc2Olx0XHRpZiAoIXBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXG4xMjc3Olx0XHRcdHJldHVybjtcbjEyNzg6XHRcbjEyNzk6XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjI5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcm91bmQgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgbmV0L2NvcmUvc2ttc2cuY2AuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IEkgc2hvdWxkIGFsc28gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzZWFyY2ggZm9yIHdoZXJlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyBpdCBpcyB1c2VkLiBJJiMzOTtsbCBhbHNvIGJlIHN1cmUgdG8gY2hlY2sgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRvIHVuZGVyc3RhbmQgdGhlIGdyZWF0ZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHVzZXMgb2YgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFuZCBgc2tfcHNvY2tfaW5pdGAsIGJlY2F1c2UgdGhvc2UgYXJlIGxpa2VseSBpbnRlZ3JhbCB0byB0aGUgd29ya2Zsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3R8c2tfcHNvY2tfaW5pdF9zdHJwfHNvY2tfbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTA1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTQ9YW4gb3V0ZXIgbWFwIGNvbnRhaW5zIGluc3RhbmNlcyBvZiBhIHNpbmdsZSB0eXBlIG9mIGlubmVyIG1hcCwgZm9yIGV4YW1wbGVcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdDoxNTpgYGFycmF5X29mX21hcHMtXHUwMDNlc29ja19tYXBgYC5cbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xNi1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9MTE5PXNvY2tldCBlbnRyaWVzIG9mIHR5cGUgYGBzdHJ1Y3Qgc29jayAqYGAgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTIxLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjEyMjpicGZfc29ja19tYXBfdXBkYXRlKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0xMjMtXl5eXl5eXl5eXl5eXl5eXl5eXl5eXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyNS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDoxMjY6ICAgIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTI3LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0zNTQ9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBzb2NrbWFwLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjItXHRcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjM2MzpcdH0gc29ja19tYXBfcnggU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjQtXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0PTM3Nj1zb2NrbWFwIHRvIHJlZGlyZWN0IHRyYWZmaWMgdG8gYW5vdGhlciBzb2NrZXQgYmFzZWQgb24gdGhlIGxvY2FsIHBvcnQuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4Ni1cdFx0aWYgKGxwb3J0ID09IDEwMDAwKVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjM4NzpcdFx0XHRyZXR1cm4gYnBmX3NrX3JlZGlyZWN0X21hcChza2IsIFx1MDAyNnNvY2tfbWFwX3J4LCBpZHgsIDApO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4OC1cbi0tXG5NQUlOVEFJTkVSUz00OTcxPUY6XHRuZXQvY29yZS9za21zZy5jXG5NQUlOVEFJTkVSUzo0OTcyOkY6XHRuZXQvY29yZS9zb2NrX21hcC5jXG5NQUlOVEFJTkVSUy00OTczLUY6XHRuZXQvaXB2NC90Y3BfYnBmLmNcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00OT1zdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciB7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNTMtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1NDpzdHJ1Y3Qgc29ja19tYXBwaW5nIHtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTU1LVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTc1PXN0cnVjdCBzb2NrcGFzc19tYXBwaW5nIHtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04Ni1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjg3OnN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2JhY2tfY29ubl9ldmVudChpbnQgaXJxLCB2b2lkICpzb2NrX21hcCk7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04OC1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlX2FjdGl2ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MDpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05Mj1zdGF0aWMgYm9vbCBwdmNhbGxzX2Nvbm5fYmFja19yZWFkKHZvaWQgKm9wYXF1ZSlcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkzLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjk0Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilvcGFxdWU7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05NS1cdHN0cnVjdCBtc2doZHIgbXNnO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2Ny1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjE2ODpzdGF0aWMgYm9vbCBwdmNhbGxzX2Nvbm5fYmFja193cml0ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0xNjkte1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTIzMD1zdGF0aWMgdm9pZCBwdmNhbGxzX2JhY2tfaW93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTIzMy1cdFx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIsIHJlZ2lzdGVyX3dvcmspO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjM0Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gY29udGFpbmVyX29mKGlvd29ya2VyLCBzdHJ1Y3Qgc29ja19tYXBwaW5nLFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjM1LVx0XHRpb3dvcmtlcik7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9Mjg5PXN0YXRpYyB2b2lkIHB2Y2FsbHNfc2tfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzb2NrKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjkwLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjI5MTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXHUwMDNlc2tfdXNlcl9kYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMjkyLVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTMwMD1zdGF0aWMgdm9pZCBwdmNhbGxzX3NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNvY2spXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDEte1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzAyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29jay1cdTAwM2Vza191c2VyX2RhdGE7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDMtXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjMxNjpzdGF0aWMgc3RydWN0IHNvY2tfbWFwcGluZyAqcHZjYWxsc19uZXdfYWN0aXZlX3NvY2tldChcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNy1cdFx0c3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzIzLVx0aW50IHJldDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjMyNDpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMyNS1cdHZvaWQgKnBhZ2U7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9MzkyPXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zOTctXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6Mzk4Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzk5LVx0c3RydWN0IHhlbl9wdmNhbGxzX3Jlc3BvbnNlICpyc3A7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9NDM2PXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX3JlbGVhc2VfYWN0aXZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy00MzctXHRcdFx0XHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo0Mzg6XHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDM5LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00Nzg9c3RhdGljIGludCBwdmNhbGxzX2JhY2tfcmVsZWFzZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQ4MS1cdHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDgyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLCAqbjtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQ4My1cdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTUxNj1zdGF0aWMgdm9pZCBfX3B2Y2FsbHNfYmFja19hY2NlcHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTUyMy1cdH07XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1MjQ6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01MjUtXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTg5MD1zdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2V2ZW50KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05MDgtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MDk6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfYmFja19jb25uX2V2ZW50KGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEwLXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkxMTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2tfbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEyLVx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIgKmlvdztcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05OTc9c3RhdGljIGludCBiYWNrZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05OTktXHRzdHJ1Y3QgcHZjYWxsc19mZWRhdGEgKmZlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjEwMDA6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsICpuO1xuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMTAwMS1cdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NT1zdGF0aWMgYXRvbWljX3QgcHZjYWxsc19yZWZjb3VudDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTYtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NTc6c3RydWN0IHNvY2tfbWFwcGluZyB7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTgtXHRib29sIGFjdGl2ZV9zb2NrZXQ7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTkzLVx0XHRcdHVpbnQzMl90IGluZmxpZ2h0X3JlcV9pZDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo5NDpcdFx0XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICphY2NlcHRfbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk1LVx0XHRcdHdhaXRfcXVldWVfaGVhZF90IGluZmxpZ2h0X2FjY2VwdF9yZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk5LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfZW50ZXJfc29jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMS17XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTAyOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMy1cbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA3LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwODpcdG1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQ7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA5LVx0aWYgKG1hcCA9PSBOVUxMKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMTc9c3RhdGljIGlubGluZSB2b2lkIHB2Y2FsbHNfZXhpdF9zb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTE4LXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMTk6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIwLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEyMTpcdG1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQ7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIyLVx0YXRvbWljX2RlYyhcdTAwMjZtYXAtXHUwMDNlcmVmY291bnQpO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xNDA9c3RhdGljIGludCBwdmNhbGxzX2Zyb250X3dhaXRfcnNwKHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLCB1MzIgcmVxX2lkKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNDgtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTQ5OnN0YXRpYyBib29sIHB2Y2FsbHNfZnJvbnRfd3JpdGVfdG9kbyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTUwLXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY1LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjE2NjpzdGF0aWMgYm9vbCBwdmNhbGxzX2Zyb250X3JlYWRfdG9kbyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY3LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTgwPXN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2Zyb250X2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0yMjMtXHRcdGlmIChyc3AtXHUwMDNlY21kID09IFBWQ0FMTFNfUE9MTCkge1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjIyNDpcdFx0XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSAoc3RydWN0IHNvY2tfbWFwcGluZyAqKSh1aW50cHRyX3QpXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjI1LVx0XHRcdFx0XHRcdCAgIHJzcC1cdTAwM2V1LnBvbGwuaWQ7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Mi1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyNjM6c3RhdGljIHZvaWQgZnJlZV9hY3RpdmVfcmluZyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2NC1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0yNjU9c3RhdGljIHZvaWQgcHZjYWxsc19mcm9udF9kZXN0cm95X2FjdGl2ZShzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyNjY6XHRcdFx0XHRcdCBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjY3LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Mjg1PXN0YXRpYyB2b2lkIHB2Y2FsbHNfZnJvbnRfZnJlZV9tYXAoc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mjg2Olx0XHRcdFx0ICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI4Ny17XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5Mi1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTM6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfY29ubl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5NC17XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mjk1Olx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjk2LVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0zMDU9aW50IHB2Y2FsbHNfZnJvbnRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTMwNy1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjMwODpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEw7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA5LVx0c3RydWN0IHhlbl9wdmNhbGxzX3JlcXVlc3QgKnJlcTtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzQ2LVx0ICogc29jay1cdTAwM2Vzay1cdTAwM2Vza19zZW5kX2hlYWQgaXMgbm90IHVzZWQgZm9yIGlwIHNvY2tldHM6IHJldXNlIHRoZVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjM0NzpcdCAqIGZpZWxkIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHNvY2tfbWFwcGluZ1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM0OC1cdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNvY2tldC4gVGhpcyB3YXksIHdlIGNhbiBlYXNpbHkgZ2V0IHRoZVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjM0OTpcdCAqIHN0cnVjdCBzb2NrX21hcHBpbmcgZnJvbSB0aGUgc3RydWN0IHNvY2tldC5cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zNTAtXHQgKi9cbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MzgyPUVYUE9SVF9TWU1CT0xfR1BMKHB2Y2FsbHNfZnJvbnRfc29ja2V0KTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zODMtXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzg0OnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM4NS17XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM5My1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozOTQ6c3RhdGljIGludCBhbGxvY19hY3RpdmVfcmluZyhzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzk1LXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDE5LVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjQyMDpzdGF0aWMgaW50IGNyZWF0ZV9hY3RpdmUoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLCBldnRjaG5fcG9ydF90ICpldnRjaG4pXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDIxLXtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9NDYxPWludCBwdmNhbGxzX2Zyb250X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy00NjQtXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo0NjU6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSBOVUxMO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTQ2Ni1cdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTU4ND1pbnQgcHZjYWxsc19mcm9udF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTg2LXtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo1ODc6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNTg4LVx0aW50IHNlbnQsIHRvdF9zZW50ID0gMDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Njc4PWludCBwdmNhbGxzX2Zyb250X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODEtXHRpbnQgcmV0O1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjY4MjpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODMtXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTcxNT1pbnQgcHZjYWxsc19mcm9udF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03MTctXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo3MTg6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSBOVUxMO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxOS1cdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTc3Mj1pbnQgcHZjYWxsc19mcm9udF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTc3NC1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjc3NTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03NzYtXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz04MjU9aW50IHB2Y2FsbHNfZnJvbnRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTgyOC1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjgyOTpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4MzA6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAyID0gTlVMTDtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy04MzEtXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz05Nzk9c3RhdGljIF9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbF9wYXNzaXZlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk4MC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk4MTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05ODItXHRcdFx0XHRcdCAgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDM2PXN0YXRpYyBfX3BvbGxfdCBwdmNhbGxzX2Zyb250X3BvbGxfYWN0aXZlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMzctXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhLFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMzg6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDM5LVx0XHRcdFx0XHQgICAgICBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDU5PV9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2Mi1cdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwNjM6XHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2NC1cdF9fcG9sbF90IHJldDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTA4MD1pbnQgcHZjYWxsc19mcm9udF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODItXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDgzOlx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODQtXHRpbnQgcmVxX2lkLCBub3RpZnksIHJldDtcbi0tXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTE3MD1zdGF0aWMgdm9pZCBwdmNhbGxzX2Zyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMTcyLVx0c3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGE7XG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTE3MzpcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEwsICpuO1xuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzQtXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNjUzPWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NTYtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTc6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaDozNjU4OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY1OTppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjA6aW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLVx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MjppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjMtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjQ6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2NTp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2Njp2b2lkIHNvY2tfbWFwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2Ny0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzczMD1zdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MzctI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9saW51eC9icGYuaDozNzM4OnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM5LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDMtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NDQ6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDUtXHRcdFx0XHQgICAgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0OS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MDpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MS1cdFx0XHRcdFx0ICAgdTY0IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1NS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1NjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1Ny1cdFx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc2MS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc2MjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzYzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4ODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xuaW5jbHVkZS9saW51eC9icGYuaDozODg1OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzg4Ni1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjMtQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDM3PXZvaWQgc2tfcHNvY2tfc3RvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDM5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDA6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0MS12b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NDI9dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDMtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDQ6c3RhdGljIGlubGluZSBpbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDUte1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NTM9c3RhdGljIGlubGluZSB2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ1Ny1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NTg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMTEzLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzExNDogKiBsb25nIGJwZl9zb2NrX21hcF91cGRhdGUoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMxMTUtICogXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU1LVx0Rk4oc2tfcmVkaXJlY3RfbWFwLCA1MiwgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MDU2Olx0Rk4oc29ja19tYXBfdXBkYXRlLCA1MywgIyNjdHgpXHRcdFx0XFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU3LVx0Rk4oeGRwX2FkanVzdF9tZXRhLCA1NCwgIyNjdHgpXHRcdFx0XFxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTA9c3RhdGljIGludCBicGZfbWFwX3VwZGF0ZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjYzLVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI2NDpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NS1cdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDU3OT1zdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MjI6XHRcdHJldCA9IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYyMy1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDY0OD1zdGF0aWMgaW50IGJwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjgxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2ODI6XHRcdHJldCA9IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGF0dHIsIHB0eXBlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2ODMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3MTg9c3RhdGljIGludCBicGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzY3LVx0Y2FzZSBCUEZfU0tfU0tCX1ZFUkRJQ1Q6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NzY4Olx0XHRyZXR1cm4gc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2OS1cdGNhc2UgQlBGX1RDWF9JTkdSRVNTOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg1Ny1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODU4Olx0XHRyZXQgPSBzb2NrX21hcF9saW5rX2NyZWF0ZShhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NTktXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MDIzPXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDk0LVx0XHRpZiAoZnVuY19pZCAhPSBCUEZfRlVOQ19za19yZWRpcmVjdF9tYXAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA5NTpcdFx0ICAgIGZ1bmNfaWQgIT0gQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwOTYtXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXAgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDUtXHRjYXNlIEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXA6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTIwNjpcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDctXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4MjktXG5uZXQvY29yZS9maWx0ZXIuYzo4ODMwOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MzEtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04ODM0PXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg0OC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX29wc19jYl9mbGFnc19zZXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODQ5Olx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XG5uZXQvY29yZS9maWx0ZXIuYzo4ODUwOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NTEtXHRjYXNlIEJQRl9GVU5DX3NvY2tfaGFzaF91cGRhdGU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE3MzM9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc1MC1cdFx0ICpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNzUxOlx0XHQgKiBPdGhlciBtYXBzIChlLmcuIHNvY2tfbWFwKSBkbyBub3QgcHJvdmlkZSB0aGlzIGd1YXJhbnRlZSBhbmRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzUyLVx0XHQgKiB0aGUgc2sgbWF5IG5ldmVyIGJlIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAgdG8gYmVnaW4gd2l0aC5cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3NS1lcnJvcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNzc2Olx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3Ny1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY4OC1cdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cbm5ldC9jb3JlL3NrbXNnLmM6Njg5Olx0ICogc29ja19tYXBfY2xvc2UoKSwgZW5zdXJpbmcgd2Ugd2FpdCBmb3IgYmFja2xvZyB0aHJlYWQgY29tcGxldGlvblxubmV0L2NvcmUvc2ttc2cuYy02OTAtXHQgKiBiZWZvcmUgc2tfc29ja2V0IGZyZWVkLiBJZiByZWZjbnQgaW5jcmVtZW50IGZhaWxzLCBpdCBpbmRpY2F0ZXNcbm5ldC9jb3JlL3NrbXNnLmM6NjkxOlx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cbm5ldC9jb3JlL3NrbXNnLmMtNjkyLVx0ICovXG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfZHJvcCk7XG5uZXQvY29yZS9za21zZy5jLTkwNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG5uZXQvY29yZS9za21zZy5jLTkwOC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTkzNi1cdG1zZy1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za21zZy5jOjkzNzpcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVx1MDAzZXNrX3JlZGlyKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTM4LVx0cHNvY2stXHUwMDNlYXBwbHlfYnl0ZXMgPSBtc2ctXHUwMDNlYXBwbHlfYnl0ZXM7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDc5PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA5OS1cdFx0c2tiX2JwZl9zZXRfc3RycGFyc2VyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjExMDA6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMS1cdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExMzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNDYtXG5uZXQvY29yZS9za21zZy5jOjExNDc6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjIzLVx0XHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMjI0Olx0XHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XG5uZXQvY29yZS9za21zZy5jLTEyMjUtXHR9XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLVxubmV0L2NvcmUvc2ttc2cuYzoxMjYxOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyNjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVx0XHRcdFx0dTMyIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxubmV0L2NvcmUvc29ja19tYXAuYy00MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy04Mi1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA5LVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBOVUxMLCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOC1cdF9fYWNxdWlyZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXHRfX3JlbGVhc2VzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0My1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cdTAwM2VtYXA7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjpcdFx0XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3Jhdylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cdGlmIChsaWtlbHkocHNvY2spKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDpcdFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NS1cdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIEkgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBzdWNoIGFzIGBza19wc29ja19pbml0YCwgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCwgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0b3Bfc3RycGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAsIGBza19wc29ja19kcm9wYCwgYHNrX3Bzb2NrX3N0b3BgLCBhbmQgYHNrX21zZ19yZWN2bXNnYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBwb3RlbnRpYWxseSByZWxldmFudCBob29rcyBvciBlbnRyeSBwb2ludHMuCgpOZXh0LCBvdmVyIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCB0aGUgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBhdHRlbnRpb24gYXJlIGB0Y3BfZWF0X3NrYmAsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLiBJJiMzOTtsbCBoYXZlIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLgoKRmluYWxseSwgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCBJJiMzOTttIGxvb2tpbmcgYXQgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3Byb2dfZGV0YWNoYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGBzb2NrX21hcF9icGZfcHJvZ19xdWVyeWAsIGFuZCBgc29ja19tYXBfbGlua19jcmVhdGVgLiBUaGVzZSBzaG91bGQgYmUgcmV2ZWFsaW5nIGFib3V0IHRoZSBtYXAmIzM5O3Mgcm9sZS4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcGVyIGxvb2sgYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBnbyBmcm9tIHRoZXJlLiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgd2l0aCBhIGZvY3VzZWQgZXhhbWluYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHxedm9pZCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY3LVxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjg2OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1Mzc9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3My1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2MzU9c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDE6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3NTppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBTY3J1dGlueSBmb3IgRW5oYW5jZWQgTmV0d29ya2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHByb3BlciBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCBteSB3b3JrIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCwgYE5FVF9TT0NLX01TR2AsIGFuZCBgQlBGX1NZU0NBTExgLCBhbmQgb2YgY291cnNlLCBgSU5FVGAuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIHdoYXQgSSYjMzk7bSBkb2luZy4gTXkgZmlyc3QgcG9pbnQgb2YgY2FsbCBpcyBga2VybmVsL2JwZi9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIGluIHBsYWNlIGZvciB0aGUga2VybmVsIGNvbXBvbmVudHMgSSYjMzk7bSByZWx5aW5nIG9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBCUEZfU1lTQ0FMTCBpbiB0aGUgS2VybmVsIENvbmZpZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBgQlBGX1NZU0NBTExgIOKAkyB3aGF0IGl0IHJlbGllcyBvbiwgYW5kIHdoYXQgaXQgZW5hYmxlcy4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIGhlYWQgaXMgYWx3YXlzIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IGZpbGUsIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBibG9jay4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGl0IGRlcGVuZHMgb24sIGFuZCAqd2hhdCogdGhvc2UgZGVwZW5kZW5jaWVzIHJlcHJlc2VudC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlnIGNvbnRleHQgd2lsbCBsZXQgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2ggc3VwcG9ydGluZyBmZWF0dXJlcyBuZWVkIHRvIGJlIGFjdGl2ZSBhbmQgdG8gYW50aWNpcGF0ZSBhbnkgY29uZmxpY3RzLiBJdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRl9TVFJFQU1fUEFSU0VSIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBCUEZfU1RSRUFNX1BBUlNFUmAgY29uZmlndXJhdGlvbiBhbmQgaXRzIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcyBpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgaGVyZSBpdCBpczogYGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBpdCBkZXBlbmRzIG9uIGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBDR1JPVVBfQlBGYC4gSXQgYWxzbyAqc2VsZWN0cyogYFNUUkVBTV9QQVJTRVJgIGFuZCBgTkVUX1NPQ0tfTVNHYC4gVGhhdCBtYWtlcyBzZW5zZTsgc3RyZWFtIHBhcnNpbmcgb2Z0ZW4gaW52b2x2ZXMgbmV0d29yayBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGlzIGNlbnRyYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENHUk9VUF9CUEZgIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlcGVuZGVudCBvbiBpdC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDR1JPVVBfQlBGYCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm91bmQgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB0byBlbnN1cmUgZXZlcnl0aGluZyBhbGlnbnMgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzU1LVxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzU3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBzcGVjaWZpYyBvcHRpb24mIzM5O3MgYmVoYXZpb3Igb3IgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgbGluZSAxMzU2IGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBhYm91dCB0aGUgZ2VuZXJhbCBhcmVhIGNvdmVyZWQgYnkgbGluZSAxMzU2LCBlLmcuLCAmIzM0O2Vhcmx5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCYjMzQ7ICYjMzQ7ZGV2aWNlIGRyaXZlciBpbnRlZ3JhdGlvbiwmIzM0OyAmIzM0O2Egc3BlY2lmaWMgc3Vic3lzdGVtIEkga25vdyB3ZWxsJiMzNDtdLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIFttZW50aW9uIHlvdXIgZXhwZWN0YXRpb25zLCBlLmcuLCAmIzM0O2EgYm9vbGVhbiBvcHRpb24sJiMzNDsgJiMzNDthIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwmIzM0OyAmIzM0O2EgbWVudSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IGNvbXBvbmVudCYjMzQ7XS4gSG9wZWZ1bGx5LCB0aGlzIGxpbmUgd2lsbCBnaXZlIG1lIHRoZSBrZXkgSSBuZWVkIHRvIHVubG9jayB0aGUgcHV6emxlIEkmIzM5O20gY3VycmVudGx5IHNvbHZpbmcuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1NTpcdFxuMTM1NjpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzU3Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1ODpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1OTpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNjA6XHRcdGhlbHBcbjEzNjE6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM2MjpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM2MzpcdFxuMTM2NDpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzY1Olx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbjEzNjY6XHRcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXG4xMzY3Olx0XHQgIGluZXQgc29ja2V0cy5cbjEzNjg6XHRcbjEzNjk6XHRjb25maWcgQ0dST1VQX01JU0NcbjEzNzA6XHRcdGJvb2wgXCYjMzQ7TWlzYyByZXNvdXJjZSBjb250cm9sbGVyXCYjMzQ7XG4xMzcxOlx0XHRkZWZhdWx0IG5cbjEzNzI6XHRcdGhlbHBcbjEzNzM6XHRcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXG4xMzc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDk0CgkJCQkJCQlvdXRwdXQ6IDI4OAoJCQkJCQkJdGhvdWdodHM6IDcwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQg4oCTIHNwZWNpZmljYWxseSwgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0YXJnZXRlZCBzeW1ib2xzIGFyZSBhY3R1YWxseSBwcmVzZW50IGFuZCB1c2FibGUuIEkgc2VlIGBuZXQvY29yZS9za21zZy5jYCwgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCBhbmQgYG5ldC9pcHY0L3RjcF9icGYuY2AgYXJlIHRoZSBrZXkgZmlsZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja21hcCB2ZXJkaWN0IHJlZGlyZWN0aW9uLgoKSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIEkgbmVlZCB0byB2ZXJpZnk6IGBza19wc29ja19pbml0YCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCwgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0b3Bfc3RycGAsIGBza19wc29ja19tc2dfdmVyZGljdGAsIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF9wcm9nX2RldGFjaGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBgc29ja19tYXBfbGlua19jcmVhdGVgLCBgdGNwX2VhdF9za2JgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgYWN0dWFsbHkgZGVmaW5lZCBhbmQsIGNyaXRpY2FsbHksIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBrZXJuZWwgY29kZSBhbmQgY29uZmlybWVkIHRoZXNlIGZ1bmN0aW9ucyBleGlzdCBhbmQgYXJlLCBhcyBleHBlY3RlZCwgbm9uLXN0YXRpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBzeW1ib2xzIGluIHRoZSB2YXJpb3VzIGZpbGVzLiBUaGUgdmVyaWZpY2F0aW9uIGNvbmZpcm1zIHRoZSBzeW1ib2xzIGxpc3RlZCBhbmQgdGhlIHJlbGV2YW50IGV4cG9ydCBzeW1ib2xzOgpJbiBgbmV0L2NvcmUvc2ttc2cuY2A6Ci0gYHNrX3Bzb2NrX2luaXRgIChFWFBPUlRfU1lNQk9MX0dQTCkKLSBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIChFWFBPUlRfU1lNQk9MX0dQTCkKLSBgc2tfcHNvY2tfaW5pdF9zdHJwYAotIGBza19wc29ja19zdGFydF9zdHJwYAotIGBza19wc29ja19zdG9wX3N0cnBgCi0gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgCi0gYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAKLSBgc2tfcHNvY2tfZHJvcGAgKEVYUE9SVF9TWU1CT0xfR1BMKQotIGBza19wc29ja19zdG9wYAotIGBza19tc2dfcmVjdm1zZ2AKCkluIGBuZXQvY29yZS9zb2NrX21hcC5jYDoKLSBgc29ja19tYXBfZ2V0X2Zyb21fZmRgCi0gYHNvY2tfbWFwX3Byb2dfZGV0YWNoYAotIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgCi0gYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YAotIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAKLSBgc29ja19tYXBfZGVzdHJveWAKLSBgc29ja19tYXBfY2xvc2VgCgpJbiBgbmV0L2lwdjQvdGNwX2JwZi5jYDoKLSBgdGNwX2VhdF9za2JgCi0gYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgCi0gYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAKCkZpbmFsbHksIGJlZm9yZSBJIHNpZ24gb2ZmLCBsZXQmIzM5O3MgY29uZmlybSBteSBmaW5hbCBjaGVjazogVGhpcyBpcyB3b3J0aCBmdXp6aW5nLCB0aGUgZW5hYmxlIGNvbmZpZ3MgYXJlIGNvcnJlY3QsIHRoZSBmb2N1c2VkIHN5bWJvbHMgYXJlIHJlbGV2YW50IGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhlcmUmIzM5O3MgYSBjbGVhciByZWFzb24gZm9yIHRoaXMgZnV6emluZyBlZmZvcnQgKHNvY2ttYXAgdmVyZGljdCByZWRpcmVjdGlvbikuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfcHJvZ19kZXRhY2gmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfaW5pdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3BfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdG9wX3N0cnAmIzM0OywKICAgICYjMzQ7dGNwX2VhdF9za2ImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVx1MDAzZXNrKS4gVGhpcyBjb3JlIG5ldHdvcmtpbmcvZUJQRiBzb2NrbWFwIGxvZ2ljIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IGhhcmR3YXJlIGRlcGVuZGVuY2llcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9wcm9nX2RldGFjaCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9saW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtza19wc29ja19pbml0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RvcF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX2luaXRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0b3Bfc3RycCYjMzQ7LAogICAgJiMzNDt0Y3BfZWF0X3NrYiYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2ttc2cgQlBGIHNvY2tldCByZWRpcmVjdCB2ZXJkaWN0IGhhbmRsaW5nIChza19wc29ja192ZXJkaWN0X2FwcGx5KSB0byBhdm9pZCBjYWxsaW5nIHRjcF9lYXRfc2tiIHdoZW4gcmVkaXJlY3RpbmcgYW4gc2tiIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChkc3QgPT0gcHNvY2stXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXHUwMDNlc2spLlxuXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDcyOTgwNzYzNjQwZjNkNDZjZDY0MTQ5ZDNiY2ZhMDY0N2Y1YjVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMzksMTAgJiM0MzsxMDM5LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBfX1NLX1JFRElSRUNUOgotCQl0Y3BfZWF0X3NrYihwc29jay0mZ3Q7c2ssIHNrYik7CiYjNDM7CWNhc2UgX19TS19SRURJUkVDVDogewomIzQzOwkJc3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTsKJiM0MzsKJiM0MzsJCWlmIChkc3QgIT0gcHNvY2stJmd0O3NrKQomIzQzOwkJCXRjcF9lYXRfc2tiKHBzb2NrLSZndDtzaywgc2tiKTsKIAkJZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpOwogCQlicmVhazsKJiM0MzsJfQogCWNhc2UgX19TS19EUk9QOgogCWRlZmF1bHQ6CiBvdXRfZnJlZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXRoZXIgaXQgd2FycmFudHMgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYWx3YXlzIHN0YXJ0cyB3aXRoIHJpc2sgYW5kIHNhZmV0eSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoYXQgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSB3ZXJlIGRlZmVuc2l2ZSBjb2RlIHJldmlld3MsIGFuZCBpZiBzbywgaG93IHRoYXQgbWF5IGFmZmVjdCBzYW5pdGl6ZXIgc2VsZWN0aW9uLCBlc3BlY2lhbGx5IGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgYmVuaWduIHRhc2ssIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBfX1NLX1JFRElSRUNUYCBjYXNlLiBXZSYjMzk7dmUgZ290IGEgbmV3IHNjb3BlIGJsb2NrIGFyb3VuZCB0aGUgYHRjcF9lYXRfc2tiYCBjYWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwuIFNvLCBwcmV2aW91c2x5LCBgdGNwX2VhdF9za2JgIHdhcyB1bmNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGJyYW5jaC4gTm93LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpZiBgZHN0ICE9IHBzb2NrLSZndDtza2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY29udHJvbCBmbG93IGNoYW5nZSwgYW5kIG15IGJyYWluIGlzIHNjcmVhbWluZyAmIzM0O25ldyBwYXRoLCBuZXcgYnVncyEmIzM0Oy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBpcyBkb2luZyBhbmQgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2NvcmUvc2ttc2cuY2AgcGljdHVyZS4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIG15IHJlYWQtZmlsZSB0b29sIG9yIGZpcmUgdXAgYSBxdWljayBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHVzZWQgZWxzZXdoZXJlLCBhbmQgaXRzIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW9zIGludHJvZHVjZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGB0Y3BfZWF0X3NrYmAgY2FsbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGxpa2UgdG8gdW5kZXJzdGFuZCBob3cgYGRzdGAgaXMgb2J0YWluZWQgZnJvbSB0aGUgYHNrYmAgYW5kIGhvdyBpdCBjb3VsZCBkaXZlcmdlIGZyb20gYHBzb2NrLSZndDtza2AgaWYgdGhlIGNvZGUgZmxvdyBpcyBhZmZlY3RlZC4gSWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoYXQgbWlnaHQgdGlwIG1lIG9uZSB3YXkgb3IgdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuMTAyMTpcdFx0XHRcdG9mZiA9IDA7XG4xMDIyOlx0XHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbjEwMjM6XHRcdFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbjEwMjQ6XHRcbjEwMjU6XHRcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4xMDI2Olx0XHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4xMDI3Olx0XHRcdFx0fVxuMTAyODpcdFx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbjEwMjk6XHRcdFx0fVxuMTAzMDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMDMxOlx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDMyOlx0XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4xMDMzOlx0XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbjEwMzQ6XHRcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwMzU6XHRcdFx0XHRcdGVyciA9IDA7XG4xMDM2Olx0XHRcdFx0fVxuMTAzNzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4xMDM4Olx0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMzk6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdFx0YnJlYWs7XG4xMDQyOlx0XHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcbjEwNDM6XHRcdFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0aWYgKGRzdCAhPSBwc29jay1cdTAwM2VzaylcbjEwNDY6XHRcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNDc6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xuMTA0ODpcdFx0XHRicmVhaztcbjEwNDk6XHRcdH1cbjEwNTA6XHRcdGNhc2UgX19TS19EUk9QOlxuMTA1MTpcdFx0ZGVmYXVsdDpcbjEwNTI6XHRvdXRfZnJlZTpcbjEwNTM6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuMTA1NDpcdFx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTU6XHRcdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuMTA1NjpcdFx0fVxuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIGVycjtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4xMDY0Olx0XHR2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzaykgPSBOVUxMO1xuMTA2NTpcdFxuMTA2NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA2NzpcdFx0cHNvY2sgPSBza19wc29jayhzayk7XG4xMDY4Olx0XHRpZiAobGlrZWx5KHBzb2NrKSkge1xuMTA2OTpcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLgoKKipNeSBBbmFseXNpcyBvZiBTb2NrZXQgUmVkaXJlY3Rpb24qKgoKUmlnaHQsIHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgaW50ZXJwbGF5IG9mIGBza19wc29ja19za2JfcmVkaXJlY3RgLCBgdGNwX2VhdF9za2JgLCBhbmQgdGhhdCBuZXdlciBvbmUsIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgaGFuZGxlIHNvY2tldCByZWRpcmVjdGlvbiwgYW5kIHRoZSBzcGVjaWZpYyByb2xlIGVhY2ggcGxheXMgaW4gdGhhdCBwcm9jZXNzLiBJIHN1c3BlY3QgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAgaXMgdGhlIHByaW1hcnkgcmVkaXJlY3RvciBidXQgSSBoYXZlIHRvIGFzc2VzcyB3aGV0aGVyIGB0Y3BfZWF0X3NrYmAgYWN0cyBvbiB0aGUgcGFja2V0IGRhdGEgb3IgYWx0ZXJzIGl0cyBiZWhhdmlvdXIuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIGZpdHMgaW50byB0aGlzIHNjaGVtZS4gSXMgaXQgdGhlIGZyb250IGVuZCBpbiB0aGUgZUJQRiBsYXllciwgcHJvdmlkaW5nIHRoZSByZWRpcmVjdCB0YXJnZXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgc291cmNlIGlzIG5lZWRlZCB0byBjb25maXJtIHRoZSBoaWdoIGxldmVsIGZsb3cgYW5kIGZ1bmN0aW9uLCBiZWZvcmUgbG9va2luZyBhdCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc2tiX3JlZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTk1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XG5uZXQvY29yZS9za21zZy5jLTk1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6OTU4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtOTU5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTk5Nj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwNDYtXHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNDc6XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTA0OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXQgYXJvdW5kIGxpbmUgOTU4IGluIHRoZSByZWxldmFudCBmaWxlLiBUaW1lIHRvIHpvb20gaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWNrZXQgcmVkaXJlY3Rpb24uIElzIGl0IHRoZSBjb3JlIG9mIGhvdyBwYWNrZXRzIGdldCByZXJvdXRlZCB0byB0aGUgdXNlcnNwYWNlIHNvY2tldD8gRG9lcyBpdCBwZXJmb3JtIHRoZSBhY3R1YWwgY29weWluZyBhbmQgcXVldWVpbmcsIG9yIGlzIGl0IHJlc3BvbnNpYmxlIGZvciB0aGUgZGVjaXNpb24gbWFraW5nPyBQcm9iYWJseSB0aGUgZm9ybWVyLCBidXQgYmVzdCB0byBjb25maXJtIHRoZSBpbnRlcm5hbHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBsb2dpYyBoZXJlIC0gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCwgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgaXRzZWxmLiBHb3R0YSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIE15IGZvY3VzIGlzIG9uIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTg6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG4gOTU5Olx0e1xuIDk2MDpcdFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcbiA5NjE6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbiA5NjI6XHRcbiA5NjM6XHRcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuIDk2NDpcdFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XG4gOTY1Olx0XHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbiYjMzk7dCBzZXQgYSByZWRpcmVjdCBpbnRlcmZhY2UuXG4gOTY2Olx0XHQgKi9cbiA5Njc6XHRcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XG4gOTY4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Njk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTcwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk3MTpcdFx0fVxuIDk3MjpcdFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XG4gOTczOlx0XHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxuIDk3NDpcdFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbiYjMzk7dCBzZW5kIGEgcGFja2V0IG9uXG4gOTc1Olx0XHQgKiBhIHNvY2tldCB0aGF0IGlzIGluIHRoaXMgc3RhdGUgc28gd2UgZHJvcCB0aGUgc2tiLlxuIDk3NjpcdFx0ICovXG4gOTc3Olx0XHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xuIDk3ODpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTc5Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4MDpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODE6XHRcdH1cbiA5ODI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4MzpcdFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xuIDk4NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX2xvY2spO1xuIDk4NTpcdFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gOTg2Olx0XHRcdHNvY2tfZHJvcChmcm9tLVx1MDAzZXNrLCBza2IpO1xuIDk4NzpcdFx0XHRyZXR1cm4gLUVJTztcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuIDk5MTpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZXdvcmssIDApO1xuIDk5MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5OTM6XHRcdHJldHVybiAwO1xuIDk5NDpcdH1cbiA5OTU6XHRcbiA5OTY6XHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5OTc6XHRcdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyOTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHRjcF9lYXRfc2tiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF9lYXRfc2tiYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhlIG5hbWUgd2hhdCB0aGUgZnVuY3Rpb24gKmludGVuZHMqIHRvIGRvOiBlc3NlbnRpYWxseSwgcHJvY2VzcyBvciBjb25zdW1lIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSB3aXRoaW4gdGhlIFRDUCBsYXllci4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUg4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZSwgYW5kIHByZXN1bWFibHksIGhhbmRsaW5nIHRoZSBkYXRhIGJhc2VkIG9uIGl0cyBjb250ZW50cywgc2VxdWVuY2UgbnVtYmVyLCBhbmQgZmxhZ3MuCgpJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZnJvbSB0aGUgcmVjZWl2ZSBwYXRoLCB0aGUgcmV0cmFuc21pdCBwYXRoLCBvciBwZXJoYXBzIHNvbWV3aGVyZSBlbHNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgc3ByaW5nIHRvIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW50ZXJydXB0IGNvbnRleHQgdGhpcyBpcyBsaWtlbHkgY2FsbGVkIGluPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgaW4gdGhlIFRDUCBzdGFjay4gU3BlY2lmaWNhbGx5LCB3aGVyZSBhbmQgd2hlbiBpcyBgdGNwX2VhdF9za2JgIGdldHRpbmcgY2FsbGVkPyBBcmUgdGhlcmUgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB0b3VjaGVzLCBsaWtlIHRoZSBUQ1AgY29udHJvbCBibG9jayAoVENCKSBvciB0aGUgc29ja2V0IGl0c2VsZj8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBjaGVja3N1bSB2YWxpZGF0aW9uLCBzZXF1ZW5jZSBudW1iZXIgdmVyaWZpY2F0aW9uLCByZWFzc2VtYmx5IGlmIHRoZSBTS0IgaXMgZnJhZ21lbnRlZCwgYW5kIHBlcmhhcHMgc29tZSBwcm9jZXNzaW5nIGJhc2VkIG9uIFRDUCBmbGFncyAoQUNLLCBTWU4sIEZJTiwgUFNILCBldGMuKS4gV2UmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggb3V0LW9mLW9yZGVyIHNlZ21lbnRzLCB3aW5kb3cgdXBkYXRlcywgYW5kIHBvc3NpYmxlIGVycm9yIGNvbmRpdGlvbnMgc3VjaCBhcyBjaGVja3N1bSBlcnJvcnMgb3IgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBnb2FsIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgcmlnaHQgZGF0YSwgaW4gdGhlIHJpZ2h0IG9yZGVyLCBhbmQgYXQgdGhlIHJpZ2h0IHRpbWUuCgpJdCYjMzk7cyBnb2luZyB0byBiZSBlc3NlbnRpYWwgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYXMgd2VsbC4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmfigJRpbnZhbGlkIGNoZWNrc3VtLCBhbiB1bmV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciwgb3IgYSBwcm9ibGVtIHdpdGggdGhlIFNLQiBpdHNlbGbigJRob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbmQ/IERvZXMgaXQgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0LCBsb2cgYW4gZXJyb3IsIG9yIHRyaWdnZXIgc29tZSBtb3JlIGFnZ3Jlc3NpdmUgZXJyb3IgcmVjb3Zlcnkgb3IgcmVzZXQ/IEkgYW50aWNpcGF0ZSBzb21lIG9mIHRob3NlIGNvZGUgcGF0aHMgd2lsbCBiZSBpbnRlcmVzdGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdGllcy4KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGB0Y3BfZWF0X3NrYmAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgVENQIHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyB3b3JraG9yc2UgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9lYXRfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4NDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTE6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1NC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVx0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2Olx0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDU1LVx0XHRzb2NrX2Ryb3AocHNvY2stXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTItXHRcdGxlbiA9IDA7XG5uZXQvY29yZS9za21zZy5jOjEyMTM6XHRcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVx0XHRzb2NrX2Ryb3Aoc2ssIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHRjcF9lYXRfc2tiYCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgaGVhZGFjaGUpIG9mIEJQRiBpbnRlcmFjdGlvbiB3aXRoIFRDUCBkYXRhIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBhbmQgaW50ZXJhY3RzIHdpdGggYW55IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiBwbGFjZSBmb3IgVENQIHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgYXNwZWN0cyBsaWtlIHBhY2tldCBmaWx0ZXJpbmcsIGZsb3cgY29udHJvbCBtb2RpZmljYXRpb25zLCBvciBldmVuIG1vcmUgYWR2YW5jZWQgb3BlcmF0aW9ucyBpbXBsZW1lbnRlZCB1c2luZyBlQlBGLiBJJiMzOTttIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIHRoZSBsb2dpYyBieSB1c2luZyBhIGRlYnVnZ2VyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMTY6XHR7XG4gIDE3Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcbiAgMTg6XHRcdGludCBjb3BpZWQ7XG4gIDE5Olx0XG4gIDIwOlx0XHRpZiAoIXNrYiB8fCAhc2tiLVx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcbiAgMjE6XHRcdFx0cmV0dXJuO1xuICAyMjpcdFxuICAyMzpcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXG4gIDI0Olx0XHRcdHJldHVybjtcbiAgMjU6XHRcbiAgMjY6XHRcdHRjcCA9IHRjcF9zayhzayk7XG4gIDI3Olx0XHRjb3BpZWQgPSB0Y3AtXHUwMDNlY29waWVkX3NlcSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuICAyODpcdFx0V1JJVEVfT05DRSh0Y3AtXHUwMDNlY29waWVkX3NlcSwgY29waWVkKTtcbiAgMjk6XHRcdHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTtcbiAgMzA6XHRcdF9fdGNwX2NsZWFudXBfcmJ1Zihzaywgc2tiLVx1MDAzZWxlbik7XG4gIDMxOlx0fVxuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiAgMzQ6XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcylcbiAgMzU6XHR7XG4gIDM2Olx0XHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XG4gIDM3Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcbiAgMzg6XHRcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xuICAzOTpcdFx0c3RydWN0IHNrX21zZyAqdG1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS19SRURJUkVDVCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBob3cgd2UgaGFuZGxlIGBfX1NLX1JFRElSRUNUYCB2ZXJkaWN0cyBpbiBzb2NrbWFwL3NrbXNnLiBUaGUgY29yZSBjaGFuZ2UgaXMgcHJldmVudGluZyBgdGNwX2VhdF9za2IoKWAgZnJvbSBiZWluZyBjYWxsZWQgd2hlbiB0aGUgcmVkaXJlY3Rpb24gdGFyZ2V0IChgZHN0YCkgaXMgdGhlIHNhbWUgc29ja2V0IChgcHNvY2stJmd0O3NrYCkg4oCTIGVzc2VudGlhbGx5LCByZWRpcmVjdGluZyB0byBzZWxmLgoKTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBDb3VsZCB0aGlzIGludHJvZHVjZSBhIEtNU0FOIGlzc3VlPyBMZXQmIzM5O3MgYW5hbHl6ZS4gSXQgbG9va3MgbGlrZSBpdC4KCjEuICAqKk5vIG5ldyBhbGxvY2F0aW9uczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYGttYWxsb2NgIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4KMi4gICoqTm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgozLiAgKipWYXJpYWJsZSBpbml0aWFsaXphdGlvbjoqKiBUaGUgY3JpdGljYWwgdmFyaWFibGUsIGBkc3RgLCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gb2YgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKWAuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSB2YWx1ZSwgc28gd2UmIzM5O3JlIHNhZmUgaGVyZS4KNC4gICoqTm8gY2hhbmdlZCBib3VuZHMgY2hlY2tpbmc6KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tpbmcsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkIGJlY2F1c2Ugb2YgYSBsb2dpYyBlcnJvci4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBmbG93IGFuZCBhY2NvdW50aW5nIHdpdGhpbiB0aGUgQlBGIHJlZGlyZWN0IGxvZ2ljIGZvciBza21zZy9zb2NrbWFwLgoKR2l2ZW4gdGhpcywgdGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG86CgoqICAgU29ja2V0IHN0YXRlCiogICBUQ1Agc2VxdWVuY2UgbnVtYmVyIGFjY291bnRpbmcKKiAgIEJ1ZmZlciBtYW5hZ2VtZW50CiogICBSZWZjb3VudGluZwoqICAgVXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgbG9naWMgYnVncwoKVGhlc2UgYXJlIGNsYXNzaWMgaXNzdWVzIHRoYXQgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIGl0IGZvciBjbGFyaXR5OgoKKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYF9fU0tfUkVESVJFQ1RgIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4KKiAgIEl0IHNraXBzIGB0Y3BfZWF0X3NrYigpYCB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldC4KKiAgIE5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLgoqICAgTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIHBhc3NlZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuCiogICBgZHN0YCBpcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4KKiAgIFBvdGVudGlhbCBpc3N1ZXMgYXJlIGZ1bmN0aW9uYWwvbG9naWMgb3Igc3RhdGUgcmVsYXRlZCBhbmQgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKSBpbiBuZXQvY29yZS9za21zZy5jIHRvIGNvbmRpdGlvbmFsbHkgY2FsbCB0Y3BfZWF0X3NrYigpIG9ubHkgd2hlbiB0aGUgcmVkaXJlY3QgZGVzdGluYXRpb24gc29ja2V0IChkc3QpIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYXRpbmcgc29ja2V0IChwc29jay1cdTAwM2VzaykuXG5cblRoaXMgY2hhbmdlIGFsdGVycyBUQ1Agc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIEJQRiBza2IgcmVkaXJlY3Rpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2ZpZWxkcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3Igc2l6ZXMgZm9yIGRhdGEgcmVhZHMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSB1bmluaXRpYWxpemVkIGRhdGEgb3Iga2VybmVsIHN0cnVjdHVyZSBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHJlbGF0ZSB0byBzb2NrZXQgc3RhdGUvYWNjb3VudGluZyBsb2dpYywgd2hpY2ggZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjMzLjE1MjMyNjY3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc5NzYxODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfZGV0YWNoXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX2NyZWF0ZVwiLFxuICAgIFwic2tfcHNvY2tfaW5pdFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0b3Bfc3RycFwiLFxuICAgIFwidGNwX2VhdF9za2JcIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDozMy4xNTIzMzI5MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzQ1NjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDI6NDA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgX19TS19SRURJUkVDVDpcXG4tXFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbitcXHRjYXNlIF9fU0tfUkVESVJFQ1Q6IHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG4rXFxuK1xcdFxcdGlmIChkc3QgIT0gcHNvY2stXFx1MDAzZXNrKVxcbitcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuIFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0Y2FzZSBfX1NLX0RST1A6XFxuIFxcdGRlZmF1bHQ6XFxuIG91dF9mcmVlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDozMy42MjA3MDc5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3Nzc3NzA3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwic29ja19tYXBfcHJvZ19kZXRhY2hcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJza19wc29ja19pbml0XCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19zdG9wX3ZlcmRpY3RcIixcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF9zdHJwXCIsXG4gICAgXCJ0Y3BfZWF0X3NrYlwiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVxcdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbitcdGNhc2UgX19TS19SRURJUkVDVDoge1xuK1x0XHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1xuK1x0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxuK1x0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6MzMuNjIwNzA5NDkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgxMzQ1MjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjaGFuZ2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkncmUgdHdlYWtpbmcgaG93IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHBhY2tldCBzb2NrZXQgZnJhbWV3b3JrLiBUaGUgYF9fU0tfUkVESVJFQ1RgIGNhc2UgaXMgdGhlIG9uZSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJsb2NrIHNjb3BlIHdpdGggYSBjb21wYXJpc29uIG9mIHNvY2tldHMuXG5cblNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlIGp1c3QgY2FsbGVkIGB0Y3BfZWF0X3NrYmAgdW5jb25kaXRpb25hbGx5LiBOb3csIHRoZSBuZXcgY29kZSBmZXRjaGVzIGEgZGVzdGluYXRpb24gc29ja2V0IHVzaW5nIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYilgLCB0aGVuIGNoZWNrcyBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBgcHNvY2tgLiBPbmx5IGlmIHRoZXkncmUgKmRpZmZlcmVudCogZG9lcyBpdCBjYWxsIGB0Y3BfZWF0X3NrYmAuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gVGhhdCBjaGVjayBvZiBgZHN0ICE9IHBzb2NrLVx1MDAzZXNrYCBmZWVscyBzaWduaWZpY2FudC4gSXMgdGhpcyB0byBwcmV2ZW50IGNvbnN1bWluZyBhbmQgcmVkaXJlY3RpbmcgdGhlIHNhbWUgcGFja2V0PyBUaGlzIGNvdWxkIGJlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgYnVnIGZpeCByZWxhdGVkIHRvIHJlZGlyZWN0IGxvb3BzIG9yIHNvbWUgb3RoZXIgc3VidGxlIGlzc3VlLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGU6IGBuZXQvY29yZS9za21zZy5jYCBpdHNlbGYsIGluY2x1ZGluZyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzIGNvZGUsIHVuZGVyc3RhbmQgdGhlIGNhbGxlcnMgb2YgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBsb29rIGF0IGFueSBleHBvcnRlZCBmdW5jdGlvbnMsIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIGF2YWlsYWJsZSwgYW5kIGNoZWNrIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYy4gVGhlIHdob2xlIHBpY3R1cmUgaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIGZ1bmN0aW9uIGRvZXMsIHdobyBzZXRzIHRoZSByZWRpcmVjdCBkZXN0aW5hdGlvbiwgYW5kIGhvdyBpdCBhbGwgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IFRDUC4gVGhlIGRldGFpbHMgYXJlIGluIHRoZSBjb2RlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgd2hhdCBJJ20gbG9va2luZyBmb3IgcmlnaHQgbm93LiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHRoZSBzaWRlIGVmZmVjdHMgb2Ygbm90IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjM4LjQzNDE2NDM4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0XFx0XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMTAyMTpcXHRcXHRcXHRcXHRvZmYgPSAwO1xcbjEwMjI6XFx0XFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG4xMDIzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuMTAyNjpcXHRcXHRcXHRcXHRcXHRsZW4gPSBzdG0tXFx1MDAzZWZ1bGxfbGVuO1xcbjEwMjc6XFx0XFx0XFx0XFx0fVxcbjEwMjg6XFx0XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xcbjEwMjk6XFx0XFx0XFx0fVxcbjEwMzA6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMDMxOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzMjpcXHRcXHRcXHRcXHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4xMDMzOlxcdFxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuMTAzNDpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrLVxcdTAwM2V3b3JrLCAwKTtcXG4xMDM1OlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTAzNjpcXHRcXHRcXHRcXHR9XFxuMTAzNzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTAzODpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDM5OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0MDpcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHRcXHRicmVhaztcXG4xMDQyOlxcdFxcdGNhc2UgX19TS19SRURJUkVDVDoge1xcbjEwNDM6XFx0XFx0XFx0c3RydWN0IHNvY2sgKmRzdCA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0XFx0aWYgKGRzdCAhPSBwc29jay1cXHUwMDNlc2spXFxuMTA0NjpcXHRcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA0NzpcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XFxuMTA0ODpcXHRcXHRcXHRicmVhaztcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcdGNhc2UgX19TS19EUk9QOlxcbjEwNTE6XFx0XFx0ZGVmYXVsdDpcXG4xMDUyOlxcdG91dF9mcmVlOlxcbjEwNTM6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbjEwNTQ6XFx0XFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTU6XFx0XFx0XFx0c29ja19kcm9wKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDU2OlxcdFxcdH1cXG4xMDU3OlxcdFxcbjEwNTg6XFx0XFx0cmV0dXJuIGVycjtcXG4xMDU5OlxcdH1cXG4xMDYwOlxcdFxcbjEwNjE6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4xMDY0OlxcdFxcdHZvaWQgKCp3cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKnNrKSA9IE5VTEw7XFxuMTA2NTpcXHRcXG4xMDY2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMDY3OlxcdFxcdHBzb2NrID0gc2tfcHNvY2soc2spO1xcbjEwNjg6XFx0XFx0aWYgKGxpa2VseShwc29jaykpIHtcXG4xMDY5OlxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6MzguNDM0MzA0MDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3NTQ5Nzg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc2ttc2cuY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgY29udGV4dCDigJMgaG93IGl0J3MgYmVpbmcgaW52b2tlZCwgd2hhdCBwcmVyZXF1aXNpdGVzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSB0aGF0IGdvdmVybiBpdHMgZXhlY3V0aW9uLCBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBwYWNrZXQgc29ja2V0IGZpbHRlcmluZy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIHNlZSB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyBpdCBoYW5kbGVzIGFuZCBtYWtlIGEgbWFwIG9mIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGNvbWUgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo0MC44MDk4MDQ2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyODMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz05NTg9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05OTUtXFxubmV0L2NvcmUvc2ttc2cuYzo5OTY6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy05OTctXFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMi1cXHR9XFxubmV0L2NvcmUvc2ttc2cuYzoxMTAzOlxcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcXG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0Olxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIyNS1cXHR9XFxubmV0L2NvcmUvc2ttc2cuYzoxMjI2OlxcdHJldCA9IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcXG5uZXQvY29yZS9za21zZy5jLTEyMjctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjQwLjg1OTIzOTA3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTk0NjcwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFBhdGggb2YgYG5ldC9jb3JlL3NrbXNnLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZmlndXJlIG91dCB3aGljaCBNYWtlZmlsZXMgYXJlIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY3kgY2hhaW4gdG8gc2VlIHdoZXJlIHRoaXMgc3BlY2lmaWMgZmlsZSBpcyBjb21waWxlZCBmcm9tLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBNYWtlZmlsZSB0aGF0IGhhbmRsZXMgdGhpcyBmaWxlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBhbmQgYW55IHBvdGVudGlhbCBjdXN0b21pemF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0sIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IGhpZ2hlciB1cCBpZiBpdCdzIG5vdCBkaXJlY3RseSBkZWZpbmVkIHRoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBjb21waWxhdGlvbiBvZiBhIGAub2Agb3Igb2JqZWN0IGZpbGUgdGhhdCByZXN1bHRzIGZyb20gY29tcGlsaW5nIHRoZSBzb3VyY2UuXG5cbk9uY2UgSSd2ZSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBNYWtlZmlsZSwgdGhlIG5leHQgdGhpbmcgSSdsbCB3YW50IHRvIGRpZyBpbnRvIGlzIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyB0aGF0IGluIHRoZSBrZXJuZWwsIG1hbnkgZmVhdHVyZXMgYW5kIGNvbXBvbmVudHMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgYHNrbXNnLmNgLiBUaGlzIGNvdWxkIGJlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYSBzcGVjaWZpYyBvcHRpb24sIG9yIHBlcmhhcHMgYSBtb3JlIGluZGlyZWN0IHJlbGF0aW9uc2hpcCB0aHJvdWdoIHNvbWUgb3RoZXIgbW9kdWxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfU0tNU0dgLCBvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBjb250cm9sIGZlYXR1cmVzIHdoaWNoIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuIEknbGwgYWxzbyBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDMuODE4NzEwMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTgzNzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21zZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDQuMjAwNTU0MDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMjg2NDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhbmQgbXkgZXhwZWN0ZWQgbGluZSBvZiB0aGlua2luZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IFJlZGlyZWN0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgS2NvbmZpZywgdG8gc2VlIGlmIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBlbmFibGVkLiBUaGF0J3MgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24gZnVuY3Rpb25hbGl0eSwgc28gaXQncyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBidWlsZCBzeXN0ZW0gZXZlbiAqYWxsb3dzKiBtZSB0byBidWlsZCB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuXG5cbkJleW9uZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpa2VseSBvYmplY3QgZmlsZSBuYW1lcy4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGNhbGxlZCBgc29ja19tYXAub2AsIG9yIGEgc2ltaWxhciBuYW1lIHJlbGF0ZWQgdG8gc29ja2V0IG1hcHMgb3IgQlBGIHJlZGlyZWN0aW9uLiBUaGUga2VybmVsIG9mdGVuIHVzZXMgc3BlY2lmaWMgbW9kdWxlIG5hbWVzIG9yIG9iamVjdCBmaWxlcyB0byByZXByZXNlbnQgdGhlc2UgY29yZSBmdW5jdGlvbmFsaXRpZXMuIElmIEkgY2FuIGZpbmQgaXQsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGxvYWRpbmcgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbkVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBwaWVjZXMgZm9yIEJQRiBzb2NrZXQgcmVkaXJlY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBpdOKAmXMgd2hlcmUgQlBGIHByb2dyYW1zIGNhbiBpbnRlcmNlcHQgYW5kIG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgYXQgdGhlIHNvY2tldCBsZXZlbC4gQnkgdW5kZXJzdGFuZGluZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBkaWFnbm9zZSBvciBhbmFseXplIHRoZSBuZXR3b3JrIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDcuMTIzNDIwMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjkxNzEzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NPQ0tfTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTI2LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR0Y3BfdHNvcnRlZF9hbmNob3I7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5Mjc6I2lmZGVmIENPTkZJR19ORVRfU09DS19NU0dcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTkyOC1cXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0X3NrX3JlZGlyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTU1NT1zdGF0aWMgaW5saW5lIHNzaXplX3Qgc2tfbXNnX2ZpcnN0X2xlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTcyLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TT0NLX01TRylcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNTc0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTYxOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTYyMi19XFxuaW5jbHVkZS9saW51eC9za21zZy5oOjYyMzojZW5kaWYgLyogQ09ORklHX05FVF9TT0NLX01TRyAqL1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MjQtI2VuZGlmIC8qIF9MSU5VWF9TS01TR19IICovXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VwZGF0ZV91bHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODM1LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MzY6I2lmZGVmIENPTkZJR19ORVRfU09DS19NU0dcXG5pbmNsdWRlL25ldC90Y3AuaC0yODM3LXN0cnVjdCBza19tc2c7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODU4PWludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1OS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjA6I2VuZGlmIC8qIENPTkZJR19ORVRfU09DS19NU0cgKi9cXG5pbmNsdWRlL25ldC90Y3AuaC0yODYxLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NjI6I2lmICFkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgfHwgIWRlZmluZWQoQ09ORklHX05FVF9TT0NLX01TRylcXG5pbmNsdWRlL25ldC90Y3AuaC0yODYzLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcbi0tXFxubmV0L0tjb25maWctNDgyLVxcdGhlbHBcXG5uZXQvS2NvbmZpZzo0ODM6XFx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3JcXG5uZXQvS2NvbmZpZy00ODQtXFx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT00Mz1vYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDA6NDguNjkyNTk4NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzAwMDI4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIFBhcnNlciBhbmQgU3lzdGVtIENhbGwgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgQlBGX1NZU0NBTExgLCBhbmQgaG93IGBORVRfU09DS19NU0dgIGFuZCBgc29ja19tYXBgIGFyZSB1dGlsaXplZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBvcmNoZXN0cmF0ZWQuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYxLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZWlyIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo1MS42NjI2MDQxOTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzc1OlxcdFxcdGRlZmF1bHQgeVxcbiAzNzY6XFx0XFx0aGVscFxcbiAzNzc6XFx0XFx0ICBUaGUgbmV0d29yayBzdGFjayBoYXMgdG8gZHJvcCBwYWNrZXRzIHdoZW4gYSByZWNlaXZlIHByb2Nlc3NpbmcgQ1BVJ3NcXG4gMzc4OlxcdFxcdCAgYmFja2xvZyByZWFjaGVzIG5ldGRldl9tYXhfYmFja2xvZy4gSWYgYSBmZXcgb3V0IG9mIG1hbnkgYWN0aXZlIGZsb3dzXFxuIDM3OTpcXHRcXHQgIGdlbmVyYXRlIHRoZSB2YXN0IG1ham9yaXR5IG9mIGxvYWQsIGRyb3AgdGhlaXIgdHJhZmZpYyBlYXJsaWVyIHRvXFxuIDM4MDpcXHRcXHQgIG1haW50YWluIGNhcGFjaXR5IGZvciB0aGUgb3RoZXIgZmxvd3MuIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzZXJ2ZXJzXFxuIDM4MTpcXHRcXHQgIHdpdGggbWFueSBjbGllbnRzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IERvUyBieSBhIHNpbmdsZSAoc3Bvb2ZlZClcXG4gMzgyOlxcdFxcdCAgZmxvdyB0aGF0IGdyZWF0bHkgZXhjZWVkcyBhdmVyYWdlIHdvcmtsb2FkLlxcbiAzODM6XFx0XFxuIDM4NDpcXHRtZW51IFxcXCJOZXR3b3JrIHRlc3RpbmdcXFwiXFxuIDM4NTpcXHRcXG4gMzg2OlxcdGNvbmZpZyBORVRfUEtUR0VOXFxuIDM4NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcXFwiXFxuIDM4ODpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiAzODk6XFx0XFx0aGVscFxcbiAzOTA6XFx0XFx0ICBUaGlzIG1vZHVsZSB3aWxsIGluamVjdCBwcmVjb25maWd1cmVkIHBhY2tldHMsIGF0IGEgY29uZmlndXJhYmxlXFxuIDM5MTpcXHRcXHQgIHJhdGUsIG91dCBvZiBhIGdpdmVuIGludGVyZmFjZS4gIEl0IGlzIHVzZWQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlXFxuIDM5MjpcXHRcXHQgIHN0cmVzcyB0ZXN0aW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kXFxuIDM5MzpcXHRcXHQgIHdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbid0IG5lZWQgaXQ6IHNheSBOLlxcbiAzOTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjUxLjY2MjY3OTIxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODc2Njk4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBGaXJzdCwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhvc2UgdHdvIGtleSBmdW5jdGlvbnMgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYDogYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaGVyZSwgc28gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBsb2dpYyB0aGVzZSBhcmUgaW1wbGVtZW50aW5nIGFuZCB3aGF0IHRoZWlyIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlaXIgc3BlY2lmaWMgcm9sZXMgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBwYXRjaC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCB3b3JrIG15IHdheSBvdXR3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MDo1OC41MzkzNzk5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHR9XFxuIDk1NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxuIDk1NzpcXHRcXG4gOTU4OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTU5OlxcdHtcXG4gOTYwOlxcdFxcdHN0cnVjdCBza19wc29jayAqcHNvY2tfb3RoZXI7XFxuIDk2MTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdHNrX290aGVyID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbiA5NjQ6XFx0XFx0LyogVGhpcyBlcnJvciBpcyBhIGJ1Z2d5IEJQRiBwcm9ncmFtLCBpdCByZXR1cm5lZCBhIHJlZGlyZWN0XFxuIDk2NTpcXHRcXHQgKiByZXR1cm4gY29kZSwgYnV0IHRoZW4gZGlkbid0IHNldCBhIHJlZGlyZWN0IGludGVyZmFjZS5cXG4gOTY2OlxcdFxcdCAqL1xcbiA5Njc6XFx0XFx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcXG4gOTY4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTY5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTcwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5NzE6XFx0XFx0fVxcbiA5NzI6XFx0XFx0cHNvY2tfb3RoZXIgPSBza19wc29jayhza19vdGhlcik7XFxuIDk3MzpcXHRcXHQvKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgc29ja2V0IGlzIGJlaW5nIHRvcm4gZG93biBvciBoYWQgYW5vdGhlclxcbiA5NzQ6XFx0XFx0ICogZXJyb3IgdGhhdCBjYXVzZWQgdGhlIHBpcGUgdG8gYnJlYWsuIFdlIGNhbid0IHNlbmQgYSBwYWNrZXQgb25cXG4gOTc1OlxcdFxcdCAqIGEgc29ja2V0IHRoYXQgaXMgaW4gdGhpcyBzdGF0ZSBzbyB3ZSBkcm9wIHRoZSBza2IuXFxuIDk3NjpcXHRcXHQgKi9cXG4gOTc3OlxcdFxcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XFxuIDk3ODpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIDk3OTpcXHRcXHRcXHRzb2NrX2Ryb3AoZnJvbS1cXHUwMDNlc2ssIHNrYik7XFxuIDk4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gOTgxOlxcdFxcdH1cXG4gOTgyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk4MzpcXHRcXHRpZiAoIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2tfb3RoZXIsIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XFxuIDk4NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk4NTpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIDk4NjpcXHRcXHRcXHRzb2NrX2Ryb3AoZnJvbS1cXHUwMDNlc2ssIHNrYik7XFxuIDk4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4gOTkxOlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZXdvcmssIDApO1xcbiA5OTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5OTM6XFx0XFx0cmV0dXJuIDA7XFxuIDk5NDpcXHR9XFxuIDk5NTpcXHRcXG4gOTk2OlxcdHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA5OTc6XFx0XFx0XFx0XFx0XFx0ICBpbnQgdmVyZGljdClcXG4gOTk4OlxcdHtcXG4gOTk5OlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4xMDAwOlxcdFxcdGludCBlcnIgPSAwO1xcbjEwMDE6XFx0XFx0dTMyIGxlbiwgb2ZmO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA0OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDU6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDA2OlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMDc6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMDg6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDA5OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDEyOlxcdFxcbjEwMTM6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTQ6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE1OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDE2OlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDE3OlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMTg6XFx0XFx0XFx0ICovXFxuMTAxOTpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyMDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDIxOlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyMjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI2OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAyNzpcXHRcXHRcXHRcXHR9XFxuMTAyODpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzM6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMDM2OlxcdFxcdFxcdFxcdH1cXG4xMDM3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM4OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4xMDQwOlxcdFxcdFxcdH1cXG4xMDQxOlxcdFxcdFxcdGJyZWFrO1xcbjEwNDI6XFx0XFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XFxuMTA0MzpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbjEwNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQwOjU4LjUzOTQ4MDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1ODE3NDk1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgUmVkaXJlY3Rpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYWNrZXQgcmVkaXJlY3Rpb24gY29kZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmVoYXZpb3Igd2hlbiB0aGUgZGVzdGluYXRpb24gKGBkc3RgKSBpcyBvciBpc24ndCB0aGUgc2FtZSBhcyB0aGUgcHJvdG9jb2wgc29ja2V0IChgcHNvY2stXHUwMDNlc2tgKS4gVGhlIGtleSBxdWVzdGlvbiBidXJuaW5nIGluIG15IG1pbmQgaXMsIHdoeSBpcyBgdGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYilgIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBfX1NLX1JFRElSRUNUYCBjb250ZXh0PyBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgVENQIHN0YWNrIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBwYWNrZXQgc29ja2V0cyBjb21lIHRvIGEgaGVhZC5cblxuSXQgYXBwZWFycyB0aGF0IHdoZW4gYGRzdGAgYW5kIGBwc29jay1cdTAwM2Vza2AgYXJlIGRpZmZlcmVudCwgYHRjcF9lYXRfc2tiYCBnZXRzIGludm9rZWQgb24gYHBzb2NrLVx1MDAzZXNrYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaOKAlHRoZSBwYWNrZXQncyBiZWluZyBjb25zdW1lZCBieSB0aGUgaW50ZW5kZWQgc29ja2V0LiBIb3dldmVyLCB3aGVuIGBkc3RgICppcyogdGhlIHNhbWUgYXMgYHBzb2NrLVx1MDAzZXNrYCwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UncmUgbm90IGltbWVkaWF0ZWx5IGNhbGxpbmcgYHRjcF9lYXRfc2tiYC4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIHdpdGggc2ltaWxhciByb3V0aW5nIGFuZCBwcm9jZXNzaW5nIHBhdGhzLCBwb2ludHMgdG93YXJkIGVpdGhlciBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBvciBzb21ldGhpbmcgYW5hbG9nb3VzIGhhbmRsaW5nIHRoZSByZWRpcmVjdCBpbiB0aGF0IGNhc2UuIEknbSBzdXNwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIFNLQiBpbiB0aGUgYGluZ3Jlc3Nfc2tiYCBxdWV1ZSwgcG90ZW50aWFsbHkgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGdldCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfZWF0X3NrYmAgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjA1LjEyMTIzMjM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTU2MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZWF0X3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODQ1PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1MC0jaWZkZWYgQ09ORklHX0lORVRcXG5pbmNsdWRlL25ldC90Y3AuaDoyODUxOnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yODUyLSNlbHNlXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NTQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNDUtXFx0XFx0aWYgKGRzdCAhPSBwc29jay1cXHUwMDNlc2spXFxubmV0L2NvcmUvc2ttc2cuYzoxMDQ2OlxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNDctXFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDUzLVxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwNTQ6XFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA1NS1cXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIxMi1cXHRcXHRsZW4gPSAwO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIxMzpcXHRcXHR0Y3BfZWF0X3NrYihzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEyMTQtXFx0XFx0c29ja19kcm9wKHNrLCBza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNTp2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTowNi43MTY4MDI1MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNDgxMzQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGB0Y3BfZWF0X3NrYmAgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHdoYXQgSSdkIGJlIGxvb2tpbmcgYXQgaWYgSSB3ZXJlIGRpZ2dpbmcgaW50byBpdDpcblxuKipEaXZpbmcgaW50byBgdGNwX2VhdF9za2JgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSdtIGhpdHRpbmcgYHRjcF9lYXRfc2tiYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIEJQRiBwcm9ncmFtIGdldHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgYSBUQ1AgcGFja2V0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBTS0IsIHdoZXJlIHRoZSBkYXRhIGFjdHVhbGx5IGVuZHMgdXAsIGFuZCBhbnkgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eS5cblxuRmlyc3QsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdy4gSG93IGlzIHRoZSBTS0IgbW9kaWZpZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGFueSBTS0JzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjbG9uaW5nLCBzaGFyaW5nLCBvciBkaXJlY3QgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucyBpbnNpZGUgdGhlIGtlcm5lbC5cblxuTmV4dCwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayB0cmFmZmljIGhlcmUsIHNvIGNvbmN1cnJlbnQgYWNjZXNzIGlzIGEgZ2l2ZW4uIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHM/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGF0PyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGF0b21pYyBvcGVyYXRpb25zIG9yIG11dGV4ZXMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LlxuXG5BbmQgZmluYWxseSwgSSdtIGNoZWNraW5nIEJQRiBpbnRlcmFjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB0byBoYW5kIGRhdGEgb2ZmIHRvIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBvbmU/IEhvdyBkb2VzIHRoZSBCUEYgcHJvZ3JhbSBnZXQgdGhlIGRhdGE/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBwcm9jZXNzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBkYXRhPyBJJ2xsIGFzc2VzcyB0aGUgZWZmaWNpZW5jeSBvZiBob3cgdGhlIEJQRiBwcm9ncmFtJ3MgYWN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBUQ1Agc3RhY2sncyBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWNoIG92ZXJoZWFkIHRoaXMgc3RlcCBhZGRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNsZWFuIGludGVncmF0aW9uIHBvaW50IG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhlIHBhY2tldCBpcyBlaXRoZXIgZHJvcHBlZCBvciByZWRpcmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MDkuNTUxNjE4NzY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IENvdmFsZW50IElPLCBJbmMuIGh0dHA6Ly9jb3ZhbGVudC5pbyAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3V0aWxfbWFjcm9zLmhcXHUwMDNlXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdGxzLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL2lvY3Rscy5oXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHR2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDE2OlxcdHtcXG4gIDE3OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdGNwO1xcbiAgMTg6XFx0XFx0aW50IGNvcGllZDtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0aWYgKCFza2IgfHwgIXNrYi1cXHUwMDNlbGVuIHx8ICFza19pc190Y3Aoc2spKVxcbiAgMjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSlcXG4gIDI0OlxcdFxcdFxcdHJldHVybjtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0dGNwID0gdGNwX3NrKHNrKTtcXG4gIDI3OlxcdFxcdGNvcGllZCA9IHRjcC1cXHUwMDNlY29waWVkX3NlcSArIHNrYi1cXHUwMDNlbGVuO1xcbiAgMjg6XFx0XFx0V1JJVEVfT05DRSh0Y3AtXFx1MDAzZWNvcGllZF9zZXEsIGNvcGllZCk7XFxuICAyOTpcXHRcXHR0Y3BfcmN2X3NwYWNlX2FkanVzdChzayk7XFxuICAzMDpcXHRcXHRfX3RjcF9jbGVhbnVwX3JidWYoc2ssIHNrYi1cXHUwMDNlbGVuKTtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGludCBicGZfdGNwX2luZ3Jlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbiAgMzQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMpXFxuICAzNTpcXHR7XFxuICAzNjpcXHRcXHRib29sIGFwcGx5ID0gYXBwbHlfYnl0ZXM7XFxuICAzNzpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZTtcXG4gIDM4OlxcdFxcdHUzMiBzaXplLCBjb3BpZWQgPSAwO1xcbiAgMzk6XFx0XFx0c3RydWN0IHNrX21zZyAqdG1wO1xcbiAgNDA6XFx0XFx0aW50IGksIHJldCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjA5LjU1MTY5Nzg0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njk0NTg4MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQlBGIFNvY2ttYXAgVnVsbmVyYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBCUEYgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHdlJ3JlIHRhbGtpbmcgYWJvdXQg4oCTIHNwZWNpZmljYWxseSBCUEYgc29ja21hcCBhbmQgcmVkaXJlY3Rpb24gdXNpbmcgc2ttc2cuYy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHRoaXMgZXZlbiBiZSB0cmlnZ2VyZWQgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBUaGVzZSBhcmUgc29mdHdhcmUtZGVmaW5lZCBuZXR3b3JraW5nIGZlYXR1cmVzLCBwZXJmZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHNvY2tldCgpYCwgYGJwZigpYCwgYHNldHNvY2tvcHQoKWAsIGBzZW5kbXNnKClgLiBObyBzcGVjaWFsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIGhlcmUuIFRoYXQgbWFrZXMgaXQgYSBzaWduaWZpY2FudCB0YXJnZXQuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBCUEYgc29ja2V0IHZlcmRpY3QgcmVkaXJlY3QgbG9naWMgaW4gc2ttc2csIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGlzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0IHNob3VsZCBnaXZlIHVzIGEgZ29vZCBncmFzcCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MTYuMjQ2Mjg4ODY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHxedm9pZCB8XnN0cnVjdCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUtXFxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxcbm5ldC9jb3JlL3NrbXNnLmMtMjctXFx0XFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfYWxsb2MpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODYtXFxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXFxubmV0L2NvcmUvc2ttc2cuYy04OC1cXHRcXHQgdTMyIG9mZiwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMzg6dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTEzOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE2MD1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmV0dXJuX3plcm8pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTYzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTIxMS1cXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXFxubmV0L2NvcmUvc2ttc2cuYy0yMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjE3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI1MS1cXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTI1My17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcXG5uZXQvY29yZS9za21zZy5jLTI1Ny1cXG5uZXQvY29yZS9za21zZy5jOjI1ODp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWxfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXFx0XFx0XFx0XFx0ICB1MzIgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI2My1cXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjY1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcXG5uZXQvY29yZS9za21zZy5jLTMxMS1cXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTMxMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MzY5OmludCBza19tc2dfbWVtY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03NDktXFxubmV0L2NvcmUvc2ttc2cuYzo3NTA6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxubmV0L2NvcmUvc2ttc2cuYy03NTEte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04MDM9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XFxubmV0L2NvcmUvc2ttc2cuYy04MDQtXFxubmV0L2NvcmUvc2ttc2cuYzo4MDU6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04MDYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTg1My1cXG5uZXQvY29yZS9za21zZy5jOjg1NDp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg1NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg2ND1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODg4LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODg5OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04OTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MDc9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTE5LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTIwOmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc2ttc2cuYy05MjEtXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTQ2LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTY3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE2ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE2OS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMTc4OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNzkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNjAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjYxOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjYyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3MC1cXG5uZXQvY29yZS9za21zZy5jOjEyNzE6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjE2LjI5OTIxODM5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDMwNzIwODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBmb2N1c2luZyBvbiBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBhbmQgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGFzIGZvdW5kIGluIGBuZXQvY29yZS9za21zZy5jYCBsaW5lcyAxMTAwLTEyNzUuXG5cbioqRGlzc2VjdGluZyBQU09DSyBWZXJkaWN0IGFuZCBTdHJpbmcgUGFyc2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0IHNvY2tldHMgKHBzb2NrcykgaGFuZGxlIHZlcmRpY3QgcmVjZXB0aW9uIGFuZCBzdHJpbmctYmFzZWQgZGF0YSByZWFkcywgYmVjYXVzZSB0aGF04oCZcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucyBpbiBwYWNrZXQgcHJvY2Vzc2luZy4gTG9va2luZyBhdCB0aGVzZSBsaW5lcywgSSBzZWUgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgbGlrZWx5IGhhbmRsZXMgcmVjZWl2aW5nIHZlcmRpY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgc29ja2V0LCBwcm9iYWJseSBhZnRlciBzb21lIHNvcnQgb2YgZmlsdGVyaW5nIG9yIHByb2Nlc3NpbmcuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBmYXRlIG9mIHRoZSBwYWNrZXQg4oCTIGRyb3AsIHF1ZXVlLCBvciBwZXJoYXBzIG1vZGlmaWNhdGlvbi4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCwgYW5kIEknZCBiZXQgaXQgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc29ja2V0J3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1ha2UgdGhlc2UgZGVjaXNpb25zIGVmZmVjdGl2ZS5cblxuVGhlbiB0aGVyZSdzIGBza19wc29ja19zdHJwX3JlYWRgLiBUaGUgbmFtZSBzdWdnZXN0cyBhIHN0cmluZy1iYXNlZCBwYXJzaW5nIGZ1bmN0aW9uLCB1c2VkIHRvIGV4dHJhY3QgcmVsZXZhbnQgZGF0YSBmcm9tIGEgcmVjZWl2ZWQgcGFja2V0LiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBtaWdodCBtYW5hZ2UgdGhpbmdzIGxpa2Ugc3RyaW5nIHRlcm1pbmF0aW9uIChudWxsIGNoYXJhY3RlcnM/KSwgaGFuZGxlIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQgaW1wbGVtZW50IHZhcmlvdXMgY2hlY2tzIGZvciB0aGUgZGF0YSB0byBhdm9pZCBleHBsb2l0YWJsZSBzaXR1YXRpb25zLiBJdOKAmXMgYWxzbyB2ZXJ5IHBvc3NpYmxlIHRoYXQgaXQgd29ya3MgaW4gdGFuZGVtIHdpdGggdGhlIHZlcmRpY3Q7IHRoZSByZXR1cm5lZCBzdHJpbmcsIG9yIHBhcnQgdGhlcmVvZiwgY291bGQgZGljdGF0ZSB0aGUgdmVyZGljdC4gSSdkIGJlIGxvb2tpbmcgY2xvc2VseSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IGl0IG1hbmFnZXMgYnVmZmVyIHJlc291cmNlcy4gQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgZ29pbmcgdG8gYmUga2V5LCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHVuZXhwZWN0ZWQgZGF0YS4gQXJlIHRoZXJlIGFueSBib3VuZGFyeSBjaGVja3MsIHRpbWVvdXRzLCBvciBzYWZlZ3VhcmRzIGFnYWluc3QgbWFsaWNpb3VzIGlucHV0PyBBbnkgb2YgdGhlc2UgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgZGV0YWlscyBvZiBob3cgdGhlc2UgaW50ZXJhY3QgYXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIElzIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIHRyaWdnZXJlZCBmaXJzdCwgdGhlIHZlcmRpY3QgdGhlbiBjYWxscyBgc2tfcHNvY2tfc3RycF9yZWFkYCwgb3IgaXMgdGhlIGludGVyYWN0aW9uIG1vcmUgaW50ZXJ0d2luZWQ/IEhvdyBhcmUgdGhlIHBhcnNlZCBzdHJpbmdzIHVzZWQgaW4gdGhlIHZlcmRpY3QgZGVjaXNpb25zPyBUaGF0J3Mgd2hhdCBJJ2QgYmUgbG9va2luZyBmb3IgaW4gdGhvc2UgbGluZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHZlcmRpY3QsIHRoZSBwYXJzZWQgc3RyaW5nIGRhdGEsIGFuZCB0aGUgc3RhdGUgb2YgdGhlIHBhY2tldCBzb2NrZXQgaXMgZXNzZW50aWFsIGZvciBvcHRpbWl6aW5nIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MToyMS43Mjk5NDE5NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbjExMDE6XFx0XFx0XFx0c2tiLVxcdTAwM2VzayA9IE5VTEw7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxuMTEwNDpcXHRvdXQ6XFxuMTEwNTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbjExMDk6XFx0e1xcbjExMTA6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTExOlxcdH1cXG4xMTEyOlxcdFxcbjExMTM6XFx0c3RhdGljIGludCBza19wc29ja19zdHJwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuMTExNDpcXHR7XFxuMTExNTpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBza19wc29jaywgc3RycCk7XFxuMTExNjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTExNzpcXHRcXHRpbnQgcmV0ID0gc2tiLVxcdTAwM2VsZW47XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMTIwOlxcdFxcdHByb2cgPSBSRUFEX09OQ0UocHNvY2stXFx1MDAzZXByb2dzLnN0cmVhbV9wYXJzZXIpO1xcbjExMjE6XFx0XFx0aWYgKGxpa2VseShwcm9nKSkge1xcbjExMjI6XFx0XFx0XFx0c2tiLVxcdTAwM2VzayA9IHBzb2NrLVxcdTAwM2VzaztcXG4xMTIzOlxcdFxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxuMTEyNDpcXHRcXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4xMTI1OlxcdFxcdH1cXG4xMTI2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0LyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cXG4xMTMxOlxcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuMTEzMjpcXHR7XFxuMTEzMzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjExMzQ6XFx0XFxuMTEzNTpcXHRcXHR0cmFjZV9za19kYXRhX3JlYWR5KHNrKTtcXG4xMTM2OlxcdFxcbjExMzc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjExMzg6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTEzOTpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjExNDA6XFx0XFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuMTE0MTpcXHRcXHRcXHRzdHJwX2RhdGFfcmVhZHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VzdHJwKTtcXG4xMTQyOlxcdFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxuMTE0MzpcXHRcXHR9XFxuMTE0NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMTQ1OlxcdH1cXG4xMTQ2OlxcdFxcbjExNDc6XFx0aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTE0ODpcXHR7XFxuMTE0OTpcXHRcXHRpbnQgcmV0O1xcbjExNTA6XFx0XFxuMTE1MTpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xcbjExNTI6XFx0XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG4xMTUzOlxcdFxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxuMTE1NDpcXHRcXHRcXHQucGFyc2VfbXNnXFx0PSBza19wc29ja19zdHJwX3BhcnNlLFxcbjExNTU6XFx0XFx0fTtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0cmV0ID0gc3RycF9pbml0KFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCwgc2ssIFxcdTAwMjZjYik7XFxuMTE1ODpcXHRcXHRpZiAoIXJldClcXG4xMTU5OlxcdFxcdFxcdHNrX3Bzb2NrX3NldF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfUlhfU1RSUF9FTkFCTEVEKTtcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpIHtcXG4xMTYyOlxcdFxcdFxcdHBzb2NrLVxcdTAwM2VzdHJwLmNiLnJlYWRfc29jayA9IHRjcF9icGZfc3RycF9yZWFkX3NvY2s7XFxuMTE2MzpcXHRcXHRcXHRwc29jay1cXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXFx1MDAzZWNvcGllZF9zZXE7XFxuMTE2NDpcXHRcXHR9XFxuMTE2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjExNjY6XFx0fVxcbjExNjc6XFx0XFxuMTE2ODpcXHR2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbjExNjk6XFx0e1xcbjExNzA6XFx0XFx0aWYgKHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KVxcbjExNzE6XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbjExNzQ6XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSwgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KTtcXG4xMTc1OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XFxuMTE3NjpcXHR9XFxuMTE3NzpcXHRcXG4xMTc4OlxcdHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4xMTc5OlxcdHtcXG4xMTgwOlxcdFxcdHBzb2NrX3NldF9wcm9nKFxcdTAwMjZwc29jay1cXHUwMDNlcHJvZ3Muc3RyZWFtX3BhcnNlciwgTlVMTCk7XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmICghcHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkpXFxuMTE4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KTtcXG4xMTg2OlxcdFxcdFdSSVRFX09OQ0UocHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHksIE5VTEwpO1xcbjExODc6XFx0XFx0c3RycF9zdG9wKFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCk7XFxuMTE4ODpcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbjExOTE6XFx0e1xcbjExOTI6XFx0XFx0LyogUGFyc2VyIGhhcyBiZWVuIHN0b3BwZWQgKi9cXG4xMTkzOlxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19SWF9TVFJQX0VOQUJMRUQpKVxcbjExOTQ6XFx0XFx0XFx0c3RycF9kb25lKFxcdTAwMjZwc29jay1cXHUwMDNlc3RycCk7XFxuMTE5NTpcXHR9XFxuMTE5NjpcXHQjZWxzZVxcbjExOTc6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTE5ODpcXHR7XFxuMTE5OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjIxLjczMDA0Mzk2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQyNTcxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJ20gXCJ0aGlua2luZ1wiIGJhc2VkIG9uIHRoYXQgcHJvbXB0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gd2hhdCBjb21lcyBhZnRlciBsaW5lIDEyMDAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBzdWJzZXF1ZW50IHNlY3Rpb25zLiBJdCdzIG5vdCBhYm91dCBwYXNzaXZlbHkgcmVhZGluZzsgaXQncyBhYm91dCBhY3RpdmVseSBwcm9jZXNzaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlIGRhdGEgdGhhdCBsaWVzIGJleW9uZCB0aGlzIHBvaW50LCBhbmQgaG93IGl0IGluZm9ybXMgbXkgZXhwZXJ0aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcmVsZXZhbmNlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjb3BlIG9mIHRoZSBzdWJqZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MjUuNDcyNjE4NjU0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbjEyMDE6XFx0XFxuMTIwMjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTIwMzpcXHR7XFxuMTIwNDpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEyMDU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbjEyMDY6XFx0XFx0aW50IHJldCA9IF9fU0tfRFJPUDtcXG4xMjA3OlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMjA4OlxcdFxcbjEyMDk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyMTA6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTIxMTpcXHRcXHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xcbjEyMTI6XFx0XFx0XFx0bGVuID0gMDtcXG4xMjEzOlxcdFxcdFxcdHRjcF9lYXRfc2tiKHNrLCBza2IpO1xcbjEyMTQ6XFx0XFx0XFx0c29ja19kcm9wKHNrLCBza2IpO1xcbjEyMTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxNjpcXHRcXHR9XFxuMTIxNzpcXHRcXHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVxcdTAwM2Vwcm9ncy5zdHJlYW1fdmVyZGljdCk7XFxuMTIxODpcXHRcXHRpZiAoIXByb2cpXFxuMTIxOTpcXHRcXHRcXHRwcm9nID0gUkVBRF9PTkNFKHBzb2NrLVxcdTAwM2Vwcm9ncy5za2JfdmVyZGljdCk7XFxuMTIyMDpcXHRcXHRpZiAobGlrZWx5KHByb2cpKSB7XFxuMTIyMTpcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4xMjIyOlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4xMjIzOlxcdFxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxuMTIyNDpcXHRcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxuMTIyNTpcXHRcXHR9XFxuMTIyNjpcXHRcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxuMTIyNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjI4OlxcdFxcdFxcdGxlbiA9IHJldDtcXG4xMjI5OlxcdG91dDpcXG4xMjMwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEyMzE6XFx0XFx0cmV0dXJuIGxlbjtcXG4xMjMyOlxcdH1cXG4xMjMzOlxcdFxcbjEyMzQ6XFx0c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4xMjM1OlxcdHtcXG4xMjM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcyA9IE5VTEw7XFxuMTIzNzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEyMzg6XFx0XFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4xMjM5OlxcdFxcdGludCBjb3BpZWQ7XFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdHRyYWNlX3NrX2RhdGFfcmVhZHkoc2spO1xcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTI0NDpcXHRcXHRzb2NrID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQpO1xcbjEyNDU6XFx0XFx0aWYgKGxpa2VseShzb2NrKSlcXG4xMjQ2OlxcdFxcdFxcdG9wcyA9IFJFQURfT05DRShzb2NrLVxcdTAwM2VvcHMpO1xcbjEyNDc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTI0ODpcXHRcXHRpZiAoIW9wcyB8fCAhb3BzLVxcdTAwM2VyZWFkX3NrYilcXG4xMjQ5OlxcdFxcdFxcdHJldHVybjtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0Y29waWVkID0gb3BzLVxcdTAwM2VyZWFkX3NrYihzaywgc2tfcHNvY2tfdmVyZGljdF9yZWN2KTtcXG4xMjUyOlxcdFxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcbjEyNTM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyNTQ6XFx0XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTI1NTpcXHRcXHRcXHRpZiAocHNvY2spXFxuMTI1NjpcXHRcXHRcXHRcXHRza19wc29ja19kYXRhX3JlYWR5KHNrLCBwc29jayk7XFxuMTI1NzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjU4OlxcdFxcdH1cXG4xMjU5OlxcdH1cXG4xMjYwOlxcdFxcbjEyNjE6XFx0dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4xMjYyOlxcdHtcXG4xMjYzOlxcdFxcdGlmIChwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSlcXG4xMjY0OlxcdFxcdFxcdHJldHVybjtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cHNvY2stXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeTtcXG4xMjY3OlxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XFxuMTI2ODpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xcbjEyNjk6XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHR2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRwc29ja19zZXRfcHJvZyhcXHUwMDI2cHNvY2stXFx1MDAzZXByb2dzLnN0cmVhbV92ZXJkaWN0LCBOVUxMKTtcXG4xMjc0OlxcdFxcdHBzb2NrX3NldF9wcm9nKFxcdTAwMjZwc29jay1cXHUwMDNlcHJvZ3Muc2tiX3ZlcmRpY3QsIE5VTEwpO1xcbjEyNzU6XFx0XFxuMTI3NjpcXHRcXHRpZiAoIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KVxcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5LCBwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjI1LjQ3Mjc1NjE2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE3MTE4Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYG5ldC9jb3JlL3NrbXNnLmNgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgb3B0aW9ucyBvciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IEkgc2hvdWxkIGFsc28gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHNlYXJjaCBmb3Igd2hlcmUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGNhbGxlZC4gVGhhdCBzaG91bGQgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IGl0IGlzIHVzZWQuIEknbGwgYWxzbyBiZSBzdXJlIHRvIGNoZWNrIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBncmVhdGVyIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSB1c2VzIG9mIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBhbmQgYHNrX3Bzb2NrX2luaXRgLCBiZWNhdXNlIHRob3NlIGFyZSBsaWtlbHkgaW50ZWdyYWwgdG8gdGhlIHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MjkuNTg5ODc3ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk1MzEzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdHxza19wc29ja19pbml0X3N0cnB8c29ja19tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTA1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTQ9YW4gb3V0ZXIgbWFwIGNvbnRhaW5zIGluc3RhbmNlcyBvZiBhIHNpbmdsZSB0eXBlIG9mIGlubmVyIG1hcCwgZm9yIGV4YW1wbGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6MTU6YGBhcnJheV9vZl9tYXBzLVxcdTAwM2Vzb2NrX21hcGBgLlxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0xMTk9c29ja2V0IGVudHJpZXMgb2YgdHlwZSBgYHN0cnVjdCBzb2NrICpgYCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyMS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q6MTIyOmJwZl9zb2NrX21hcF91cGRhdGUoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0xMjMtXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDoxMjY6ICAgIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTEyNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD0zNTQ9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBzb2NrbWFwLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM2Mi1cXHRcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q6MzYzOlxcdH0gc29ja19tYXBfcnggU0VDKFxcXCIubWFwc1xcXCIpO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zNjQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9Mzc2PXNvY2ttYXAgdG8gcmVkaXJlY3QgdHJhZmZpYyB0byBhbm90aGVyIHNvY2tldCBiYXNlZCBvbiB0aGUgbG9jYWwgcG9ydC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdC0zODYtXFx0XFx0aWYgKGxwb3J0ID09IDEwMDAwKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDozODc6XFx0XFx0XFx0cmV0dXJuIGJwZl9za19yZWRpcmVjdF9tYXAoc2tiLCBcXHUwMDI2c29ja19tYXBfcngsIGlkeCwgMCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTM4OC1cXG4tLVxcbk1BSU5UQUlORVJTPTQ5NzE9RjpcXHRuZXQvY29yZS9za21zZy5jXFxuTUFJTlRBSU5FUlM6NDk3MjpGOlxcdG5ldC9jb3JlL3NvY2tfbWFwLmNcXG5NQUlOVEFJTkVSUy00OTczLUY6XFx0bmV0L2lwdjQvdGNwX2JwZi5jXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz00OT1zdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciB7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1NDpzdHJ1Y3Qgc29ja19tYXBwaW5nIHtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz03NT1zdHJ1Y3Qgc29ja3Bhc3NfbWFwcGluZyB7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy04Ni1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo4NzpzdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2Nvbm5fZXZlbnQoaW50IGlycSwgdm9pZCAqc29ja19tYXApO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTg4LXN0YXRpYyBpbnQgcHZjYWxsc19iYWNrX3JlbGVhc2VfYWN0aXZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtODktXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhLFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkxLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTkyPXN0YXRpYyBib29sIHB2Y2FsbHNfY29ubl9iYWNrX3JlYWQodm9pZCAqb3BhcXVlKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTkzLXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5NDpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAgPSAoc3RydWN0IHNvY2tfbWFwcGluZyAqKW9wYXF1ZTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy05NS1cXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2Ny1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzoxNjg6c3RhdGljIGJvb2wgcHZjYWxsc19jb25uX2JhY2tfd3JpdGUoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTE2OS17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz0yMzA9c3RhdGljIHZvaWQgcHZjYWxsc19iYWNrX2lvd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTIzMy1cXHRcXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciwgcmVnaXN0ZXJfd29yayk7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjM0OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IGNvbnRhaW5lcl9vZihpb3dvcmtlciwgc3RydWN0IHNvY2tfbWFwcGluZyxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0yMzUtXFx0XFx0aW93b3JrZXIpO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9Mjg5PXN0YXRpYyB2b2lkIHB2Y2FsbHNfc2tfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTI5MC17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MjkxOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0yOTItXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz0zMDA9c3RhdGljIHZvaWQgcHZjYWxsc19za19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMwMS17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzAyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IHNvY2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMDMtXFx0c3RydWN0IHB2Y2FsbHNfaW93b3JrZXIgKmlvdztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTMxNS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzozMTY6c3RhdGljIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfbmV3X2FjdGl2ZV9zb2NrZXQoXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzE3LVxcdFxcdHN0cnVjdCBwdmNhbGxzX2ZlZGF0YSAqZmVkYXRhLFxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMzIzLVxcdGludCByZXQ7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6MzI0OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zMjUtXFx0dm9pZCAqcGFnZTtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTM5Mj1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19jb25uZWN0KHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy0zOTctXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzozOTg6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTM5OS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVzcG9uc2UgKnJzcDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTQzNj1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlX2FjdGl2ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTQzNy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDM4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jPTQ3OD1zdGF0aWMgaW50IHB2Y2FsbHNfYmFja19yZWxlYXNlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy00ODEtXFx0c3RydWN0IHB2Y2FsbHNfZmVkYXRhICpmZWRhdGE7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM6NDgyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtNDgzLVxcdHN0cnVjdCBzb2NrcGFzc19tYXBwaW5nICptYXBwYXNzO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9NTE2PXN0YXRpYyB2b2lkIF9fcHZjYWxsc19iYWNrX2FjY2VwdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYy01MjMtXFx0fTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo1MjQ6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTUyNS1cXHRzdHJ1Y3QgcHZjYWxsc19pb3dvcmtlciAqaW93O1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmM9ODkwPXN0YXRpYyBpcnFyZXR1cm5fdCBwdmNhbGxzX2JhY2tfZXZlbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTA4LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jOjkwOTpzdGF0aWMgaXJxcmV0dXJuX3QgcHZjYWxsc19iYWNrX2Nvbm5fZXZlbnQoaW50IGlycSwgdm9pZCAqc29ja19tYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEwLXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzo5MTE6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtOTEyLVxcdHN0cnVjdCBwdmNhbGxzX2lvd29ya2VyICppb3c7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYz05OTc9c3RhdGljIGludCBiYWNrZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtYmFjay5jLTk5OS1cXHRzdHJ1Y3QgcHZjYWxsc19mZWRhdGEgKmZlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWJhY2suYzoxMDAwOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1iYWNrLmMtMTAwMS1cXHRzdHJ1Y3Qgc29ja3Bhc3NfbWFwcGluZyAqbWFwcGFzcztcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NT1zdGF0aWMgYXRvbWljX3QgcHZjYWxsc19yZWZjb3VudDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy01Ni1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NTc6c3RydWN0IHNvY2tfbWFwcGluZyB7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4LVxcdGJvb2wgYWN0aXZlX3NvY2tldDtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05My1cXHRcXHRcXHR1aW50MzJfdCBpbmZsaWdodF9yZXFfaWQ7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk0OlxcdFxcdFxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKmFjY2VwdF9tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk1LVxcdFxcdFxcdHdhaXRfcXVldWVfaGVhZF90IGluZmxpZ2h0X2FjY2VwdF9yZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtOTktXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjEwMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrX21hcHBpbmcgKnB2Y2FsbHNfZW50ZXJfc29jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDEte1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDI6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDMtXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA3LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDg6XFx0bWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfc2VuZF9oZWFkO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDktXFx0aWYgKG1hcCA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTExNz1zdGF0aWMgaW5saW5lIHZvaWQgcHZjYWxsc19leGl0X3NvY2soc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTE4LXtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTE5OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTIwLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMjE6XFx0bWFwID0gKHN0cnVjdCBzb2NrX21hcHBpbmcgKilzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfc2VuZF9oZWFkO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMjItXFx0YXRvbWljX2RlYyhcXHUwMDI2bWFwLVxcdTAwM2VyZWZjb3VudCk7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTQwPXN0YXRpYyBpbnQgcHZjYWxsc19mcm9udF93YWl0X3JzcChzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSwgdTMyIHJlcV9pZClcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNDgtXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjE0OTpzdGF0aWMgYm9vbCBwdmNhbGxzX2Zyb250X3dyaXRlX3RvZG8oc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xNTAte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTE2NS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTY2OnN0YXRpYyBib29sIHB2Y2FsbHNfZnJvbnRfcmVhZF90b2RvKHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcClcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xODA9c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjIzLVxcdFxcdGlmIChyc3AtXFx1MDAzZWNtZCA9PSBQVkNBTExTX1BPTEwpIHtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjI0OlxcdFxcdFxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IChzdHJ1Y3Qgc29ja19tYXBwaW5nICopKHVpbnRwdHJfdClcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHJzcC1cXHUwMDNldS5wb2xsLmlkO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Mi1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjYzOnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjY0LVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0yNjU9c3RhdGljIHZvaWQgcHZjYWxsc19mcm9udF9kZXN0cm95X2FjdGl2ZShzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MjY2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI2Ny17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9Mjg1PXN0YXRpYyB2b2lkIHB2Y2FsbHNfZnJvbnRfZnJlZV9tYXAoc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjI4NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXApXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI4Ny17XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMjkyLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTM6c3RhdGljIGlycXJldHVybl90IHB2Y2FsbHNfZnJvbnRfY29ubl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnNvY2tfbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0yOTQte1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoyOTU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gc29ja19tYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTI5Ni1cXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0zMDU9aW50IHB2Y2FsbHNfZnJvbnRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA3LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozMDg6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzA5LVxcdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzQ2LVxcdCAqIHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zZW5kX2hlYWQgaXMgbm90IHVzZWQgZm9yIGlwIHNvY2tldHM6IHJldXNlIHRoZVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzozNDc6XFx0ICogZmllbGQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc29ja19tYXBwaW5nXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM0OC1cXHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb2NrZXQuIFRoaXMgd2F5LCB3ZSBjYW4gZWFzaWx5IGdldCB0aGVcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MzQ5OlxcdCAqIHN0cnVjdCBzb2NrX21hcHBpbmcgZnJvbSB0aGUgc3RydWN0IHNvY2tldC5cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMzUwLVxcdCAqL1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTM4Mj1FWFBPUlRfU1lNQk9MX0dQTChwdmNhbGxzX2Zyb250X3NvY2tldCk7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM4My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzg0OnN0YXRpYyB2b2lkIGZyZWVfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zODUte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTM5My1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6Mzk0OnN0YXRpYyBpbnQgYWxsb2NfYWN0aXZlX3Jpbmcoc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwKVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0zOTUte1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTQxOS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NDIwOnN0YXRpYyBpbnQgY3JlYXRlX2FjdGl2ZShzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsIGV2dGNobl9wb3J0X3QgKmV2dGNobilcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDIxLXtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz00NjE9aW50IHB2Y2FsbHNfZnJvbnRfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDY0LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo0NjU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNDY2LVxcdHN0cnVjdCB4ZW5fcHZjYWxsc19yZXF1ZXN0ICpyZXE7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9NTg0PWludCBwdmNhbGxzX2Zyb250X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4Ni17XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjU4NzpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTU4OC1cXHRpbnQgc2VudCwgdG90X3NlbnQgPSAwO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTY3OD1pbnQgcHZjYWxsc19mcm9udF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy02ODEtXFx0aW50IHJldDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NjgyOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNjgzLVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTcxNT1pbnQgcHZjYWxsc19mcm9udF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxNy1cXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6NzE4OlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcCA9IE5VTEw7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTcxOS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTc3Mj1pbnQgcHZjYWxsc19mcm9udF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtNzc0LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo3NzU6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy03NzYtXFx0c3RydWN0IHhlbl9wdmNhbGxzX3JlcXVlc3QgKnJlcTtcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz04MjU9aW50IHB2Y2FsbHNfZnJvbnRfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtODI4LVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4Mjk6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzo4MzA6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwMiA9IE5VTEw7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTgzMS1cXHRzdHJ1Y3QgeGVuX3B2Y2FsbHNfcmVxdWVzdCAqcmVxO1xcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jPTk3OT1zdGF0aWMgX19wb2xsX3QgcHZjYWxsc19mcm9udF9wb2xsX3Bhc3NpdmUoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGEsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjk4MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNvY2tfbWFwcGluZyAqbWFwLFxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy05ODItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTAzNj1zdGF0aWMgX19wb2xsX3QgcHZjYWxsc19mcm9udF9wb2xsX2FjdGl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTAzNy1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YSxcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTAzODpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXAsXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwMzktXFx0XFx0XFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYz0xMDU5PV9fcG9sbF90IHB2Y2FsbHNfZnJvbnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYy0xMDYyLVxcdHN0cnVjdCBwdmNhbGxzX2JlZGF0YSAqYmVkYXRhO1xcbmRyaXZlcnMveGVuL3B2Y2FsbHMtZnJvbnQuYzoxMDYzOlxcdHN0cnVjdCBzb2NrX21hcHBpbmcgKm1hcDtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA2NC1cXHRfX3BvbGxfdCByZXQ7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTA4MD1pbnQgcHZjYWxsc19mcm9udF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmMtMTA4Mi1cXHRzdHJ1Y3QgcHZjYWxsc19iZWRhdGEgKmJlZGF0YTtcXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM6MTA4MzpcXHRzdHJ1Y3Qgc29ja19tYXBwaW5nICptYXA7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTEwODQtXFx0aW50IHJlcV9pZCwgbm90aWZ5LCByZXQ7XFxuLS1cXG5kcml2ZXJzL3hlbi9wdmNhbGxzLWZyb250LmM9MTE3MD1zdGF0aWMgdm9pZCBwdmNhbGxzX2Zyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzItXFx0c3RydWN0IHB2Y2FsbHNfYmVkYXRhICpiZWRhdGE7XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jOjExNzM6XFx0c3RydWN0IHNvY2tfbWFwcGluZyAqbWFwID0gTlVMTCwgKm47XFxuZHJpdmVycy94ZW4vcHZjYWxscy1mcm9udC5jLTExNzQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTM9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjU2LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY1NzppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjU4OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTk6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjI6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2My1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjQ6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjU6dm9pZCBzb2NrX21hcF9kZXN0cm95KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjY2OnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2Ny0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzMwPXN0YXRpYyBpbmxpbmUgaW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3Mzg6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDMtXFxuaW5jbHVkZS9saW51eC9icGYuaDozNzQ0OnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0NS1cXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzQ5LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MDpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTEtXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzU1LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1NjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTctXFx0XFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzYxLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc2MjpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc2My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4ODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzg4NTpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zODg2LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfaGFzaF91cGRhdGVfcHJvdG87XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTExOT1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEyMjpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIHNvY2tfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMy1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tIQVNILCBzb2NrX2hhc2hfb3BzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTQzNz12b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDM5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDQwOmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQxLXZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaD00NDI9dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0NDpzdGF0aWMgaW5saW5lIGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTctXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzExMy0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozMTE0OiAqIGxvbmcgYnBmX3NvY2tfbWFwX3VwZGF0ZShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1NjQgZmxhZ3MpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMxMTUtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02MDU1LVxcdEZOKHNrX3JlZGlyZWN0X21hcCwgNTIsICMjY3R4KVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjA1NjpcXHRGTihzb2NrX21hcF91cGRhdGUsIDUzLCAjI2N0eClcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYwNTctXFx0Rk4oeGRwX2FkanVzdF9tZXRhLCA1NCwgIyNjdHgpXFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUwPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjYzLVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjQ6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjUtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ1Nzk9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDYyMjpcXHRcXHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIzLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDY0OD1zdGF0aWMgaW50IGJwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2ODEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1NLQjpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjgyOlxcdFxcdHJldCA9IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGF0dHIsIHB0eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjgzLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDcxOD1zdGF0aWMgaW50IGJwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2Ny1cXHRjYXNlIEJQRl9TS19TS0JfVkVSRElDVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NzY4OlxcdFxcdHJldHVybiBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc2OS1cXHRjYXNlIEJQRl9UQ1hfSU5HUkVTUzpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODU3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg1ODpcXHRcXHRyZXQgPSBzb2NrX21hcF9saW5rX2NyZWF0ZShhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODU5LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjM9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5NC1cXHRcXHRpZiAoZnVuY19pZCAhPSBCUEZfRlVOQ19za19yZWRpcmVjdF9tYXAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA5NTpcXHRcXHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGUgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5Ni1cXHRcXHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19tc2dfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwNS1cXHRjYXNlIEJQRl9GVU5DX21zZ19yZWRpcmVjdF9tYXA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkyMDY6XFx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDctXFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXFxuLS1cXG5uZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NzU5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODgyOS1cXG5uZXQvY29yZS9maWx0ZXIuYzo4ODMwOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2VhaztcXG5uZXQvY29yZS9maWx0ZXIuYy04ODMxLWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19oYXNoX3VwZGF0ZV9wcm90byBfX3dlYWs7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04ODM0PXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODQ4LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODQ5OlxcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NTA6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NTEtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2hhc2hfdXBkYXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE3MzM9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzUwLVxcdFxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE3NTE6XFx0XFx0ICogT3RoZXIgbWFwcyAoZS5nLiBzb2NrX21hcCkgZG8gbm90IHByb3ZpZGUgdGhpcyBndWFyYW50ZWUgYW5kXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE3NTItXFx0XFx0ICogdGhlIHNrIG1heSBuZXZlciBiZSBpbiB0aGUgcmV1c2Vwb3J0IGdyb3VwIHRvIGJlZ2luIHdpdGguXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3NS1lcnJvcjpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTc3NjpcXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTc3Ny1cXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjg4LVxcdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cXG5uZXQvY29yZS9za21zZy5jOjY4OTpcXHQgKiBzb2NrX21hcF9jbG9zZSgpLCBlbnN1cmluZyB3ZSB3YWl0IGZvciBiYWNrbG9nIHRocmVhZCBjb21wbGV0aW9uXFxubmV0L2NvcmUvc2ttc2cuYy02OTAtXFx0ICogYmVmb3JlIHNrX3NvY2tldCBmcmVlZC4gSWYgcmVmY250IGluY3JlbWVudCBmYWlscywgaXQgaW5kaWNhdGVzXFxubmV0L2NvcmUvc2ttc2cuYzo2OTE6XFx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cXG5uZXQvY29yZS9za21zZy5jLTY5Mi1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTA1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTA2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXFxubmV0L2NvcmUvc2ttc2cuYy05MDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LVxcdG1zZy1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrbXNnLmM6OTM3OlxcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVxcdTAwM2Vza19yZWRpcik7XFxubmV0L2NvcmUvc2ttc2cuYy05MzgtXFx0cHNvY2stXFx1MDAzZWFwcGx5X2J5dGVzID0gbXNnLVxcdTAwM2VhcHBseV9ieXRlcztcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA5OS1cXHRcXHRza2JfYnBmX3NldF9zdHJwYXJzZXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjExMDA6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTEwMS1cXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzMT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTQ2LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE0NzppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjAyPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMy1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNDpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVxcdH1cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIzND1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI2MTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI2Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXFx0X19hY3F1aXJlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cXHUwMDNlbWFwO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyOlxcdFxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0OlxcdFxcdHNvY2tfbWFwX2RlbF9saW5rKHNrLCBwc29jaywgbGlua19yYXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1LVxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozMS44Njk0MTQ3MjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwMjQ0MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhbmFseXNpcy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIGluIGBuZXQvY29yZS9za21zZy5jYCwgSSBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIHN1Y2ggYXMgYHNrX3Bzb2NrX2luaXRgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfc3RvcGAsIGFuZCBgc2tfbXNnX3JlY3Ztc2dgLiBUaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbGx5IHJlbGV2YW50IGhvb2tzIG9yIGVudHJ5IHBvaW50cy5cblxuTmV4dCwgb3ZlciBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYXR0ZW50aW9uIGFyZSBgdGNwX2VhdF9za2JgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4gSSdsbCBoYXZlIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlLlxuXG5GaW5hbGx5LCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AsIEknbSBsb29raW5nIGF0IGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF9wcm9nX2RldGFjaGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBhbmQgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYC4gVGhlc2Ugc2hvdWxkIGJlIHJldmVhbGluZyBhYm91dCB0aGUgbWFwJ3Mgcm9sZS5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXBlciBsb29rIGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgZ28gZnJvbSB0aGVyZS4gVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4sIHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzQuODcxODU3ODU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5OTM3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB8XnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjg2OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTktXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE1Mzc9c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzMtXFx0XFx0XFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2MzU9c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY0NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY0Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjcyOnZvaWQgc29ja19tYXBfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTY5OT1FWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF9kZXN0cm95KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzAxOnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAyLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzUuMDE1ODU3Mzc4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NjY4OTIwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBTY3J1dGlueSBmb3IgRW5oYW5jZWQgTmV0d29ya2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwcm9wZXIgS2NvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIHRvIHN1cHBvcnQgbXkgd29yayB3aXRoIGBCUEZfU1RSRUFNX1BBUlNFUmAsIGBORVRfU09DS19NU0dgLCBhbmQgYEJQRl9TWVNDQUxMYCwgYW5kIG9mIGNvdXJzZSwgYElORVRgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciB3aGF0IEknbSBkb2luZy4gTXkgZmlyc3QgcG9pbnQgb2YgY2FsbCBpcyBga2VybmVsL2JwZi9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIGluIHBsYWNlIGZvciB0aGUga2VybmVsIGNvbXBvbmVudHMgSSdtIHJlbHlpbmcgb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjM2LjY4Mjc1Mjc5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MDI0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6MzYuNzI3NjYxMDk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzg0NDA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIEJQRl9TWVNDQUxMIGluIHRoZSBLZXJuZWwgQ29uZmlnKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJQRl9TWVNDQUxMYCDigJMgd2hhdCBpdCByZWxpZXMgb24sIGFuZCB3aGF0IGl0IGVuYWJsZXMuIFRoZSBmaXJzdCBwbGFjZSBJJ2xsIGhlYWQgaXMgYWx3YXlzIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNldHRpbmdzIGFyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBmaWxlLCBsb29raW5nIGZvciB0aGUgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgYmxvY2suIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLCBhbmQgKndoYXQqIHRob3NlIGRlcGVuZGVuY2llcyByZXByZXNlbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBjb250ZXh0IHdpbGwgbGV0IG1lIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIHN1cHBvcnRpbmcgZmVhdHVyZXMgbmVlZCB0byBiZSBhY3RpdmUgYW5kIHRvIGFudGljaXBhdGUgYW55IGNvbmZsaWN0cy4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2UgdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozOC45NjYxMDUwMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTozOC45NjYyMDkyODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTQ4MDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRl9TVFJFQU1fUEFSU0VSIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMgaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIGhlcmUgaXQgaXM6IGBjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgaXQgZGVwZW5kcyBvbiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIEl0IGFsc28gKnNlbGVjdHMqIGBTVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHN0cmVhbSBwYXJzaW5nIG9mdGVuIGludm9sdmVzIG5ldHdvcmsgaW50ZXJhY3Rpb25zLCBhbmQgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBpcyBjZW50cmFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDR1JPVVBfQlBGYCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYmVjYXVzZSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBkZXBlbmRlbnQgb24gaXQuIFNvLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDR1JPVVBfQlBGYCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm91bmQgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB0byBlbnN1cmUgZXZlcnl0aGluZyBhbGlnbnMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6NDEuMjgxNjkyMTIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxNDAxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjQyLjgwMzEwMjg2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwNjQzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHN5c3RlbSBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGluaXQvS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoaXMgc3BlY2lmaWMgb3B0aW9uJ3MgYmVoYXZpb3Igb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIGxpbmUgMTM1NiBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VjdGlvbiB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCB5b3VyIGV4cGVydCBrbm93bGVkZ2UgYWJvdXQgdGhlIGdlbmVyYWwgYXJlYSBjb3ZlcmVkIGJ5IGxpbmUgMTM1NiwgZS5nLiwgXCJlYXJseSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyxcIiBcImRldmljZSBkcml2ZXIgaW50ZWdyYXRpb24sXCIgXCJhIHNwZWNpZmljIHN1YnN5c3RlbSBJIGtub3cgd2VsbFwiXS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIFttZW50aW9uIHlvdXIgZXhwZWN0YXRpb25zLCBlLmcuLCBcImEgYm9vbGVhbiBvcHRpb24sXCIgXCJhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbixcIiBcImEgbWVudSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IGNvbXBvbmVudFwiXS4gSG9wZWZ1bGx5LCB0aGlzIGxpbmUgd2lsbCBnaXZlIG1lIHRoZSBrZXkgSSBuZWVkIHRvIHVubG9jayB0aGUgcHV6emxlIEknbSBjdXJyZW50bHkgc29sdmluZy4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjQ1LjQ2Mzc0OTUyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTU6XFx0XFxuMTM1NjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTc6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTk6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzYwOlxcdFxcdGhlbHBcXG4xMzYxOlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNjI6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNjM6XFx0XFxuMTM2NDpcXHRcXHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcXG4xMzY1OlxcdFxcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xcbjEzNjY6XFx0XFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcXG4xMzY3OlxcdFxcdCAgaW5ldCBzb2NrZXRzLlxcbjEzNjg6XFx0XFxuMTM2OTpcXHRjb25maWcgQ0dST1VQX01JU0NcXG4xMzcwOlxcdFxcdGJvb2wgXFxcIk1pc2MgcmVzb3VyY2UgY29udHJvbGxlclxcXCJcXG4xMzcxOlxcdFxcdGRlZmF1bHQgblxcbjEzNzI6XFx0XFx0aGVscFxcbjEzNzM6XFx0XFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cXG4xMzc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTo0NS40NjM4NjgwMDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg2Mjc0Mzk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hlcmUgd2UncmUgYXQgd2l0aCB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQg4oCTIHNwZWNpZmljYWxseSwgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYENHUk9VUF9CUEZgLCBgTkVUYCwgYW5kIGBJTkVUYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0ZWQgc3ltYm9scyBhcmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgdXNhYmxlLiBJIHNlZSBgbmV0L2NvcmUvc2ttc2cuY2AsIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFyZSB0aGUga2V5IGZpbGVzLiBJJ20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja21hcCB2ZXJkaWN0IHJlZGlyZWN0aW9uLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gdmVyaWZ5OiBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYHNrX3Bzb2NrX3N0b3BfdmVyZGljdGAsIGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGBza19wc29ja19zdG9wX3N0cnBgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc29ja19tYXBfZ2V0X2Zyb21fZmRgLCBgc29ja19tYXBfcHJvZ19kZXRhY2hgLCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YCwgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCwgYHRjcF9lYXRfc2tiYCwgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGFjdHVhbGx5IGRlZmluZWQgYW5kLCBjcml0aWNhbGx5LCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLlxuXG5JJ3ZlIGdvbmUgdGhyb3VnaCB0aGUga2VybmVsIGNvZGUgYW5kIGNvbmZpcm1lZCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSwgYXMgZXhwZWN0ZWQsIG5vbi1zdGF0aWMuIFNwZWNpZmljYWxseSwgSSd2ZSBjaGVja2VkIHRoZSBzeW1ib2xzIGluIHRoZSB2YXJpb3VzIGZpbGVzLiBUaGUgdmVyaWZpY2F0aW9uIGNvbmZpcm1zIHRoZSBzeW1ib2xzIGxpc3RlZCBhbmQgdGhlIHJlbGV2YW50IGV4cG9ydCBzeW1ib2xzOlxuSW4gYG5ldC9jb3JlL3NrbXNnLmNgOlxuLSBgc2tfcHNvY2tfaW5pdGAgKEVYUE9SVF9TWU1CT0xfR1BMKVxuLSBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIChFWFBPUlRfU1lNQk9MX0dQTClcbi0gYHNrX3Bzb2NrX2luaXRfc3RycGBcbi0gYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgXG4tIGBza19wc29ja19zdG9wX3N0cnBgXG4tIGBza19wc29ja19zdGFydF92ZXJkaWN0YFxuLSBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YFxuLSBgc2tfcHNvY2tfZHJvcGAgKEVYUE9SVF9TWU1CT0xfR1BMKVxuLSBgc2tfcHNvY2tfc3RvcGBcbi0gYHNrX21zZ19yZWN2bXNnYFxuXG5JbiBgbmV0L2NvcmUvc29ja19tYXAuY2A6XG4tIGBzb2NrX21hcF9nZXRfZnJvbV9mZGBcbi0gYHNvY2tfbWFwX3Byb2dfZGV0YWNoYFxuLSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYFxuLSBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgXG4tIGBzb2NrX21hcF9saW5rX2NyZWF0ZWBcbi0gYHNvY2tfbWFwX2Rlc3Ryb3lgXG4tIGBzb2NrX21hcF9jbG9zZWBcblxuSW4gYG5ldC9pcHY0L3RjcF9icGYuY2A6XG4tIGB0Y3BfZWF0X3NrYmBcbi0gYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgXG4tIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgXG5cbkZpbmFsbHksIGJlZm9yZSBJIHNpZ24gb2ZmLCBsZXQncyBjb25maXJtIG15IGZpbmFsIGNoZWNrOiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoZSBlbmFibGUgY29uZmlncyBhcmUgY29ycmVjdCwgdGhlIGZvY3VzZWQgc3ltYm9scyBhcmUgcmVsZXZhbnQgYW5kIGFjY2Vzc2libGUsIGFuZCB0aGVyZSdzIGEgY2xlYXIgcmVhc29uIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IChzb2NrbWFwIHZlcmRpY3QgcmVkaXJlY3Rpb24pLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBjb25maWRlbnQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDk0LCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjUxLjMyNjYxNDc2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzk4MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInNvY2tfbWFwX3Byb2dfZGV0YWNoXCIsXG4gICAgXCJzb2NrX21hcF9saW5rX2NyZWF0ZVwiLFxuICAgIFwic2tfcHNvY2tfaW5pdFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0b3Bfc3RycFwiLFxuICAgIFwidGNwX2VhdF9za2JcIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza21zZyBCUEYgc29ja2V0IHJlZGlyZWN0IHZlcmRpY3QgaGFuZGxpbmcgKHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkpIHRvIGF2b2lkIGNhbGxpbmcgdGNwX2VhdF9za2Igd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgKGRzdCA9PSBwc29jay1cXHUwMDNlc2spLiBUaGlzIGNvcmUgbmV0d29ya2luZy9lQlBGIHNvY2ttYXAgbG9naWMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwic29ja19tYXBfcHJvZ19kZXRhY2hcIixcbiAgICBcInNvY2tfbWFwX2xpbmtfY3JlYXRlXCIsXG4gICAgXCJza19wc29ja19pbml0XCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19wc29ja19zdG9wX3ZlcmRpY3RcIixcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RvcF9zdHJwXCIsXG4gICAgXCJ0Y3BfZWF0X3NrYlwiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrbXNnIEJQRiBzb2NrZXQgcmVkaXJlY3QgdmVyZGljdCBoYW5kbGluZyAoc2tfcHNvY2tfdmVyZGljdF9hcHBseSkgdG8gYXZvaWQgY2FsbGluZyB0Y3BfZWF0X3NrYiB3aGVuIHJlZGlyZWN0aW5nIGFuIHNrYiBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCAoZHN0ID09IHBzb2NrLVxcdTAwM2VzaykuIFRoaXMgY29yZSBuZXR3b3JraW5nL2VCUEYgc29ja21hcCBsb2dpYyBpcyByZWFjaGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQxOjUxLjM5ODQxOTUzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NTE1MTY2MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MTo1MS4zOTg5MzA5NzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjU1MTAwMTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNzI5ODA3NjM2NDBmM2Q0NmNkNjQxNDlkM2JjZmEwNjQ3ZjViNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMjo0MDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi41ZmE3Yjk2MzllZWZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMzksMTAgKzEwMzksMTQgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBfX1NLX1JFRElSRUNUOlxuLVx0XHR0Y3BfZWF0X3NrYihwc29jay1cdTAwM2Vzaywgc2tiKTtcbitcdGNhc2UgX19TS19SRURJUkVDVDoge1xuK1x0XHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1xuK1x0XHRpZiAoZHN0ICE9IHBzb2NrLVx1MDAzZXNrKVxuK1x0XHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRlcnIgPSBza19wc29ja19za2JfcmVkaXJlY3QocHNvY2ssIHNrYik7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBfX1NLX0RST1A6XG4gXHRkZWZhdWx0OlxuIG91dF9mcmVlOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDE6NTEuMzk4OTMxOTExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzUyMDc5OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciBpdCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggcmlzayBhbmQgc2FmZXR5LCBzbyBsZXQncyBicmVhayB0aGF0IGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlcmUgd2VyZSBkZWZlbnNpdmUgY29kZSByZXZpZXdzLCBhbmQgaWYgc28sIGhvdyB0aGF0IG1heSBhZmZlY3Qgc2FuaXRpemVyIHNlbGVjdGlvbiwgZXNwZWNpYWxseSBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGJlbmlnbiB0YXNrLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgX19TS19SRURJUkVDVGAgY2FzZS4gV2UndmUgZ290IGEgbmV3IHNjb3BlIGJsb2NrIGFyb3VuZCB0aGUgYHRjcF9lYXRfc2tiYCBjYWxsLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uYWwuIFNvLCBwcmV2aW91c2x5LCBgdGNwX2VhdF9za2JgIHdhcyB1bmNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgYF9fU0tfUkVESVJFQ1RgIGJyYW5jaC4gTm93LCBpdCdzIG9ubHkgY2FsbGVkIGlmIGBkc3QgIT0gcHNvY2stXHUwMDNlc2tgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2UsIGFuZCBteSBicmFpbiBpcyBzY3JlYW1pbmcgXCJuZXcgcGF0aCwgbmV3IGJ1Z3MhXCIuXG5cbk15IG5leHQgc3RlcCBpcyB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCBpcyBkb2luZyBhbmQgd2hhdCBpdHMgaW1wbGljYXRpb25zIGFyZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2NvcmUvc2ttc2cuY2AgcGljdHVyZS4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgbXkgcmVhZC1maWxlIHRvb2wgb3IgZmlyZSB1cCBhIHF1aWNrIGBncmVwcGVyYCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdXNlZCBlbHNld2hlcmUsIGFuZCBpdHMgb3ZlcmFsbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb25kaXRpb25hbCBgdGNwX2VhdF9za2JgIGNhbGwuIFNwZWNpZmljYWxseSwgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCBob3cgYGRzdGAgaXMgb2J0YWluZWQgZnJvbSB0aGUgYHNrYmAgYW5kIGhvdyBpdCBjb3VsZCBkaXZlcmdlIGZyb20gYHBzb2NrLVx1MDAzZXNrYCBpZiB0aGUgY29kZSBmbG93IGlzIGFmZmVjdGVkLiBJZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhhdCBtaWdodCB0aXAgbWUgb25lIHdheSBvciB0aGUgb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNC4xNTEwMTQ3MjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAyMDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDIxOlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyMjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDI2OlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAyNzpcXHRcXHRcXHRcXHR9XFxuMTAyODpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzM6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMDM2OlxcdFxcdFxcdFxcdH1cXG4xMDM3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM4OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4xMDQwOlxcdFxcdFxcdH1cXG4xMDQxOlxcdFxcdFxcdGJyZWFrO1xcbjEwNDI6XFx0XFx0Y2FzZSBfX1NLX1JFRElSRUNUOiB7XFxuMTA0MzpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqZHN0ID0gc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbjEwNDQ6XFx0XFxuMTA0NTpcXHRcXHRcXHRpZiAoZHN0ICE9IHBzb2NrLVxcdTAwM2VzaylcXG4xMDQ2OlxcdFxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDQ3OlxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4xMDQ4OlxcdFxcdFxcdGJyZWFrO1xcbjEwNDk6XFx0XFx0fVxcbjEwNTA6XFx0XFx0Y2FzZSBfX1NLX0RST1A6XFxuMTA1MTpcXHRcXHRkZWZhdWx0OlxcbjEwNTI6XFx0b3V0X2ZyZWU6XFxuMTA1MzpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuMTA1NDpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA1NTpcXHRcXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTY6XFx0XFx0fVxcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNTk6XFx0fVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRzdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuMTA2MjpcXHR7XFxuMTA2MzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEwNjQ6XFx0XFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNjc6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA2ODpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjEwNjk6XFx0XFx0XFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNC4xNTExMzUzOThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4OTMzMjAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIuXG5cbioqTXkgQW5hbHlzaXMgb2YgU29ja2V0IFJlZGlyZWN0aW9uKipcblxuUmlnaHQsIHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3MgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgb2YgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAsIGB0Y3BfZWF0X3NrYmAsIGFuZCB0aGF0IG5ld2VyIG9uZSwgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBoYW5kbGUgc29ja2V0IHJlZGlyZWN0aW9uLCBhbmQgdGhlIHNwZWNpZmljIHJvbGUgZWFjaCBwbGF5cyBpbiB0aGF0IHByb2Nlc3MuIEkgc3VzcGVjdCBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBpcyB0aGUgcHJpbWFyeSByZWRpcmVjdG9yIGJ1dCBJIGhhdmUgdG8gYXNzZXNzIHdoZXRoZXIgYHRjcF9lYXRfc2tiYCBhY3RzIG9uIHRoZSBwYWNrZXQgZGF0YSBvciBhbHRlcnMgaXRzIGJlaGF2aW91ci4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaGAgZml0cyBpbnRvIHRoaXMgc2NoZW1lLiBJcyBpdCB0aGUgZnJvbnQgZW5kIGluIHRoZSBlQlBGIGxheWVyLCBwcm92aWRpbmcgdGhlIHJlZGlyZWN0IHRhcmdldCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgaXMgbmVlZGVkIHRvIGNvbmZpcm0gdGhlIGhpZ2ggbGV2ZWwgZmxvdyBhbmQgZnVuY3Rpb24sIGJlZm9yZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowNi4xNDA0NzExMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzI0MDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19za2JfcmVkaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTk1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxubmV0L2NvcmUvc2ttc2cuYy05NTctXFxubmV0L2NvcmUvc2ttc2cuYzo5NTg6c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTU5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTk2PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ2LVxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwNDc6XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHBzb2NrLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA0OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MDYuNjUzNzIyNDM2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODU5Mzk3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGlzIGBza19wc29ja19za2JfcmVkaXJlY3RgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA5NTggaW4gdGhlIHJlbGV2YW50IGZpbGUuIFRpbWUgdG8gem9vbSBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcGFja2V0IHJlZGlyZWN0aW9uLiBJcyBpdCB0aGUgY29yZSBvZiBob3cgcGFja2V0cyBnZXQgcmVyb3V0ZWQgdG8gdGhlIHVzZXJzcGFjZSBzb2NrZXQ/IERvZXMgaXQgcGVyZm9ybSB0aGUgYWN0dWFsIGNvcHlpbmcgYW5kIHF1ZXVlaW5nLCBvciBpcyBpdCByZXNwb25zaWJsZSBmb3IgdGhlIGRlY2lzaW9uIG1ha2luZz8gUHJvYmFibHkgdGhlIGZvcm1lciwgYnV0IGJlc3QgdG8gY29uZmlybSB0aGUgaW50ZXJuYWxzLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2dpYyBoZXJlIC0gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCwgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBza2IgaXRzZWxmLiBHb3R0YSBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIE15IGZvY3VzIGlzIG9uIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjA4LjYzOTY2NDQzNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTg6XFx0c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NTk6XFx0e1xcbiA5NjA6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcXG4gOTYxOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XFxuIDk2NDpcXHRcXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4gOTY1OlxcdFxcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJ3Qgc2V0IGEgcmVkaXJlY3QgaW50ZXJmYWNlLlxcbiA5NjY6XFx0XFx0ICovXFxuIDk2NzpcXHRcXHRpZiAodW5saWtlbHkoIXNrX290aGVyKSkge1xcbiA5Njg6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5Njk6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcXG4gOTczOlxcdFxcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXFxuIDk3NDpcXHRcXHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJ3Qgc2VuZCBhIHBhY2tldCBvblxcbiA5NzU6XFx0XFx0ICogYSBzb2NrZXQgdGhhdCBpcyBpbiB0aGlzIHN0YXRlIHNvIHdlIGRyb3AgdGhlIHNrYi5cXG4gOTc2OlxcdFxcdCAqL1xcbiA5Nzc6XFx0XFx0aWYgKCFwc29ja19vdGhlciB8fCBzb2NrX2ZsYWcoc2tfb3RoZXIsIFNPQ0tfREVBRCkpIHtcXG4gOTc4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTc5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTgzOlxcdFxcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4gOTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTg1OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTg2OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODg6XFx0XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xcbiA5OTE6XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNld29yaywgMCk7XFxuIDk5MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2tfb3RoZXItXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuIDk5MzpcXHRcXHRyZXR1cm4gMDtcXG4gOTk0OlxcdH1cXG4gOTk1OlxcdFxcbiA5OTY6XFx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDk5NzpcXHRcXHRcXHRcXHRcXHQgIGludCB2ZXJkaWN0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjowOC42Mzk3OTkwMDVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIyMzYxMTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfZWF0X3NrYmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNwX2VhdF9za2JgLiBJdCdzIHByZXR0eSBjbGVhciBmcm9tIHRoZSBuYW1lIHdoYXQgdGhlIGZ1bmN0aW9uICppbnRlbmRzKiB0byBkbzogZXNzZW50aWFsbHksIHByb2Nlc3Mgb3IgY29uc3VtZSBhIFNvY2tldCBCdWZmZXIgKFNLQikgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgcHJlc3VtYWJseSwgaGFuZGxpbmcgdGhlIGRhdGEgYmFzZWQgb24gaXRzIGNvbnRlbnRzLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCBmbGFncy5cblxuSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZnJvbSB0aGUgcmVjZWl2ZSBwYXRoLCB0aGUgcmV0cmFuc21pdCBwYXRoLCBvciBwZXJoYXBzIHNvbWV3aGVyZSBlbHNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgc3ByaW5nIHRvIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgaW50ZXJydXB0IGNvbnRleHQgdGhpcyBpcyBsaWtlbHkgY2FsbGVkIGluPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbiB0aGUgVENQIHN0YWNrLiBTcGVjaWZpY2FsbHksIHdoZXJlIGFuZCB3aGVuIGlzIGB0Y3BfZWF0X3NrYmAgZ2V0dGluZyBjYWxsZWQ/IEFyZSB0aGVyZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJvdGVjdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHRvdWNoZXMsIGxpa2UgdGhlIFRDUCBjb250cm9sIGJsb2NrIChUQ0IpIG9yIHRoZSBzb2NrZXQgaXRzZWxmP1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBjaGVja3N1bSB2YWxpZGF0aW9uLCBzZXF1ZW5jZSBudW1iZXIgdmVyaWZpY2F0aW9uLCByZWFzc2VtYmx5IGlmIHRoZSBTS0IgaXMgZnJhZ21lbnRlZCwgYW5kIHBlcmhhcHMgc29tZSBwcm9jZXNzaW5nIGJhc2VkIG9uIFRDUCBmbGFncyAoQUNLLCBTWU4sIEZJTiwgUFNILCBldGMuKS4gV2UnbGwgd2FudCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIG91dC1vZi1vcmRlciBzZWdtZW50cywgd2luZG93IHVwZGF0ZXMsIGFuZCBwb3NzaWJsZSBlcnJvciBjb25kaXRpb25zIHN1Y2ggYXMgY2hlY2tzdW0gZXJyb3JzIG9yIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgd2UncmUgZ2V0dGluZyB0aGUgcmlnaHQgZGF0YSwgaW4gdGhlIHJpZ2h0IG9yZGVyLCBhbmQgYXQgdGhlIHJpZ2h0IHRpbWUuXG5cbkl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGV4YW1pbmUgdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGwuIElmIHNvbWV0aGluZyBnb2VzIHdyb25n4oCUaW52YWxpZCBjaGVja3N1bSwgYW4gdW5leHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIsIG9yIGEgcHJvYmxlbSB3aXRoIHRoZSBTS0IgaXRzZWxm4oCUaG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZXNwb25kPyBEb2VzIGl0IHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCwgbG9nIGFuIGVycm9yLCBvciB0cmlnZ2VyIHNvbWUgbW9yZSBhZ2dyZXNzaXZlIGVycm9yIHJlY292ZXJ5IG9yIHJlc2V0PyBJIGFudGljaXBhdGUgc29tZSBvZiB0aG9zZSBjb2RlIHBhdGhzIHdpbGwgYmUgaW50ZXJlc3RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdGllcy5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHRjcF9lYXRfc2tiYCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBUQ1Agc3RhdGUgbWFjaGluZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgd29ya2hvcnNlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMjo0MjoxNS44NjM0MTI5ODVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE5Nzk1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2VhdF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9Mjg0NT1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NTAtI2lmZGVmIENPTkZJR19JTkVUXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg1MTp2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg1Mi0jZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NTM6c3RhdGljIGlubGluZSB2b2lkIHRjcF9lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC90Y3AuaC0yODU0LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTk2PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ1LVxcdFxcdGlmIChkc3QgIT0gcHNvY2stXFx1MDAzZXNrKVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA0NjpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDQ3LVxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA1My1cXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYzoxMDU0OlxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNTUtXFx0XFx0c29ja19kcm9wKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTItXFx0XFx0bGVuID0gMDtcXG5uZXQvY29yZS9za21zZy5jOjEyMTM6XFx0XFx0dGNwX2VhdF9za2Ioc2ssIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjE0LVxcdFxcdHNvY2tfZHJvcChzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MTcuMzQ1Mzk4NDAyWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzgwMTc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHRjcF9lYXRfc2tiYCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgaGVhZGFjaGUpIG9mIEJQRiBpbnRlcmFjdGlvbiB3aXRoIFRDUCBkYXRhIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBhbmQgaW50ZXJhY3RzIHdpdGggYW55IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiBwbGFjZSBmb3IgVENQIHByb2Nlc3NpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3BlY3RzIGxpa2UgcGFja2V0IGZpbHRlcmluZywgZmxvdyBjb250cm9sIG1vZGlmaWNhdGlvbnMsIG9yIGV2ZW4gbW9yZSBhZHZhbmNlZCBvcGVyYXRpb25zIGltcGxlbWVudGVkIHVzaW5nIGVCUEYuIEknbSBob3BpbmcgSSBjYW4gZWFzaWx5IHNlZSB0aGUgbG9naWMgYnkgdXNpbmcgYSBkZWJ1Z2dlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjIxLjgyMzQyMDkzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAxNjpcXHR7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRjcDtcXG4gIDE4OlxcdFxcdGludCBjb3BpZWQ7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdGlmICghc2tiIHx8ICFza2ItXFx1MDAzZWxlbiB8fCAhc2tfaXNfdGNwKHNrKSlcXG4gIDIxOlxcdFxcdFxcdHJldHVybjtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpXFxuICAyNDpcXHRcXHRcXHRyZXR1cm47XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdHRjcCA9IHRjcF9zayhzayk7XFxuICAyNzpcXHRcXHRjb3BpZWQgPSB0Y3AtXFx1MDAzZWNvcGllZF9zZXEgKyBza2ItXFx1MDAzZWxlbjtcXG4gIDI4OlxcdFxcdFdSSVRFX09OQ0UodGNwLVxcdTAwM2Vjb3BpZWRfc2VxLCBjb3BpZWQpO1xcbiAgMjk6XFx0XFx0dGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc2spO1xcbiAgMzA6XFx0XFx0X190Y3BfY2xlYW51cF9yYnVmKHNrLCBza2ItXFx1MDAzZWxlbik7XFxuICAzMTpcXHR9XFxuICAzMjpcXHRcXG4gIDMzOlxcdHN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gIDM0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzKVxcbiAgMzU6XFx0e1xcbiAgMzY6XFx0XFx0Ym9vbCBhcHBseSA9IGFwcGx5X2J5dGVzO1xcbiAgMzc6XFx0XFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2U7XFxuICAzODpcXHRcXHR1MzIgc2l6ZSwgY29waWVkID0gMDtcXG4gIDM5OlxcdFxcdHN0cnVjdCBza19tc2cgKnRtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDI6NDI6MjEuODIzNTIzNzk5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjYzODgyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU0tfUkVESVJFQ1QgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyB3ZSBoYW5kbGUgYF9fU0tfUkVESVJFQ1RgIHZlcmRpY3RzIGluIHNvY2ttYXAvc2ttc2cuIFRoZSBjb3JlIGNoYW5nZSBpcyBwcmV2ZW50aW5nIGB0Y3BfZWF0X3NrYigpYCBmcm9tIGJlaW5nIGNhbGxlZCB3aGVuIHRoZSByZWRpcmVjdGlvbiB0YXJnZXQgKGBkc3RgKSBpcyB0aGUgc2FtZSBzb2NrZXQgKGBwc29jay1cdTAwM2Vza2ApIOKAkyBlc3NlbnRpYWxseSwgcmVkaXJlY3RpbmcgdG8gc2VsZi5cblxuTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OiBDb3VsZCB0aGlzIGludHJvZHVjZSBhIEtNU0FOIGlzc3VlPyBMZXQncyBhbmFseXplLiBJdCBsb29rcyBsaWtlIGl0LlxuXG4xLiAgKipObyBuZXcgYWxsb2NhdGlvbnM6KiogVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYGttYWxsb2NgIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBzbyB3ZSdyZSBzYWZlIHRoZXJlLlxuMi4gICoqTm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMy4gICoqVmFyaWFibGUgaW5pdGlhbGl6YXRpb246KiogVGhlIGNyaXRpY2FsIHZhcmlhYmxlLCBgZHN0YCwgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcmV0dXJuIG9mIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYilgLiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdmFsdWUsIHNvIHdlJ3JlIHNhZmUgaGVyZS5cbjQuICAqKk5vIGNoYW5nZWQgYm91bmRzIGNoZWNraW5nOioqIFRoZSBwYXRjaCBkb2Vzbid0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tpbmcsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkIGJlY2F1c2Ugb2YgYSBsb2dpYyBlcnJvci5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgZmxvdyBhbmQgYWNjb3VudGluZyB3aXRoaW4gdGhlIEJQRiByZWRpcmVjdCBsb2dpYyBmb3Igc2ttc2cvc29ja21hcC5cblxuR2l2ZW4gdGhpcywgdGhlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG86XG5cbiogICBTb2NrZXQgc3RhdGVcbiogICBUQ1Agc2VxdWVuY2UgbnVtYmVyIGFjY291bnRpbmdcbiogICBCdWZmZXIgbWFuYWdlbWVudFxuKiAgIFJlZmNvdW50aW5nXG4qICAgVXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgbG9naWMgYnVnc1xuXG5UaGVzZSBhcmUgY2xhc3NpYyBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBLTVNBTiwgd2l0aCBpdHMgZm9jdXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkxldCdzIHN1bW1hcml6ZSBpdCBmb3IgY2xhcml0eTpcblxuKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgYF9fU0tfUkVESVJFQ1RgIGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC5cbiogICBJdCBza2lwcyBgdGNwX2VhdF9za2IoKWAgd2hlbiByZWRpcmVjdGluZyBhbiBza2IgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQuXG4qICAgTm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQuXG4qICAgTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIHBhc3NlZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4qICAgYGRzdGAgaXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkuXG4qICAgUG90ZW50aWFsIGlzc3VlcyBhcmUgZnVuY3Rpb25hbC9sb2dpYyBvciBzdGF0ZSByZWxhdGVkIGFuZCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50aW5nLlxuXG5Ob3csIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTc1LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAyOjQyOjI3Ljk0OTkxNTMwM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBza19wc29ja192ZXJkaWN0X2FwcGx5KCkgaW4gbmV0L2NvcmUvc2ttc2cuYyB0byBjb25kaXRpb25hbGx5IGNhbGwgdGNwX2VhdF9za2IoKSBvbmx5IHdoZW4gdGhlIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHNvY2tldCAoZHN0KSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmF0aW5nIHNvY2tldCAocHNvY2stXFx1MDAzZXNrKS5cXG5cXG5UaGlzIGNoYW5nZSBhbHRlcnMgVENQIHNvY2tldCBidWZmZXIgYWNjb3VudGluZyBhbmQgY29udHJvbCBmbG93IGR1cmluZyBCUEYgc2tiIHJlZGlyZWN0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIHNpemVzIGZvciBkYXRhIHJlYWRzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIG9yIGtlcm5lbCBzdHJ1Y3R1cmUgcGFkZGluZyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSByZWxhdGUgdG8gc29ja2V0IHN0YXRlL2FjY291bnRpbmcgbG9naWMsIHdoaWNoIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpIGluIG5ldC9jb3JlL3NrbXNnLmMgdG8gY29uZGl0aW9uYWxseSBjYWxsIHRjcF9lYXRfc2tiKCkgb25seSB3aGVuIHRoZSByZWRpcmVjdCBkZXN0aW5hdGlvbiBzb2NrZXQgKGRzdCkgZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hdGluZyBzb2NrZXQgKHBzb2NrLVxcdTAwM2VzaykuXFxuXFxuVGhpcyBjaGFuZ2UgYWx0ZXJzIFRDUCBzb2NrZXQgYnVmZmVyIGFjY291bnRpbmcgYW5kIGNvbnRyb2wgZmxvdyBkdXJpbmcgQlBGIHNrYiByZWRpcmVjdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzLCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGJvdW5kcyBvciBzaXplcyBmb3IgZGF0YSByZWFkcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBrZXJuZWwgc3RydWN0dXJlIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgcmVsYXRlIHRvIHNvY2tldCBzdGF0ZS9hY2NvdW50aW5nIGxvZ2ljLCB3aGljaCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLCBhbmQgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[1] Phase: Succeeded StartedAt: 2026-08-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 02:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 02:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2] Phase: Succeeded StartedAt: 2026-08-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 02:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:38 +0000 UTC FinishedAt: 2026-08-29 02:42:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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-workflowfnmgm/series-workflowfnmgm-convert-artifact-3131128740/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:48 +0000 UTC FinishedAt: 2026-08-29 02:59:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:48 +0000 UTC FinishedAt: 2026-08-29 02:59:48 +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:*70fac84b-aa5f-40ff-88ec-fda036c18eec,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-workflowfnmgm/series-workflowfnmgm-convert-artifact-3131128740/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": "0c536e85-4a55-4f34-8220-b2beeeb6fb00", "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-workflowfnmgm/series-workflowfnmgm-build-action-857787874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:42:48 +0000 UTC FinishedAt: 2026-08-29 02:59:38 +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:*70fac84b-aa5f-40ff-88ec-fda036c18eec,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-workflowfnmgm/series-workflowfnmgm-convert-artifact-3131128740/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": "0c536e85-4a55-4f34-8220-b2beeeb6fb00", "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-workflowfnmgm/series-workflowfnmgm-build-action-857787874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:48 +0000 UTC FinishedAt: 2026-08-29 02:59:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:48 +0000 UTC FinishedAt: 2026-08-29 02:59:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:48 +0000 UTC FinishedAt: 2026-08-29 02:59:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:48 +0000 UTC FinishedAt: 2026-08-29 02:59:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-workflowfnmgm/series-workflowfnmgm-convert-artifact-1761749411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:58 +0000 UTC FinishedAt: 2026-08-29 03:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 02:59:58 +0000 UTC FinishedAt: 2026-08-29 03:01:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c536e85-4a55-4f34-8220-b2beeeb6fb00,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-workflowfnmgm/series-workflowfnmgm-build-action-857787874/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-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:01:56 +0000 UTC FinishedAt: 2026-08-29 03:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:01:56 +0000 UTC FinishedAt: 2026-08-29 03:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:01:56 +0000 UTC FinishedAt: 2026-08-29 03:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:01:56 +0000 UTC FinishedAt: 2026-08-29 03:18:35 +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:*70fac84b-aa5f-40ff-88ec-fda036c18eec,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-workflowfnmgm/series-workflowfnmgm-convert-artifact-1761749411/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": "4bea1313-36dc-45d7-8345-a00409399beb", "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-workflowfnmgm/series-workflowfnmgm-build-action-2432511575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:01:56 +0000 UTC FinishedAt: 2026-08-29 03:18:25 +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:*70fac84b-aa5f-40ff-88ec-fda036c18eec,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-workflowfnmgm/series-workflowfnmgm-convert-artifact-1761749411/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": "4bea1313-36dc-45d7-8345-a00409399beb", "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-workflowfnmgm/series-workflowfnmgm-build-action-2432511575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:18:35 +0000 UTC FinishedAt: 2026-08-29 03:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:18:35 +0000 UTC FinishedAt: 2026-08-29 03:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:18:35 +0000 UTC FinishedAt: 2026-08-29 03:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:18:35 +0000 UTC FinishedAt: 2026-08-29 03:20:26 +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:*4bea1313-36dc-45d7-8345-a00409399beb,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-workflowfnmgm/series-workflowfnmgm-build-action-2432511575/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-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"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:*0c536e85-4a55-4f34-8220-b2beeeb6fb00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bea1313-36dc-45d7-8345-a00409399beb,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-workflowfnmgm/series-workflowfnmgm-build-action-857787874/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-workflowfnmgm/series-workflowfnmgm-build-action-2432511575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 03:20:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 03:20:41 +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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"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-workflowfnmgm/series-workflowfnmgm-convert-artifact-1624496572/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 03:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 03:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:36 +0000 UTC FinishedAt: 2026-08-29 03:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:46 +0000 UTC FinishedAt: 2026-08-29 06:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnmgm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"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":["sock_map_update_elem_sys","sock_map_get_from_fd","sock_map_prog_detach","sock_map_link_create","sk_psock_init","sk_psock_start_verdict","sk_psock_stop_verdict","sk_psock_init_strp","sk_psock_start_strp","sk_psock_stop_strp","tcp_eat_skb","tcp_bpf_strp_read_sock","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","CGROUP_BPF","INET","NET"],"series_id":"2f4aa2f6-2f30-4013-953c-ef654d5db2df","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-29 03:20:46 +0000 UTC FinishedAt: 2026-08-29 06:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c536e85-4a55-4f34-8220-b2beeeb6fb00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bea1313-36dc-45d7-8345-a00409399beb,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-workflowfnmgm/series-workflowfnmgm-build-action-857787874/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-workflowfnmgm/series-workflowfnmgm-build-action-2432511575/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-workflowfnmgm/series-workflowfnmgm-convert-artifact-1624496572/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,}