Name: series-workflow686nc Phase: Succeeded StartedAt: 2026-08-13 13:50:44 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[0] Phase: Succeeded StartedAt: 2026-08-13 13:50:44 +0000 UTC FinishedAt: 2026-08-13 13:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:50:44 +0000 UTC FinishedAt: 2026-08-13 13:56:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "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": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "750d4d17-edb6-4c25-8112-fb34cbccbc5f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_lookup_tcp", "bpf_sk_lookup_udp", "bpf_tc_sk_lookup_tcp", "bpf_tc_sk_lookup_udp", "bpf_xdp_sk_lookup_udp", "bpf_xdp_sk_lookup_tcp", "bpf_sock_addr_sk_lookup_tcp", "bpf_sock_addr_sk_lookup_udp", "sock_map_lookup", "sock_hash_lookup" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl90Y19za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl90Y19za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAgICYjMzQ7c29ja19oYXNoX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGxvZ2ljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYnkgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYnkgcmVwbGFjaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdpdGggYHNvY2tfaG9sZGAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODcxODkyYTc2OWNjYTRjNTVlYWI2OTQ5NjZhM2ZlNTIzYmU2MzE4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjUyOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MTY3LDYgJiM0Mzs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqXG4mIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXHUwMDNlcnNrX2xpc3RlbmVyLCBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsXG4mIzQzO1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzazIgIT0gc2spIHtcbiYjNDM7XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4mIzQzO1x0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2sgPSBzazI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2s7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzE3NiwyMiAmIzQzOzcxOTgsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0XHRcdFx0ICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncyxcbiBcdFx0XHRcdFx0ICAgc2RpZik7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0aWYgKHNrKVxuJiM0MztcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjIyLDIyICYjNDM7NzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDllZmJkOGNhN2RiODMuLmNhNDliYzdmODY4N2MgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtMzkyLDggJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuQEAgLTEyMTgsOCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzE4OTJhNzY5Y2NhNGM1NWVhYjY5NDk2NmEzZmU1MjNiZTYzMThmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MTY3LDYgJiM0Mzs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlyZXR1cm4gc2s7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNvY2sgKgomIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLSZndDtyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwKJiM0MzsJICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrMiAhPSBzaykgewomIzQzOwkJc29ja19nZW5fcHV0KHNrKTsKJiM0MzsJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlzayA9IHNrMjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gc2s7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBzb2NrICoKIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCQlzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwKQEAgLTcxNzYsMjIgJiM0Mzs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJCQkJCSAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsCiAJCQkJCSAgIHNkaWYpOwogCi0JaWYgKHNrKSB7Ci0JCXN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTsKLQotCQkvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLSZndDtyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2sKLQkJICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgotCQkgKi8KLQkJaWYgKHNrMiAhPSBzaykgewotCQkJc29ja19nZW5fcHV0KHNrKTsKLQkJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqLwotCQkJaWYgKHVubGlrZWx5KHNrMiAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHsKLQkJCQlXQVJOX09OQ0UoMSwgJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0ISYjMzQ7KTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrID0gc2syOwotCQl9Ci0JfQomIzQzOwlpZiAoc2spCiYjNDM7CQlzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7CiAKIAlyZXR1cm4gc2s7CiB9CkBAIC03MjIyLDIyICYjNDM7NzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlzdHJ1Y3Qgc29jayAqc2sgPSBicGZfc2tjX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIHByb3RvLCBuZXRuc19pZCwKIAkJCQkJIGZsYWdzKTsKIAotCWlmIChzaykgewotCQlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7Ci0KLQkJLyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS0mZ3Q7cnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrCi0JCSAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KLQkJICovCi0JCWlmIChzazIgIT0gc2spIHsKLQkJCXNvY2tfZ2VuX3B1dChzayk7Ci0JCQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi8KLQkJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7Ci0JCQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlzayA9IHNrMjsKLQkJfQotCX0KJiM0MzsJaWYgKHNrKQomIzQzOwkJc2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spOwogCiAJcmV0dXJuIHNrOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC0zOTIsOCAmIzQzOzM5Miw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTsKIAlpZiAoIXNrKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIApAQCAtMTIxOCw4ICYjNDM7MTIxOCw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX2hhc2hfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAoIXNrKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEluIGBmaWx0ZXIuY2AsIGEgbmV3IGhlbHBlciwgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGhhcyBiZWVuIGFkZGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgbG9va3VwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEdvb2QgdG8gc2VlIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHRoaW5ncyB1cC4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGNoYW5nZSBpbiBgc29ja19tYXAuY2AuIFRoZXkmIzM5O3ZlIGFsdGVyZWQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgcmVmY291bnQgY2hlY2suIEluc3RlYWQgb2YgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkmIzM5O3JlIG5vdyB1c2luZyBgc29ja19ob2xkYCB3aXRoaW4gYSBwcm90ZWN0ZWQgc2NvcGUuIFNvLCBlc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgYXNzdW1pbmcgdGhlIHNvY2tldCBpcyBhbHJlYWR5IHByb3RlY3RlZCwgcHJvYmFibHkgYnkgUkNVIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIGBzb2NrX2hvbGRgIGlzIGZvciBtYWludGFpbmluZyBhIGhvbGQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IHNvdW5kLCAqaWYqIHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZXhpc3RpbmcgcHJvdGVjdGlvbiBhcmUgY29ycmVjdC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV2ZW4gcmVhY2hhYmxlLiBXYWl0LCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSAqZGVmaW5pdGVseSogdXNlZCBhcyBCUEYgbWFwIGxvb2t1cCBmdW5jdGlvbnMgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiBZdXAsIHRob3NlIGFyZSByZWFjaGFibGUgYW5kIGZ1enplYWJsZSwgbm8gcXVlc3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBzb2NrX21hcC5jYC4gTGV0IG1lIHF1aWNrbHkgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLi4uIE9rYXksIGl0IGxvb2tzIGxpa2UgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBTbywgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSByZXF1aXJlbWVudC4gRWFzeSBlbm91Z2ggdG8gY2hlY2suCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYGZpbHRlci5jYC4gU2FtZSBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGRlcGVuZGVuY3kgaXMgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpbHRlci5vYCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcHBsaWVzIHRoZXJlIHRvby4gSG1tLCB3YWl0LiBPciBtYXliZSB0aGUgZnVsbCBgbmV0YCBjb25maWcgaXMgbmVlZGVkIGZvciB0aGUgY29tcGlsZS4uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc2FtZSBgTWFrZWZpbGVgIGFnYWluIHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gc2ttc2cub1xubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBkZXBlbmRlbmNpZXMgb2YgYHNvY2tfbWFwLm9gLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBmaWx0ZXIub2AuLi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhpcyBpcyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGZpbHRlci5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgYW5kIHRoZSBCUEYgc29ja2V0IGxvb2t1cCBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCByaWdodCwgYGJwZl9za19sb29rdXBgIGlzIGEgQlBGIGhlbHBlciwgdGhhdCYjMzk7cyBrZXkuIE5vdywgd2hlcmUgZG8gdGhlIG1hcCBvcGVyYXRpb25zIGZpdCBpbj8gSSBrbm93IGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgYXJlIHRoZSBtYXAgb3BlcmF0aW9ucyBoZXJlLgoKU28sIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwYCwgYW5kIGBfX2JwZl9za19sb29rdXBgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzIGJlY2F1c2UgaXQgaXMgc3RhdGljLiBJdCYjMzk7cyBsaWtlbHkgaW5saW5lZCBvciBtaWdodCBub3QgZXZlbiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWVhbnMgaXQgbWlnaHQgbm90IHNob3cgdXAgZGlyZWN0bHkuCgpIb3dldmVyLCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCB0aG9zZSBhcmUgYWxzbyBzdGF0aWMsIGJ1dCB0aGV5IGFyZSAqdXNlZCogYXMgZnVuY3Rpb24gcG9pbnRlcnMgaW4gYGJwZl9tYXBfb3BzYC4gVGhhdCBtZWFucyB0aGV5IHdpbGwgbm90IGJlIGlubGluZWQgYW5kICpkbyogaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgYXJlIHN0YXRpYyBhbmQgSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCUEYgTWFwIExvb2t1cHMgYW5kIFNvY2tldCBMb29rdXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEJQRiBtYXBzIGFuZCBzb2NrZXQgbG9va3Vwcy4gSSBzZWUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGBicGZfbWFwX29wc2Agc3RydWN0LiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoZWlyIGZ1bmN0aW9uLiBUaGV5JiMzOTtyZSBwYXJ0IG9mIGEgZGVmaW5lZCBzZXQgb2Ygb3BlcmF0aW9ucy4KCk5vdywgSSYjMzk7bSBzaGlmdGluZyBmb2N1cyB0byB0aG9zZSBCUEYgc29ja2V0IGxvb2t1cCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgYnBmX3NrX2xvb2t1cGAgYW5kIGBfX2JwZl9za19sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MTcwPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9maWx0ZXIuYy03MTcyLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTkyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTkzOl9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5NC1cdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMS1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDI6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDMtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzIyNj1zdGF0aWMgc3RydWN0IHNvY2sgKlxubmV0L2NvcmUvZmlsdGVyLmM6NzIyNzpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MjI4LVx0ICAgICAgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzMtXHRpZiAoc2spXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM0Olx0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG5uZXQvY29yZS9maWx0ZXIuYy03MjM1LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI1Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNTg6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI1OS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Mi1cdFx0XHRcdFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjY6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Ny1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI3NzpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzkte1xubmV0L2NvcmUvZmlsdGVyLmM6NzI4MDpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXG5uZXQvY29yZS9maWx0ZXIuYy03MjgxLVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjgzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI4NTpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjg2LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTczMjA9QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMjYtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzI3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03MzI4LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzM0ND1CUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM1MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjczNTE6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTItXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzgyPUJQRl9DQUxMXzUoYnBmX3hkcF9za19sb29rdXBfdWRwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczODgtXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzg5Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5MC1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc0MzA9QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQzNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0Mzc6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03NDM4LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzQ3ND1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo3NDc3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3OC1cdFx0XHRcdFx0ICAgICAgc29ja19uZXQoY3R4LVx1MDAzZXNrKSwgMCwgSVBQUk9UT19UQ1AsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzQ5Mz1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5NS17XG5uZXQvY29yZS9maWx0ZXIuYzo3NDk2Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5Ny1cdFx0XHRcdFx0ICAgICAgc29ja19uZXQoY3R4LVx1MDAzZXNrKSwgMCwgSVBQUk9UT19VRFAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTI0LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODUyNTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUyNi1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjgtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzOT1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODY1LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODg2NjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODg2Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg4Njg6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjktXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4OTU9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTctXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5ODpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTk6RVhQT1JUX1NZTUJPTChicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMTpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTAyLVx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjktXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzE6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzItXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE5NDA9c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDUtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ2Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk1ND1zdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU4LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTU5Olx0aWYgKG9mZiBcdTAwM2MgMCB8fCBvZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGJwZl9za19sb29rdXApKVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cdHN3aXRjaCAob2ZmKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk2NzpcdGNhc2UgYnBmX2N0eF9yYW5nZV9wdHIoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RPX1NPQ0tFVF9PUl9OVUxMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcHJvdG9jb2wpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzM6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzQ6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc2Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc3Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc4Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzktXHRcdGJwZl9jdHhfcmVjb3JkX2ZpZWxkX3NpemUoaW5mbywgc2l6ZW9mKF9fdTMyKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4MjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODMtXHRcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4OTpcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KSAuLi5cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTkwOlx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MS1cdFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDAwPXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDA4LVx0c3dpdGNoIChzaS1cdTAwM2VvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDA5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDExOlx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTUtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTY6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTctXHRcdFx0XHRcdFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyMDpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDIxLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDIyOlx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDIzLVx0XHRcdFx0XHRcdCAgICAgcHJvdG9jb2wsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyNjpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjctXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjg6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjktXHRcdFx0XHRcdFx0ICAgICB2NC5zYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDMyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMzLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDM0Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDM1LVx0XHRcdFx0XHRcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzctXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzODpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzktXHRcdFx0XHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDM6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NC1cdFx0b2ZmICYjNDM7PSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwNDUtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDQ2Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDQ3LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cdTAwM2Vkc3RfcmVnLCAwLCAxKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1My1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU0Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NS1cdFx0XHRcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDU4LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNTk6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYwLVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA2MS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNjI6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwNjMtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDY5LVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzA6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3MS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA3MjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3My1cdFx0XHRcdFx0XHQgICAgIHNwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzY6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3Ny1cdFx0KnRhcmdldF9zaXplID0gMjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDgxOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4Mi1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA4MzpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4NC1cdFx0XHRcdFx0XHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDg2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODc6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODk6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwOTAtXHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU0sgTG9va3VwIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBgYnBmX3NrX2xvb2t1cGAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9za19sb29rdXBgIGl0c2VsZiBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGJlaW5nIGNhbGxlZCBieSBgYnBmX3NrX2xvb2t1cF90Y3BgIGFuZCBgYnBmX3NrX2xvb2t1cF91ZHBgLCB3aGljaCBhcmUgcHJlc2VudGVkIGFzIEJQRiBoZWxwZXJzLiBTaW1pbGFybHksIGBfX2JwZl9za19sb29rdXBgIGlzIGFsc28gc3RhdGljLCBidXQgZ2V0cyB1dGlsaXplZCBieSBhIHdpZGVyIHNldCBvZiBmdW5jdGlvbnMgbGlrZSBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBhbmQgdGhlIFhEUCBhbmQgYHNvY2tfYWRkcmAgdmFyaWFudHMuCgpTbywgaW4gdGVybXMgb2YgdGhpbmdzIHRvIGNoZWNrLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYW5kIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLiBJJiMzOTttIGFsc28gYWRkaW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEFsdGhvdWdoLCB3YWl0Li4uIHRob3NlIGxhc3QgdHdvIGFyZSBzdGF0aWMgYnV0IHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIG9rYXkuCgpOb3csIGxvb2tpbmcgY2xvc2VyIGF0IGhvdyB0aGVzZSBhcmUgZGVmaW5lZCwgSSBzZWUgYEJQRl9DQUxMXzUoLi4uKWAgYmVpbmcgdXNlZC4gVGhhdCBtYWNybyBleHBhbmRzIHRvIHRoaW5ncyBsaWtlIGBicGZfc2tfbG9va3VwX3RjcGAgb3IgdGhlIGRvdWJsZS11bmRlcnNjb3JlIHZhcmlhbnRzLCBsaWtlIGBfX19fYnBmX3NrX2xvb2t1cF90Y3BgLiBSaWdodCwgc28gaXQgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBidXQgYEJQRl9DQUxMXzVgIGFjdHVhbGx5IGRlZmluZXMgYm90aCwgcmlnaHQ/IExldCYjMzk7cyBqdXN0IGF2b2lkIHRoZSBkb3VibGUgdW5kZXJzY29yZSBhbmQgZm9jdXMgb24gdGhlIHNpbXBsZXIgbmFtZXMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYC4KCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSAmIzM5O3ByaW1hcnkmIzM5OyBmdW5jdGlvbnMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYXJlIGV4cG9ydGVkIG9yIG1hcmtlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kIHRoZWlyIGJyb2FkZXIgYXZhaWxhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3NrX2xvb2t1cF90Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTctXG5uZXQvY29yZS9maWx0ZXIuYzo3MjU4OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTktXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBCUEZfQ0FMTF81YCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaGVuIEkgc2VlIGBCUEZfQ0FMTF81YCwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgZnVuY3Rpb24gY2FsbCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEJ1dCBpcyBpdCBjcmVhdGluZyBhIGZ1bmN0aW9uIG9yIGNhbGxpbmcgb25lPyBHaXZlbiB0aGUgbmFtaW5nLCBteSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyAqY3JlYXRpbmcqIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IHNldHRpbmcgdXAgdGhlIG1lYW5zIGZvciBvbmUuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzVgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoaXMgbWFjcm8gKG9yIGZ1bmN0aW9uLCBJJiMzOTtsbCBmaW5kIG91dCkgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBhcmd1bWVudHMgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkJQRiBIZWFkZXIgSHVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwtbGV2ZWwgZGVmaW5pdGlvbnMuIFdoZXJlIGFyZSB0aGV5IGxpa2VseSBoaWRpbmc/IE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgaGlzdG9yaWNhbCBjb250ZXh0IG9mIHRoZSBCZXJrZWxleSBQYWNrZXQgRmlsdGVyLiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3RydWN0dXJlcyBmb3IgZmlsdGVyaW5nIG1pZ2h0IHJlc2lkZS4gSWYgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSB5aWVsZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIG15IG5leHQgbW92ZSBpcyB0byBnbyBkZWVwZXIgd2l0aCBgaW5jbHVkZS9saW51eC9icGYuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbW9yZSBtb2Rlcm4gYW5kIGV4cGFuZGVkIEJQRi1zcGVjaWZpYyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZSBpbnN0cnVjdGlvbiBzZXQsIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgbGlrZWx5IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgbG9naWNhbCBwYXRoIOKAkyBgZmlsdGVyLmhgIGZvciB0aGUgaGlzdG9yaWNhbCBncm91bmRpbmcsIHRoZW4gYGJwZi5oYCBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC04NS0vKiB1bnVzZWQgb3Bjb2RlIHRvIG1hcmsgY2FsbCB0byBpbnRlcnByZXRlciB3aXRoIGFyZ3VtZW50cyAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo4NjojZGVmaW5lIEJQRl9DQUxMX0FSR1NcdDB4ZTBcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MTItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUxMzojZGVmaW5lIEJQRl9DQUxMX1JFTChUR1QpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUxNC1cdCgoc3RydWN0IGJwZl9pbnNuKSB7XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MjItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUyMzojZGVmaW5lIEJQRl9DQUxMX0lNTSh4KVx0KCh2b2lkICopKHgpIC0gKHZvaWQgKilfX2JwZl9jYWxsX2Jhc2UpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUzNC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NTM1OiNkZWZpbmUgQlBGX0NBTExfS0ZVTkMoT0ZGLCBJTU0pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MzYtXHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY3OC0jZGVmaW5lIF9fTk9BVFRSXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY3OTojZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MDojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MjojZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MzojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4NDojZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQ2FsbCBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byBpdHMgZGVmaW5pdGlvbi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3Mg4oCTIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBleHBhbmRlZCwgd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLCBhbmQgaG93IGl0IHRyYW5zbGF0ZXMgaW50byB0aGUgQlBGIGluc3RydWN0aW9uIHNldC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgY2FsbCB0aGlzIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSXMgdGhlcmUgYSBoZWxwZXIgZnVuY3Rpb24gbG9va3VwIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdGFjayBmcmFtZSBhZGp1c3RtZW50cz8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBhbmQgdW5kZXJzdGFuZCB0aGUgQUJJLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMX3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDI0PXN0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmaWx0ZXIuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgTGludXgga2VybmVsJiMzOTtzIGZpbHRlcmluZyBmcmFtZXdvcmssIGFuZCBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHNvbWUgY3J1Y2lhbCBzdHVmZiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gU3BlY2lmaWNhbGx5LCBJIGhhdmUgYSBmZWVsaW5nIHRoZSBkZXRhaWxzIEkmIzM5O20gYWZ0ZXIgYXJlIGFyb3VuZCBsaW5lIDY2Niwgc28gSSYjMzk7bGwganVtcCByaWdodCB0byB0aGF0IGFyZWEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmaWx0ZXJpbmcsIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmtpbmcgb3Igc2VjdXJpdHkuIExldCYjMzk7cyBzZWUgd2hhdCBnb29kaWVzIGFyZSB3YWl0aW5nIGZvciBtZSB0aGVyZSEgSSBhbnRpY2lwYXRlIHNlZWluZyBlaXRoZXIgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIG9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZmlsdGVyaW5nIHJ1bGVzLCBwYWNrZXQgaW5zcGVjdGlvbiwgb3IgcGVyaGFwcyBldmVuIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaW50ZWdyYXRpb24uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcbiA2NjE6XHRcbiA2NjI6XHQjZGVmaW5lIF9fQlBGX1BBRChuKVx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjYzOlx0XHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXG4gNjY0Olx0XHRcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcbiA2NjU6XHRcbiA2NjY6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njc6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njg6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2Njk6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2NzA6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2NzE6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2NzI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjczOlx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2NzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc1Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc2Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjc3Olx0XG4gNjc4Olx0I2RlZmluZSBfX05PQVRUUlxuIDY3OTpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIC4uLilgIGlzIGRlZmluaW5nIGJvdGggdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gYGJwZl9za19sb29rdXBfdGNwKC4uLilgIGFuZCBhbiBpbnRlcm5hbCBgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgX19fX2JwZl9za19sb29rdXBfdGNwKC4uLilgIGhlbHBlci4gVGhpcyBtZWFucyBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIGxpa2VseSB0aGUgcHJpbWFyeSBzeW1ib2wgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gZm9yIGFuYWx5c2lzIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQuCgpUaGF0IHBhdHRlcm4sIG5hdHVyYWxseSwgZXh0ZW5kcyB0byB0aGUgb3RoZXIgcmVsYXRlZCBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBhbmQgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAuIFRoZXkmIzM5O2xsIGFsbCBmb2xsb3cgdGhlIHNhbWUgc3RydWN0dXJlLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGNoZWNrIGhvdyB0aGVzZSBsb29rdXAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBtYXBzLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpdGhpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgaW50ZXJuYWwgd29ya2luZ3MgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gVGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBCdXQgdGhhdCBgc3RhdGljYCBxdWFsaWZpZXIuLi4gaWYgdGhlIGNvbXBpbGVyIGRlY2lkZWQgdG8gaW5saW5lIHRoZW0sIHN5emthbGxlciwgb3VyIGZ1enplciwgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyB0aGVpciBhZGRyZXNzZXMuIEhvd2V2ZXIsIHNpbmNlIHRoZSBjb2RlIHRha2VzIHRoZWlyIGFkZHJlc3NlcywgaW5saW5pbmcgaXMgcHJvYmFibHkgbm90IGhhcHBlbmluZy4gU3RpbGwsIHN5emthbGxlciB0ZW5kcyB0byBwcmVmZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGZvciBlYXNpZXIgaW5zdHJ1bWVudGF0aW9uLgoKU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGl2ZT8gQ2FuIHdlIGxldmVyYWdlIGEgbm9uLXN0YXRpYyB2ZXJzaW9uPyBBcmUgYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCB0aGVtc2VsdmVzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IEkgbmVlZCB0byB2ZXJpZnkuIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyBgc29ja19tYXBfb3BzYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB3ZSBjYW4gYXZvaWQgdGhlc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTgzMD1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMi1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIHJlZmxlY3Rpb246CgoqKkNvbnRlbXBsYXRpbmcgU29ja2V0IE9wZXJhdGlvbiBTY29wZSoqCgpIbW0sIHNvIGBzb2NrX21hcF9vcHNgIGlzIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHVzYWdlIGNvbnRleHQsIHByb2JhYmx5IG5lZWRpbmcgYWNjZXNzIGFjcm9zcyBtb2R1bGVzIG9yIHdpdGhpbiBhIGNvbXBsZXggc29ja2V0IGltcGxlbWVudGF0aW9uLiBJdCBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSwgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGludGVudGlvbiBpcyBmb3IgaXQgdG8gYmUgYSBtb3JlIGdlbmVyYWxpemVkLCBwb3RlbnRpYWxseSBleHRlbnNpYmxlIGludGVyZmFjZS4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4ud2hhdCYjMzk7cyB0aGUgc3Rvcnkgd2l0aCBgc29ja19oYXNoX29wc2A/IElzICp0aGF0KiBub24tc3RhdGljIGFzIHdlbGw/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXN0cmlidXRlZCBzeXN0ZW0gb3IgY29uY3VycmVuY3kuIFRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZm9ybWVyIGltcGxpZXMgdGhhdCB0aGVzZSBgb3BzYCBzdHJ1Y3R1cmVzIHByb2JhYmx5IHBsYXkgYSBwcmV0dHkgaW1wb3J0YW50IHBhcnQgaW4gdGhlIGNvcmUgbG9naWMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgZHluYW1pYyByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeT8gT3IsIGlzIGl0IHBlcmhhcHMgdXNlZCBieSB0aGluZ3Mgb3V0c2lkZSBvZiBpdHMgb3JpZ2luYXRpbmcgZmlsZT8gVGhpcyBsaW5lIG9mIHF1ZXN0aW9uaW5nIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZWxhdGVkIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbiBhbmQgaW52ZXN0aWdhdGUgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfaGFzaF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nj1CVEZfSURfTElTVF9TSU5HTEUoc29ja19oYXNoX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zaHRhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ0Nzpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0OC1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIE1hcCBPcHMgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgSSBuZWVkIHRvIGluY2x1ZGUgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBpbiBteSBhbmFseXNpcyBvZiBrZXkgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgcHJvYmFibHkgc3RhdGljIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5JiMzOTtsbCBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlcywgYW5kIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSB2aXRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCBmb3IgYHNvY2tfbWFwLm9gLCBidXQgd2hhdCBhYm91dCBpdHMgZGVwZW5kZW5jaWVzPyBSaWdodCwgYENPTkZJR19ORVRgIGhhcyB0byBiZSBlbmFibGVkIHRvbywgaXQmIzM5O3MgYSBwYXJlbnQgY29uZmlnLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZS4gTGV0IG1lIGRpZyBpbnRvIGBuZXQvY29yZS9LY29uZmlnYCBhbmQgc2VlIGlmIGBzb2NrX21hcC5vYCBvciBgZmlsdGVyLm9gIGFyZSBtZW50aW9uZWQgYW55d2hlcmUgZWxzZS4gVGhhdCBzaG91bGQgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBpbml0L0tjb25maWdgIGZvciBgQlBGX1NZU0NBTExgOgoKKipDaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgd291bGQgdGhpcyBjb25maWd1cmF0aW9uIGJlIGRlZmluZWQ/JiMzNDsgR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN5c3RlbS1sZXZlbCBmZWF0dXJlLCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpa2UgdGhpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhlIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgcmVsZXZhbnQgYGNvbmZpZ2AgYmxvY2suIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGRlZmluZWQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkIGZyb20gYW5vdGhlciBLY29uZmlnIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIGl0IHRvIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkOyBhIHNpbXBsZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBhbmQgc29tZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBkZWZpbmluZyB3aGF0IHRoZSBvcHRpb24gY29udHJvbHMuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgcGFydGljdWxhciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9uIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgcmVsaWFibGUgb25lIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIEJQRiBvcHRpb25zIGFyZSB1c3VhbGx5IGxvY2F0ZWQsIG9yIGF0IGxlYXN0IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxpbmtzIHRvIHRoZSByZWxldmFudCBzdWItY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBjaGVjayBzaW1pbGFyIGZpbGVzIHRvbywganVzdCBpbiBjYXNlLCBidXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgc3VzcGVjdCBmb3IgZ2V0dGluZyBtZSBzdGFydGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdpbiBpZiBJJiMzOTttIGx1Y2t5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9TWVNDQUxMYC4gTXkgZmlyc3QgbW92ZSBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYXNzZXNzLiBUaGVyZSBpc24mIzM5O3QgbXVjaCBtb3JlIHRvIGl0IC0gdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgTG9va3VwIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIEJQRiBsb29rdXAgZnVuY3Rpb25zLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEkmIzM5O2xsIGFsc28gcmVxdWlyZSBgTkVUYCBkdWUgdG8gaXRzIGluZmx1ZW5jZSBvbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFNwZWNpZmljYWxseSwgSSBub3RpY2VkIHRoYXQgYHNvY2tfbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCBhbmQgYGZpbHRlci5jYCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHRoYXQgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgbmVjZXNzYXJ5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246CiogICBgYnBmX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAKKiAgIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYAoqICAgYHNvY2tfbWFwX2xvb2t1cGAsIGBzb2NrX2hhc2hfbG9va3VwYAoKQWhhISBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdGF0aWMsIHdoaWNoIG1heSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggZnV6emluZyB0aGVtIHdpdGggU3l6a2FsbGVyLCB1bmxlc3MgdGhlcmUgYXJlIG5vbi1zdGF0aWMgd3JhcHBlcnMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgc29ja19tYXBfb3BzYCBhbmQgYHNvY2tfaGFzaF9vcHNgLCB0aGVzZSBhcmUgc3RydWN0cy4gUmlnaHQsIHNvIHRoZSBCUEYgbWFwIGxvb2t1cCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYG1hcC0mZ3Q7b3BzLSZndDttYXBfbG9va3VwX2VsZW1gLiBUaGlzIGltcGxpZXMgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBnb2luZyB0byBiZSBjYWxsZWQgaW50ZXJuYWxseSB2aWEgdGhhdCBtZWNoYW5pc20sIHdoaWNoIGlzIHByb21pc2luZy4gU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0byB0aGVtIGlmIHRoZXkgYXJlIGluIHRoZSBsaXN0LgoKT2theSwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIG5vbi1zdGF0aWMgYXMgSSBzdXNwZWN0LgpJdCBsb29rcyBsaWtlIHRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZXhwYW5kcyB0byBhIG5vbi1zdGF0aWMgZGVjbGFyYXRpb246CmBgYGMKdTY0IGJwZl9za19sb29rdXBfdGNwKHU2NCByMSwgdTY0IHIyLCB1NjQgcjMsIHU2NCByNCwgdTY0IHI1KTsKYGBgClllcywgdGhpcyBpcyBub24tc3RhdGljISBFeGNlbGxlbnQuCgpOb3cgSSBuZWVkIHRvIHJlcGVhdCB0aGF0IGNoZWNrIGZvciBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgIGFuZCBlbnN1cmUgdGhhdCBpdCB0b28gaXMgbm9uLXN0YXRpYywgYnV0IEkmIzM5O20gY29uZmlkZW50IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NBTExfNVxcKGJwZl90Y19za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzE5LVxubmV0L2NvcmUvZmlsdGVyLmM6NzMyMDpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MzIxLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAmIzM5O3MgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBmZWVscyBnb29kLiBOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgc29tZXRoaW5nLiBJcyBgYnBmX3hkcF9za19sb29rdXBfdGNwYCBkZWNsYXJlZCB3aXRoIHRoZSBgc3RhdGljYCBrZXl3b3JkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGxpbmthZ2UgYW5kIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgaXQgaW50cm9kdWNlcyBzb21lIGRlc2lnbiBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgY29uc2lkZXIgd2hlbiBmb3JtdWxhdGluZyBteSBuZXh0IHN0ZXBzLiBJZiBub3QsIHRoZW4gSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgZXhpc3RpbmcgaHlwb3RoZXNpcy4gQSBxdWljayBjaGVjayBvZiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgSSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkZXRhaWwgSSYjMzk7bSByZWx5aW5nIG9uLCBzbyBpdOKAmXMgc29tZXRoaW5nIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBnZXR0aW5nIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzQxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQyOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0MzA6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03NDMxLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIHJlZmxlY3Rpbmcgb24gdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZpY2F0aW9uIG9mIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgIE5vbi1TdGF0aWMgU3RhdHVzKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgIGZ1bmN0aW9uIGlzICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbiB0byBwcm9wZXJseSBsaW5rIGFuZCBhY2Nlc3MgdGhlIGZ1bmN0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3My1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0NzQ6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3NS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBGdW5jdGlvbioqCgpZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIGFic29sdXRlbHkuCgpPa2F5LCBub3cgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwgZm9yIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNvY2tfbWFwX2xvb2t1cGAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBvYnZpb3VzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBjb21wb25lbnRzIGxpa2UgdGhpcy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAgdG8gYXZvaWQgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjcmVhdGUgcHJvYmxlbXMgbGF0ZXIgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB2b2lkIFxcKnNvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzc9c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDAwOnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBQb2ludGVyKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHN0YXRpYy4gQnV0LCB3YWl0IGEgbWludXRlLCBpdCYjMzk7cyBhbHNvIGJlaW5nIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGEgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXM6IElzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgaXQ/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4KCkFoLCBJIHJlbWVtYmVyIHRoYXQgdGhlIEJQRiBtYXAgbG9va3VwLCB0aGUgc3lzY2FsbCwgdWx0aW1hdGVseSBjYWxscyBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24hIExldCBtZSBzZWUsIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGl0c2VsZiBmb3IgdGhpcyBpcyBgbWFwX2xvb2t1cF9lbGVtYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLgoKUmlnaHQsIHNvIHRvIHRyYWNlIHRoaXMsIEkgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG5vdy4gTGV0IG1lIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI3LVx0fSBlbHNlIGlmIChJU19GRF9BUlJBWShtYXApIHx8IElTX0ZEX1BST0dfQVJSQVkobWFwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI4Olx0XHRlcnIgPSBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5LCB2YWx1ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjktXHR9IGVsc2UgaWYgKElTX0ZEX0hBU0gobWFwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzMwOlx0XHRlcnIgPSBicGZfZmRfaHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMzMS1cdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SRVVTRVBPUlRfU09DS0FSUkFZKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQxLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDI6XHRcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MzpcdFx0XHRwdHIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seShtYXAsIGtleSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDQtXHRcdGVsc2Vcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NTpcdFx0XHRwdHIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDYtXHRcdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE3NjA9c3RhdGljIHZvaWQgKl9fX2JwZl9jb3B5X2tleShicGZwdHJfdCB1a2V5LCB1NjQga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTc3My1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE3NzQ6c3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzc1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzM3LVx0Y2FzZSBCUEZfTUFQX0xPT0tVUF9FTEVNOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMzODpcdFx0ZXJyID0gbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMzOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc29ja19tYXAgTG9va3VwIFByb2Nlc3MgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBzb2NrX21hcGAgbG9va3VwIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dCBhbmQgaG93IFN5emthbGxlciBjb3VsZCBpbnRlcmFjdCB3aXRoIGl0LiBJIHNlZSB0aGF0IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdXNlcyBgbWFwX2xvb2t1cF9lbGVtYCB3aGljaCB0aGVuIGRpc3BhdGNoZXMgdG8gZWl0aGVyIGBtYXAtJmd0O29wcy0mZ3Q7bWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5YCBvciBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIEZvciBgc29ja19tYXBgLCB0aGUgYHN5c19vbmx5YCB2ZXJzaW9uIHRyYW5zbGF0ZXMgdG8gYHNvY2tfbWFwX2xvb2t1cF9zeXNgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgc29ja19tYXBfbG9va3VwX3N5c2AgaXMgKmFsc28qIHN0YXRpYz8gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIFN5emthbGxlciYjMzk7cyBzeW1ib2wgcmVzb2x1dGlvbiwgZXNwZWNpYWxseSBpZiBpdCBnZXRzIGlubGluZWQuCgpUaGUgcmVndWxhciBgc29ja19tYXBfbG9va3VwYCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBCUEYgaGVscGVycyBsaWtlIGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCwgYnV0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBjYWxscyBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAsIHNvIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KClJpZ2h0LCBzbyBgc29ja19tYXBfbG9va3VwYCBpcyAqb25seSogY2FsbGVkIHZpYSBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIFRoZSBpc3N1ZSBpcywgc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBTeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyBpdCwgcGFydGljdWxhcmx5IGlmIHRoZSBjb21waWxlciBkZWNpZGVzIHRvIGlubGluZSBpdC4gSG93ZXZlciwgc2luY2Ugd2UmIzM5O3JlIHRha2luZyB0aGUgYWRkcmVzcyBvZiBgc29ja19tYXBfbG9va3VwYCwgaW5saW5pbmcgaXMgbGVzcyBsaWtlbHksIGJ1dCBzdGlsbCBhIGNvbmNlcm4uIEl0ICpjb3VsZCogd29yayBpZiB3ZSBleHBsaWNpdGx5IHByb3ZpZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wgdG8gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGNsZWFuZXIgYW5kIG1vcmUgcm9idXN0IHRvIHVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpZiBwb3NzaWJsZS4KClNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHdlICpjYW4qIHVzZT8gYHNvY2tfbWFwX29wc2AgaXMgbm9uLXN0YXRpYywgYnV0IGl0JiMzOTtzIGEgc3RydWN0IGFuZCBub3QgYSBmdW5jdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGVpdGhlciBgc29ja19tYXBfbG9va3VwYCBvciBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAuIFRoaXMgd2lsbCBiZSBteSBuZXh0IGFyZWEgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc29ja19tYXBfbG9va3VwX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzg4PXN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00MDA9c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBNYXAgTG9va3VwIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgb2YgaW50ZXJlc3QsIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgbW9kaWZ5aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAsIG5vdCB0aGUgbG93ZXItbGV2ZWwgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLgoKUmlnaHQsIEkgc2VlIHRoZSBkaWZmIG5vdy4gVGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgcmVmY291bnRpbmcgaW4gYHNvY2tfbWFwX2xvb2t1cGAuIEluc3RlYWQgb2YgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkmIzM5O3JlIHVzaW5nIGBzb2NrX2hvbGRgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgaW50ZW5kZWQgbWV0aG9kIG9mIGJ1bXBpbmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KCkFoYSEgU28gdGhlIGNydWNpYWwgY2hhbmdlIGlzIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGlua2luZyBtb3JlIGFib3V0IGhvdyBCUEYgbWFwcyB3b3JrLCBJIHJlYWxpemUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSYjMzk7cmUgY2FsbGVkIHZpYSBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFBlcmZlY3QhIFRoYXQmIzM5O3MgbXkgdGFyZ2V0LgoKVGhlIGdvb2QgbmV3cyBpcywgbXkgZm9jdXMgY2FuIHJlbWFpbiBvbiB0aGVzZSB0d28gZnVuY3Rpb25zOyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGV5JiMzOTtyZSB0aGUgb25lcyBJIG5lZWQgdG8gZXhhbWluZSBjbG9zZWx5LiBBbmQsIGJlY2F1c2Ugb2YgaG93IFN5emthbGxlciBhbmQga2NvdiB3b3JrLCB0aGUgY292ZXJhZ2Ugd2lsbCBzdGlsbCBiZSB0cmFja2VkIGZvciB0aGVtLCBldmVuIHdpdGggdGhlc2UgY2hhbmdlcyBkZWVwZXIgZG93biBpbiB0aGUgc3RhY2suIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgYHNvY2tfaGFzaF9sb29rdXBgIHRvbywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTg4MD1zdGF0aWMgc3RydWN0IGJwZl9zaHRhYl9lbGVtICpcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODgxOnNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiBoYXNoLCB2b2lkICprZXksXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4Mi1cdFx0XHQgIHUzMiBrZXlfc2l6ZSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODk1OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX2hhc2hfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy04OTYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA1LVx0YnVja2V0ID0gc29ja19oYXNoX3NlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjkwNjpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA3LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE4PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzMi1cdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjkzMzpcdGVsZW1fcHJvYmUgPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBlbGVtLVx1MDAzZWhhc2gsXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNC1cdFx0XHRcdFx0ICAgICAgIGVsZW0tXHUwMDNla2V5LCBtYXAtXHUwMDNla2V5X3NpemUpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQzPXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NTQtXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo5NTU6XHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcdTAwMjZidWNrZXQtXHUwMDNlaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Ni1cdGlmIChlbGVtKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05OTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDIyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAyMzpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyNC1cdGlmIChlbGVtIFx1MDAyNlx1MDAyNiBmbGFncyA9PSBCUEZfTk9FWElTVCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA1OD1zdGF0aWMgaW50IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3MC1cdGhlYWQgPSBcdTAwMjZzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKS1cdTAwM2VoZWFkO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDcxOlx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNzItXHRpZiAoIWVsZW0pXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMTQ2PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTk4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTk5OnN0YXRpYyB2b2lkICpzb2NrX2hhc2hfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIwNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIwNjpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjA3LVx0aWYgKCFzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTQ6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjE1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTg6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxOS1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUzPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNjAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjE6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyODE9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4OTpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjkwLVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NDpcdC5tYXBfbG9va3VwX2VsZW1cdD0gc29ja19oYXNoX2xvb2t1cCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NTpcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX2hhc2hfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1Ni1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfaGFzaF9yZWxlYXNlX3Byb2dzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgU29ja2V0IExvb2t1cCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgc29ja19oYXNoX2xvb2t1cGAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgc29ja19oYXNoX29wc2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBhbHNvIGNvbnNpZGVyIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCB3aGljaCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRoYXQuCgpTbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB3aGF0IEkgKnJlYWxseSogbmVlZCB0byBmb2N1cyBvbiwgYXJlIHRoZSBCUEYgaGVscGVycyB0aGF0IHV0aWxpemUgYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYCBkaXJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiB0aG9zZSB3b3VsZCBiZToKCiogICBgYnBmX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYAoqICAgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAKKiAgIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYAoqICAgYHNvY2tfbWFwX2xvb2t1cGAKKiAgIGBzb2NrX2hhc2hfbG9va3VwYAoKSSYjMzk7bGwgYWRkIHRob3NlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCByaWdodCBhd2F5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBjb25maXJtIHRoZSBuYW1lIGFnYWluLCBpdCBzZWVtcyByaWdodCwgSSYjMzk7bGwgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgICppcyogYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZS4uLiBZZXAsIGBCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCAuLi4pYCBjb25maXJtcyBpdC4gU28sIHRoYXQmIzM5O3MgZGVmaW5lZCBjb3JyZWN0bHkuIEV4Y2VsbGVudCwgbGV0JiMzOTtzIG5vdyBjaGVjayBpZiBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGF0IGlzbiYjMzk7dCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBnb29kIG5ld3MgaXMsIGlmIGl0JiMzOTtzIG5vbi1zdGF0aWMsIFN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIHRhcmdldCBpdCBmb3IgZnV6emluZy4gVGhhdCYjMzk7cyB0aGUga2V5IHBvaW50OiBTeXprYWxsZXLigJlzIGNhcGFiaWxpdGllcyBleHRlbmQgYmV5b25kIGp1c3QgZXhwbGljaXRseSBleHBvcnRlZCBzeW1ib2xzLgoKU28sIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBzb2NrX21hcF9sb29rdXBgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgYSB2aWFibGUgZnV6emluZyB0YXJnZXQgb3IgaWYgSSBuZWVkIHRvIGRvIHNvbWUgbW9yZSBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhIFN0YWxsZWQgUHJvY2VzcyoqCgpBbHJpZ2h0LCB0aGlzIGZlZWxz4oCmc3R1Y2suIERlYWQgaW4gdGhlIHdhdGVyLiBFdmVyeXRoaW5n4oCZcyBqdXN0ICpzdGF0aWMqLiBObyBhcHBhcmVudCBtb3ZlbWVudCwgbm8gb2J2aW91cyBwcm9ncmVzcy4gQmVmb3JlIEkgc3RhcnQgdGVhcmluZyBpbnRvIHRoZSBrZXJuZWwgd2l0aCBzdHJhY2Ugb3IgZ2RiLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBzbGlnaHRseSBtb3JlIHN1cmdpY2FsIGFwcHJvYWNoLiBUaGUgcHJvYmxlbSBjb3VsZCBsaWUgaW4gYSBsb3Qgb2YgcGxhY2VzLCBidXQgZ2l2ZW4gdGhlIHN5bXB0b21zLCBteSBndXQgc2F5cyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBzb2NrX2hhc2hfbG9va3VwYCBpcyBhY2Nlc3NpYmxlIGZyb20gd2hlcmUgSSYjMzk7bSBzdXNwZWN0aW5nIHRoZSBwcm9jZXNzIGlzIGh1bmcuIElzIHRoYXQgc3ltYm9sIGV4cG9ydGVkIGluIHRoZSBrZXJuZWwgaW1hZ2UgZm9yIHRoaXMgYnVpbGQ/IEkgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5LCBiZWNhdXNlIGlmIHRoYXQmIzM5O3Mgbm90IGV4cG9zZWQsIG15IGRlYnVnZ2luZyBpcyBnb2luZyB0byB0YWtlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgKGFuZCBtb3JlIHBhaW5mdWwpIHRyYWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3MgZXhwb3NlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNvY2tfaGFzaF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MzgKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogOTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCB0byBpbmNsdWRlIHNldmVyYWwgQlBGIGZ1bmN0aW9ucyAoYGJwZl9za19yZWRpcmVjdF9tYXBgLCBgYnBmX21zZ19yZWRpcmVjdF9tYXBgLCBldGMuKSBiZWNhdXNlIHRoZXkgcmVsYXRlIHRvIGxvb2t1cHMuIEhvd2V2ZXIsIHRob3NlIGZ1bmN0aW9ucyB1bHRpbWF0ZWx5IGNhbGwgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGFuZCBgX19zb2NrX2hhc2hfbG9va3VwX2VsZW1gLCBidXQgSSByZWFsaXplIG5vdyB0aGF0IHRob3NlIGFyZW4mIzM5O3QgKmRpcmVjdGx5KiB3aGVyZSB0aGUgY29kZSB3YXMgbW9kaWZpZWQuIFRoZSBhY3R1YWwgY2hhbmdlcyBhcmUgd2l0aGluIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAuIFNvLCBJJiMzOTtsbCByZXN0cmljdCBteSBmb2N1cyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGluIHRoZSBwcm92aWRlZCBwYXRjaC4gWWVzLCB0aGUgY2hhbmdlIGlzIGluZGVlZCB3aXRoaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIHNpbWlsYXJseSBpbiBgc29ja19oYXNoX2xvb2t1cGAuIEkgbmVlZCB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGhlcmUuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNvY2tfbWFwX2xvb2t1cGAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgYHNvY2tfbWFwX29wc2Agc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBpcyB0aWVkIHRvIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuCgpUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQlBGIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBtYXAgbG9va3VwcyBvbiBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIHZlcnkgaW50ZXJlc3RpbmcuIFN5emthbGxlciBjYW4gZWFzaWx5IHRhcmdldCB0aGlzIGJ5IGNyZWF0aW5nIGEgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYCBhbmQgY2FsbGluZyBgYnBmX21hcF9sb29rdXBfZWxlbWAgZnJvbSBhIEJQRiBwcm9ncmFtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtIGNhbGwgcGF0aCB0aG91Z2guIGBtYXBfbG9va3VwX2VsZW1gIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY2FsbHMgYG1hcF9sb29rdXBfZWxlbV9zeXNfb25seWAgaWYgdGhhdCBpcyBzZXQsIG90aGVyd2lzZSBjYWxscyBgbWFwX2xvb2t1cF9lbGVtYC4gRm9yIGBzb2NrX21hcGAsIGBtYXBfbG9va3VwX2VsZW1fc3lzX29ubHlgIGlzIHNldCB0byBgc29ja19tYXBfbG9va3VwX3N5c2AuIFRodXMsIHRoZSBzeXNjYWxsIGBicGYoQlBGX01BUF9MT09LVVBfRUxFTSlgIHdpbGwgY2FsbCBgc29ja19tYXBfbG9va3VwX3N5c2AsIG5vdCBgc29ja19tYXBfbG9va3VwYC4gSG93ZXZlciwgdGhlIGhlbHBlciBgYnBmX21hcF9sb29rdXBfZWxlbWAgd2lsbCBjYWxsIGBzb2NrX21hcF9sb29rdXBgLiBUaGUgdmVyaWZpZXIgcmVwbGFjZXMgdGhlIGhlbHBlciBjYWxsIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAsIHdoaWNoIGlzIGBzb2NrX21hcF9sb29rdXBgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlICppcyogcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgKmZ1enphYmxlKiBmcm9tIEJQRiBwcm9ncmFtcy4KCk9rYXksIHRoaXMgc2VlbXMgbGlrZSBhIGNvbmNyZXRlIGFuZCB0YXJnZXRhYmxlIGFyZWEuIEkgZmVlbCBjb25maWRlbnQgaW4gYXNzZXNzaW5nIGl0IGFzIGFuIGltcG9ydGFudCBzcG90IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3RjX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3RjX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODcxODkyYTc2OWNjYTRjNTVlYWI2OTQ5NjZhM2ZlNTIzYmU2MzE4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjUyOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAzNDIzNzM0MTI0YTViLi4wMzFmYjJhYWQ3OTJhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNzE2Nyw2ICYjNDM7NzE2NywyOCBAQCBfX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJcmV0dXJuIHNrOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrICoKJiM0MzticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiBzay0mZ3Q7cnNrX2xpc3RlbmVyLCBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsCiYjNDM7CSAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KJiM0MzsJICovCiYjNDM7CWlmIChzazIgIT0gc2spIHsKJiM0MzsJCXNvY2tfZ2VuX3B1dChzayk7CiYjNDM7CQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovCiYjNDM7CQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJc2sgPSBzazI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNrOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqCiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAkJc3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsCkBAIC03MTc2LDIyICYjNDM7NzE5OCw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCQkJCQkgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLAogCQkJCQkgICBzZGlmKTsKIAotCWlmIChzaykgewotCQlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7Ci0KLQkJLyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS0mZ3Q7cnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrCi0JCSAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KLQkJICovCi0JCWlmIChzazIgIT0gc2spIHsKLQkJCXNvY2tfZ2VuX3B1dChzayk7Ci0JCQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi8KLQkJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7Ci0JCQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlzayA9IHNrMjsKLQkJfQotCX0KJiM0MzsJaWYgKHNrKQomIzQzOwkJc2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spOwogCiAJcmV0dXJuIHNrOwogfQpAQCAtNzIyMiwyMiAmIzQzOzcyMzAsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJc3RydWN0IHNvY2sgKnNrID0gYnBmX3NrY19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBwcm90bywgbmV0bnNfaWQsCiAJCQkJCSBmbGFncyk7CiAKLQlpZiAoc2spIHsKLQkJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwotCi0JCS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktJmd0O3Jza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBzawotCQkgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuCi0JCSAqLwotCQlpZiAoc2syICE9IHNrKSB7Ci0JCQlzb2NrX2dlbl9wdXQoc2spOwotCQkJLyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovCi0JCQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewotCQkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2sgPSBzazI7Ci0JCX0KLQl9CiYjNDM7CWlmIChzaykKJiM0MzsJCXNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTsKIAogCXJldHVybiBzazsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jCmluZGV4IDllZmJkOGNhN2RiODMuLmNhNDliYzdmODY4N2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19tYXAuYwpAQCAtMzkyLDggJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKQEAgLTEyMTgsOCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJc2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzYKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFJlZmFjdG9yaW5nIGFuZCBSZWZjb3VudCBDaGFuZ2UgaW4gU29ja2V0IExvb2t1cCoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJbiBgZmlsdGVyLmNgLCBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGNvZGUgcmVmYWN0b3Jpbmc7IHRoZXkmIzM5O3JlIGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgZnJvbSBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgLiBOb3RoaW5nIHRvIHNlZSB0aGVyZSByZWFsbHksIGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLgoKTm93LCBgc29ja19tYXAuY2AgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudClgIGZvciBgc29ja19ob2xkKHNrKWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBzaGlmdC4gYHNvY2tfaG9sZGAgdW5jb25kaXRpb25hbGx5IGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCB3aGVyZWFzIHRoZSBvcmlnaW5hbCBjaGVjayBlbnN1cmVzIHRoZSByZWZjb3VudCBpc24mIzM5O3QgYWxyZWFkeSB6ZXJvLiBUaGlzIHNjcmVhbXMgcmVmY291bnQtcmVsYXRlZCBidWcgZml4IG9yIGNoYW5nZSDigJMgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgbWl0aWdhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IEtBU0FOL3JlZmNvdW50LXJlbGF0ZWQsIG5vdCBLTVNBTi4KCkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiBkb2VzIHRoaXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgb3IgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzPyBOb3BlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgYW5kIGEgcmVmY291bnQgY2hhbmdlLiBLTVNBTiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggdGhpcyBpc24mIzM5O3QuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgYHNvY2tfaG9sZGAgZnVuY3Rpb24gcmVhbGx5IGRvZXMgaW5jcmVtZW50IHRoZSByZWZjb3VudCB1bmNvbmRpdGlvbmFsbHkuIFllcCwgaXQmIzM5O3MganVzdCBgcmVmY291bnRfaW5jKCZhbXA7c2stJmd0O3NrX3JlZmNudClgLiBJZiB0aGUgcmVmY291bnQgd2FzIHByZXZpb3VzbHkgemVybywgdGhlbiBgc29ja19ob2xkYCB3aWxsIGluY3JlbWVudCBpdCBmcm9tIHplcm8gdG8gb25lLiBUaGlzIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUuIEl0IGlzIGFic29sdXRlbHkgS0FTQU4vcmVmY291bnQgdGVycml0b3J5LgoKT2theSwgbGV0IG1lIHB1dCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uOgoKVGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGNvZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbHRlciBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgZGVidWdnaW5nIHRlY2huaXF1ZXMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGxvZ2ljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYnkgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYnkgcmVwbGFjaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdpdGggYHNvY2tfaG9sZGAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MjoyNi4zNTcyNTQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDc0NDA4MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MjoyNi4zNTcyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkxNzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3MTg5MmE3NjljY2E0YzU1ZWFiNjk0OTY2YTNmZTUyM2JlNjMxOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MTY3LDYgKzcxNjcsMjggQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc29jayAqXFxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXFx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxcbitcXHQgKiBzayBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2syICE9IHNrKSB7XFxuK1xcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuK1xcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNrMiBcXHUwMDI2XFx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2sgPSBzazI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcXG4gX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbkBAIC03MTc2LDIyICs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNkaWYpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcyMjIsMjIgKzcyMzAsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXFxuaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXFxuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xcbkBAIC0zOTIsOCArMzkyLDggQEAgc3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG4gXFx0aWYgKCFzaylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcXG4rXFx0XFx0c29ja19ob2xkKHNrKTtcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbkBAIC0xMjE4LDggKzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjUyOjI2LjgzNjcxMTkzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMTA5MTYyNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MTg5MmE3NjljY2E0YzU1ZWFiNjk0OTY2YTNmZTUyM2JlNjMxOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1MjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MTY3LDYgKzcxNjcsMjggQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNvY2sgKlxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuK1xuK1x0LypcbitcdCAqIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuK1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuK1x0ICovXG4rXHRpZiAoc2syICE9IHNrKSB7XG4rXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4rXHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi9cbitcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXHRcdHNrID0gc2syO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNrO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHNvY2sgKlxuIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcbkBAIC03MTc2LDIyICs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG4gXHRcdFx0XHRcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgIHNkaWYpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjIyLDIyICs3MjMwLDggQEAgYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gYnBmX3NrY19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBwcm90bywgbmV0bnNfaWQsXG4gXHRcdFx0XHRcdCBmbGFncyk7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHNrKVxuK1x0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG4gXG4gXHRyZXR1cm4gc2s7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCA5ZWZiZDhjYTdkYjgzLi5jYTQ5YmM3Zjg2ODdjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTM5Miw4ICszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC0xMjE4LDggKzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjUyOjI2LjgzNjcxMzAxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDkzOTk3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIG1vZGlmaWNhdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJbiBgZmlsdGVyLmNgLCBhIG5ldyBoZWxwZXIsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBoYXMgYmVlbiBhZGRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgbG9va3VwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEdvb2QgdG8gc2VlIHRoZXkncmUgY2xlYW5pbmcgdGhpbmdzIHVwLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gYHNvY2tfbWFwLmNgLiBUaGV5J3ZlIGFsdGVyZWQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgcmVmY291bnQgY2hlY2suIEluc3RlYWQgb2YgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkncmUgbm93IHVzaW5nIGBzb2NrX2hvbGRgIHdpdGhpbiBhIHByb3RlY3RlZCBzY29wZS4gU28sIGVzc2VudGlhbGx5LCB0aGV5J3JlIGFzc3VtaW5nIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBwcm90ZWN0ZWQsIHByb2JhYmx5IGJ5IFJDVSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZSBgc29ja19ob2xkYCBpcyBmb3IgbWFpbnRhaW5pbmcgYSBob2xkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBzb3VuZCwgKmlmKiB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGV4aXN0aW5nIHByb3RlY3Rpb24gYXJlIGNvcnJlY3QuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyB0aGUgY2FzZS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuIHJlYWNoYWJsZS4gV2FpdCwgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgKmRlZmluaXRlbHkqIHVzZWQgYXMgQlBGIG1hcCBsb29rdXAgZnVuY3Rpb25zIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4gWXVwLCB0aG9zZSBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6ZWFibGUsIG5vIHF1ZXN0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYHNvY2tfbWFwLmNgLiBMZXQgbWUgcXVpY2tseSBsb29rIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAuLi4gT2theSwgaXQgbG9va3MgbGlrZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gU28sIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEVhc3kgZW5vdWdoIHRvIGNoZWNrLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCBgZmlsdGVyLmNgLiBTYW1lIGBuZXQvY29yZS9NYWtlZmlsZWAsIGFuZCB0aGUgZGVwZW5kZW5jeSBpcyBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaWx0ZXIub2Agc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgYXBwbGllcyB0aGVyZSB0b28uIEhtbSwgd2FpdC4gT3IgbWF5YmUgdGhlIGZ1bGwgYG5ldGAgY29uZmlnIGlzIG5lZWRlZCBmb3IgdGhlIGNvbXBpbGUuLi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHNhbWUgYE1ha2VmaWxlYCBhZ2FpbiB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowMy4zMzA3MTMzMjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTU3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowMy4zNzY1NzQ1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzY3Mzg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBzb2NrX21hcC5vYC4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBnb2luZyBvbiB3aXRoIGBmaWx0ZXIub2AuLi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhpcyBpcyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MDYuOTEzMzE3NTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjAxNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowNi45NTk5MzAxNTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQxODQ3MzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIGBmaWx0ZXIub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGF0IGFuZCB0aGUgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCByaWdodCwgYGJwZl9za19sb29rdXBgIGlzIGEgQlBGIGhlbHBlciwgdGhhdCdzIGtleS4gTm93LCB3aGVyZSBkbyB0aGUgbWFwIG9wZXJhdGlvbnMgZml0IGluPyBJIGtub3cgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgdGhlIG1hcCBvcGVyYXRpb25zIGhlcmUuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc29ja19tYXBfbG9va3VwYCwgYHNvY2tfaGFzaF9sb29rdXBgLCBgYnBmX3NrX2xvb2t1cGAsIGFuZCBgX19icGZfc2tfbG9va3VwYC4gSGFuZyBvbiBhIHNlY29uZCwgdGhhdCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBtaWdodCBjb21wbGljYXRlIHRoaW5ncyBiZWNhdXNlIGl0IGlzIHN0YXRpYy4gSXQncyBsaWtlbHkgaW5saW5lZCBvciBtaWdodCBub3QgZXZlbiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWVhbnMgaXQgbWlnaHQgbm90IHNob3cgdXAgZGlyZWN0bHkuXG5cbkhvd2V2ZXIsIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAsIHRob3NlIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZXkgYXJlICp1c2VkKiBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgYnBmX21hcF9vcHNgLiBUaGF0IG1lYW5zIHRoZXkgd2lsbCBub3QgYmUgaW5saW5lZCBhbmQgKmRvKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgc3RhdGljIGFuZCBJIGNhbiBwcm9jZWVkIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MzMuMzc4NDA3MTgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgwOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU2LVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njc1PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTcyMz1zdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI4OlxcdGluZm8tXFx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVxcdTAwM2VtYXAsIGluZm8tXFx1MDAzZWluZGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2OlxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5OlxcdC5tYXBfbG9va3VwX2VsZW1cXHQ9IHNvY2tfbWFwX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MzMuNDI0ODk0MjYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NDg0ODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEJQRiBNYXAgTG9va3VwcyBhbmQgU29ja2V0IExvb2t1cHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEJQRiBtYXBzIGFuZCBzb2NrZXQgbG9va3Vwcy4gSSBzZWUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGBicGZfbWFwX29wc2Agc3RydWN0LiBUaGF0IG1lYW5zIHRoZXkncmUgbm90IGlubGluZWQsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdCBnaXZlbiB0aGVpciBmdW5jdGlvbi4gVGhleSdyZSBwYXJ0IG9mIGEgZGVmaW5lZCBzZXQgb2Ygb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gc2hpZnRpbmcgZm9jdXMgdG8gdGhvc2UgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGJwZl9za19sb29rdXBgIGFuZCBgX19icGZfc2tfbG9va3VwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCBob3cgdGhleSdyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzozNy41Njk3NDc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTcxNzA9c3RhdGljIHN0cnVjdCBzb2NrICpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Mi17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTkyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5MzpfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk0LVxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMS1cXHRpZiAoc2spXFxubmV0L2NvcmUvZmlsdGVyLmM6NzIwMjpcXHRcXHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMy1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyMjY9c3RhdGljIHN0cnVjdCBzb2NrICpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjI3OmJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjI4LVxcdCAgICAgIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzMtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMzQ6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzUtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI1Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjU4OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjU5LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2MTpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjY0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjY2OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzc6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzgtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc5LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjgwOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI4MS1cXHRcXHRcXHRcXHRcXHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyODMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyODU6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyODYtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTczMjA9QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzI3OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzM0ND1CUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTE6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1VEUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgyPUJQRl9DQUxMXzUoYnBmX3hkcF9za19sb29rdXBfdWRwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM4OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzg5OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc0MzA9QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDM2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0Mzc6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MzgtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzQ3ND1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDc2LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDc3OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1RDUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc0OTM9QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzQ5NjpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBzb2NrX25ldChjdHgtXFx1MDAzZXNrKSwgMCwgSVBQUk9UT19VRFAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDk2PWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODUyNC1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODUyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjYtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTI4LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg4Mzk9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODY1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODY2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODg2Ny1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg2ODpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjktXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4OTU9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5ODpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk5OkVYUE9SVF9TWU1CT0woYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMTpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMi1cXHQgICBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzE6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTMyLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk0MD1za19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDctXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE5NTQ9c3RhdGljIGJvb2wgc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU4LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1OTpcXHRpZiAob2ZmIFxcdTAwM2MgMCB8fCBvZmYgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBicGZfc2tfbG9va3VwKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cXHRzd2l0Y2ggKG9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV9wdHIoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2OC1cXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19TT0NLRVRfT1JfTlVMTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTcxOlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgZmFtaWx5KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc0OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc4OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3OS1cXHRcXHRicGZfY3R4X3JlY29yZF9maWVsZF9zaXplKGluZm8sIHNpemVvZihfX3UzMikpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODI6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODMtXFx0XFx0LyogQWxsb3cgNC1ieXRlIGFjY2VzcyB0byAyLWJ5dGUgZmllbGQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KSAuLi5cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk5MDpcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpIC0gMTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MS1cXHRcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gemVybyBwYWRkaW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjAwMD1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDA4LVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDA5OlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMi1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNDpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDE1LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyMDpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjEtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjI6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAyMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjY6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjctXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjg6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAyOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMzI6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzNDpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzODpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzOS1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNDItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDM6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NC1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDY6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0Ny1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNTMtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU0OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDU1LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNTk6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYwLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYxLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA2MjpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYzLVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA2OS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDcxLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDcyOlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDc2OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3Ny1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODE6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODItXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODM6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODc6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA4OTpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzozNy42MTY2Mzk1NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY3OTgxNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNLIExvb2t1cCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGBicGZfc2tfbG9va3VwYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYnBmX3NrX2xvb2t1cGAgaXRzZWxmIGlzIHN0YXRpYywgYnV0IGl0J3MgY2xlYXJseSBiZWluZyBjYWxsZWQgYnkgYGJwZl9za19sb29rdXBfdGNwYCBhbmQgYGJwZl9za19sb29rdXBfdWRwYCwgd2hpY2ggYXJlIHByZXNlbnRlZCBhcyBCUEYgaGVscGVycy4gU2ltaWxhcmx5LCBgX19icGZfc2tfbG9va3VwYCBpcyBhbHNvIHN0YXRpYywgYnV0IGdldHMgdXRpbGl6ZWQgYnkgYSB3aWRlciBzZXQgb2YgZnVuY3Rpb25zIGxpa2UgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYW5kIHRoZSBYRFAgYW5kIGBzb2NrX2FkZHJgIHZhcmlhbnRzLlxuXG5TbywgaW4gdGVybXMgb2YgdGhpbmdzIHRvIGNoZWNrLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYW5kIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLiBJJ20gYWxzbyBhZGRpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCB0byB0aGUgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaC4gQWx0aG91Z2gsIHdhaXQuLi4gdGhvc2UgbGFzdCB0d28gYXJlIHN0YXRpYyBidXQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgc28gdGhleSBzaG91bGQgYmUgb2theS5cblxuTm93LCBsb29raW5nIGNsb3NlciBhdCBob3cgdGhlc2UgYXJlIGRlZmluZWQsIEkgc2VlIGBCUEZfQ0FMTF81KC4uLilgIGJlaW5nIHVzZWQuIFRoYXQgbWFjcm8gZXhwYW5kcyB0byB0aGluZ3MgbGlrZSBgYnBmX3NrX2xvb2t1cF90Y3BgIG9yIHRoZSBkb3VibGUtdW5kZXJzY29yZSB2YXJpYW50cywgbGlrZSBgX19fX2JwZl9za19sb29rdXBfdGNwYC4gUmlnaHQsIHNvIGl0IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGBCUEZfQ0FMTF81YCBhY3R1YWxseSBkZWZpbmVzIGJvdGgsIHJpZ2h0PyBMZXQncyBqdXN0IGF2b2lkIHRoZSBkb3VibGUgdW5kZXJzY29yZSBhbmQgZm9jdXMgb24gdGhlIHNpbXBsZXIgbmFtZXMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXNlICdwcmltYXJ5JyBmdW5jdGlvbnMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYXJlIGV4cG9ydGVkIG9yIG1hcmtlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kIHRoZWlyIGJyb2FkZXIgYXZhaWxhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0NS4yOTY0NTg4ODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzVcXFxcKGJwZl9za19sb29rdXBfdGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTcyNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjU3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNTg6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTktXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6NDUuMzQzOTQ0MTI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODU1NDAyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBCUEZfQ0FMTF81YCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoZW4gSSBzZWUgYEJQRl9DQUxMXzVgLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGZ1bmN0aW9uIGNhbGwgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBCdXQgaXMgaXQgY3JlYXRpbmcgYSBmdW5jdGlvbiBvciBjYWxsaW5nIG9uZT8gR2l2ZW4gdGhlIG5hbWluZywgbXkgaW50dWl0aW9uIGxlYW5zIHRvd2FyZHMgKmNyZWF0aW5nKiBhIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBzZXR0aW5nIHVwIHRoZSBtZWFucyBmb3Igb25lLiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzVgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoaXMgbWFjcm8gKG9yIGZ1bmN0aW9uLCBJJ2xsIGZpbmQgb3V0KSBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0OS4xMjk0ODcxOTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMwMjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0OS4xNzY1MjY4ODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzODQzMzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgSGVhZGVyIEh1bnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLCBhbmQgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGtlcm5lbC1sZXZlbCBkZWZpbml0aW9ucy4gV2hlcmUgYXJlIHRoZXkgbGlrZWx5IGhpZGluZz8gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzLiBJJ2xsIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlci4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3RydWN0dXJlcyBmb3IgZmlsdGVyaW5nIG1pZ2h0IHJlc2lkZS4gSWYgdGhhdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHlpZWxkIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBuZXh0IG1vdmUgaXMgdG8gZ28gZGVlcGVyIHdpdGggYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbW9yZSBtb2Rlcm4gYW5kIGV4cGFuZGVkIEJQRi1zcGVjaWZpYyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZSBpbnN0cnVjdGlvbiBzZXQsIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgbGlrZWx5IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgbG9naWNhbCBwYXRoIOKAkyBgZmlsdGVyLmhgIGZvciB0aGUgaGlzdG9yaWNhbCBncm91bmRpbmcsIHRoZW4gYGJwZi5oYCBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo1NC42MTQ5NjI3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODUtLyogdW51c2VkIG9wY29kZSB0byBtYXJrIGNhbGwgdG8gaW50ZXJwcmV0ZXIgd2l0aCBhcmd1bWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1xcdDB4ZTBcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUxMi1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUxMzojZGVmaW5lIEJQRl9DQUxMX1JFTChUR1QpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTE0LVxcdCgoc3RydWN0IGJwZl9pbnNuKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MjItXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo1MjM6I2RlZmluZSBCUEZfQ0FMTF9JTU0oeClcXHQoKHZvaWQgKikoeCkgLSAodm9pZCAqKV9fYnBmX2NhbGxfYmFzZSlcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTM0LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NTM1OiNkZWZpbmUgQlBGX0NBTExfS0ZVTkMoT0ZGLCBJTU0pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTM2LVxcdCgoc3RydWN0IGJwZl9pbnNuKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NjUtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY3LVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NzgtI2RlZmluZSBfX05PQVRUUlxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Njc5OiNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODA6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgyOiNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODM6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4NDojZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo1NC43MDExNDQwNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MTYyOTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENhbGwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byBpdHMgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gc2VlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyDigJMgZXhhY3RseSB3aGF0J3MgYmVpbmcgZXhwYW5kZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZCwgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGhvdyBpdCB0cmFuc2xhdGVzIGludG8gdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgY2FsbCB0aGlzIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSXMgdGhlcmUgYSBoZWxwZXIgZnVuY3Rpb24gbG9va3VwIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdGFjayBmcmFtZSBhZGp1c3RtZW50cz8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBhbmQgdW5kZXJzdGFuZCB0aGUgQUJJLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjAzLjA0Mjc3NjgxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNTA2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQyND1zdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjY2OiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MDMuMDg4ODMzMjU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDcwMTM4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZpbHRlci5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIExpbnV4IGtlcm5lbCdzIGZpbHRlcmluZyBmcmFtZXdvcmssIGFuZCBJIHJlbWVtYmVyIHRoZXJlJ3Mgc29tZSBjcnVjaWFsIHN0dWZmIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBTcGVjaWZpY2FsbHksIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGRldGFpbHMgSSdtIGFmdGVyIGFyZSBhcm91bmQgbGluZSA2NjYsIHNvIEknbGwganVtcCByaWdodCB0byB0aGF0IGFyZWEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmaWx0ZXJpbmcsIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmtpbmcgb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIHdhaXRpbmcgZm9yIG1lIHRoZXJlISBJIGFudGljaXBhdGUgc2VlaW5nIGVpdGhlciBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMsIGVudW1lcmF0aW9ucywgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmaWx0ZXJpbmcgcnVsZXMsIHBhY2tldCBpbnNwZWN0aW9uLCBvciBwZXJoYXBzIGV2ZW4gQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBpbnRlZ3JhdGlvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjA3Ljg5NTg0OTYyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MDcuODk1OTcxNzIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODAzODEyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgLi4uKWAgaXMgZGVmaW5pbmcgYm90aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgYnBmX3NrX2xvb2t1cF90Y3AoLi4uKWAgYW5kIGFuIGludGVybmFsIGBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBfX19fYnBmX3NrX2xvb2t1cF90Y3AoLi4uKWAgaGVscGVyLiBUaGlzIG1lYW5zIGBicGZfc2tfbG9va3VwX3RjcGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IHN5bWJvbCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3IgYW5hbHlzaXMgaW4gdGhpcyBjb250ZXh0LiBJdCdzIHRoZSBwdWJsaWMtZmFjaW5nIGVudHJ5IHBvaW50LlxuXG5UaGF0IHBhdHRlcm4sIG5hdHVyYWxseSwgZXh0ZW5kcyB0byB0aGUgb3RoZXIgcmVsYXRlZCBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBhbmQgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAuIFRoZXknbGwgYWxsIGZvbGxvdyB0aGUgc2FtZSBzdHJ1Y3R1cmUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGNoZWNrIGhvdyB0aGVzZSBsb29rdXAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBtYXBzLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgd2l0aGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDoxMy4zNzYzNTQ1ODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTk5NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU2LVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njc1PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTcyMz1zdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI4OlxcdGluZm8tXFx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVxcdTAwM2VtYXAsIGluZm8tXFx1MDAzZWluZGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2OlxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5OlxcdC5tYXBfbG9va3VwX2VsZW1cXHQ9IHNvY2tfbWFwX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MTMuNDIyNTU3NjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNDk4NzA2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgZnVuY3Rpb25zLiBUaGV5J3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBUaGV5J3JlIGJlaW5nIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBzb2NrX21hcF9vcHNgIGFuZCBgc29ja19oYXNoX29wc2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gQnV0IHRoYXQgYHN0YXRpY2AgcXVhbGlmaWVyLi4uIGlmIHRoZSBjb21waWxlciBkZWNpZGVkIHRvIGlubGluZSB0aGVtLCBzeXprYWxsZXIsIG91ciBmdXp6ZXIsIG1pZ2h0IGhhdmUgdHJvdWJsZSByZXNvbHZpbmcgdGhlaXIgYWRkcmVzc2VzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29kZSB0YWtlcyB0aGVpciBhZGRyZXNzZXMsIGlubGluaW5nIGlzIHByb2JhYmx5IG5vdCBoYXBwZW5pbmcuIFN0aWxsLCBzeXprYWxsZXIgdGVuZHMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBmb3IgZWFzaWVyIGluc3RydW1lbnRhdGlvbi5cblxuU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGl2ZT8gQ2FuIHdlIGxldmVyYWdlIGEgbm9uLXN0YXRpYyB2ZXJzaW9uPyBBcmUgYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCB0aGVtc2VsdmVzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IEkgbmVlZCB0byB2ZXJpZnkuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBzb2NrX21hcF9vcHNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlIGNhbiBhdm9pZCB0aGVzZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDoyMS43NzI0MzI2OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODAyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMwPUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzItXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjIxLjgxNzI0MDYyMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY3MTEyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIHJlZmxlY3Rpb246XG5cbioqQ29udGVtcGxhdGluZyBTb2NrZXQgT3BlcmF0aW9uIFNjb3BlKipcblxuSG1tLCBzbyBgc29ja19tYXBfb3BzYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHVzYWdlIGNvbnRleHQsIHByb2JhYmx5IG5lZWRpbmcgYWNjZXNzIGFjcm9zcyBtb2R1bGVzIG9yIHdpdGhpbiBhIGNvbXBsZXggc29ja2V0IGltcGxlbWVudGF0aW9uLiBJdCBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSwgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGludGVudGlvbiBpcyBmb3IgaXQgdG8gYmUgYSBtb3JlIGdlbmVyYWxpemVkLCBwb3RlbnRpYWxseSBleHRlbnNpYmxlIGludGVyZmFjZS5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmcuLi53aGF0J3MgdGhlIHN0b3J5IHdpdGggYHNvY2tfaGFzaF9vcHNgPyBJcyAqdGhhdCogbm9uLXN0YXRpYyBhcyB3ZWxsPyBUaGUgaW1wbGljYXRpb25zIGFyZSBpbW1lZGlhdGVseSByZWxldmFudCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaXN0cmlidXRlZCBzeXN0ZW0gb3IgY29uY3VycmVuY3kuIFRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZm9ybWVyIGltcGxpZXMgdGhhdCB0aGVzZSBgb3BzYCBzdHJ1Y3R1cmVzIHByb2JhYmx5IHBsYXkgYSBwcmV0dHkgaW1wb3J0YW50IHBhcnQgaW4gdGhlIGNvcmUgbG9naWMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgZHluYW1pYyByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeT8gT3IsIGlzIGl0IHBlcmhhcHMgdXNlZCBieSB0aGluZ3Mgb3V0c2lkZSBvZiBpdHMgb3JpZ2luYXRpbmcgZmlsZT8gVGhpcyBsaW5lIG9mIHF1ZXN0aW9uaW5nIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZWxhdGVkIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbiBhbmQgaW52ZXN0aWdhdGUgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MjYuMTg0MzU1Njk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgwMzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX2hhc2hfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0xNDQ2PUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX2hhc2hfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3NodGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ0Nzpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NDgtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjI2LjIzMDE2NTQ1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ5NjY0OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBNYXAgT3BzIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGNvbnN0IHN0cnVjdCBicGZfbWFwX29wc2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGluIG15IGFuYWx5c2lzIG9mIGtleSBzeW1ib2xzLiBFdmVuIHRob3VnaCB0aGV5J3JlIHByb2JhYmx5IHN0YXRpYyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5J2xsIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLCBhbmQgSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSB2aXRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCBmb3IgYHNvY2tfbWFwLm9gLCBidXQgd2hhdCBhYm91dCBpdHMgZGVwZW5kZW5jaWVzPyBSaWdodCwgYENPTkZJR19ORVRgIGhhcyB0byBiZSBlbmFibGVkIHRvbywgaXQncyBhIHBhcmVudCBjb25maWcuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZS4gTGV0IG1lIGRpZyBpbnRvIGBuZXQvY29yZS9LY29uZmlnYCBhbmQgc2VlIGlmIGBzb2NrX21hcC5vYCBvciBgZmlsdGVyLm9gIGFyZSBtZW50aW9uZWQgYW55d2hlcmUgZWxzZS4gVGhhdCBzaG91bGQgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozMC43Nzk4MzQ1NTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTYwOTI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozMC44MjcwMDEwNzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4OTc3NzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byBjaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYDpcblxuKipDaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB3b3VsZCB0aGlzIGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD9cIiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5kYW1lbnRhbCBzeXN0ZW0tbGV2ZWwgZmVhdHVyZSwgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpa2UgdGhpcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhlIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgcmVsZXZhbnQgYGNvbmZpZ2AgYmxvY2suIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGRlZmluZWQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkIGZyb20gYW5vdGhlciBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQ7IGEgc2ltcGxlIGBjb25maWcgQlBGX1NZU0NBTExgIGFuZCBzb21lIGFzc29jaWF0ZWQgaGVscCB0ZXh0IGRlZmluaW5nIHdoYXQgdGhlIG9wdGlvbiBjb250cm9scy4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjMzLjgxNjc4MDk5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzEyMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjMzLjg2MzcxOTY3MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwOTM2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSByZWxpYWJsZSBvbmUgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgQlBGIG9wdGlvbnMgYXJlIHVzdWFsbHkgbG9jYXRlZCwgb3IgYXQgbGVhc3Qgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsaW5rcyB0byB0aGUgcmVsZXZhbnQgc3ViLWNvbmZpZ3VyYXRpb25zLiBJJ2xsIGxpa2VseSBjaGVjayBzaW1pbGFyIGZpbGVzIHRvbywganVzdCBpbiBjYXNlLCBidXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgc3VzcGVjdCBmb3IgZ2V0dGluZyBtZSBzdGFydGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdpbiBpZiBJJ20gbHVja3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MzcuMjg0NjU5NjE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxMDQ4MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozOC45NjU3MTU4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIxMDA0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEkga25vdyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFzc2Vzcy4gVGhlcmUgaXNuJ3QgbXVjaCBtb3JlIHRvIGl0IC0gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6NDIuMTg2NzIzNDI5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo0Mi4xODY4MTE0MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTI3NTQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIExvb2t1cCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgQlBGIGxvb2t1cCBmdW5jdGlvbnMsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEknbGwgYWxzbyByZXF1aXJlIGBORVRgIGR1ZSB0byBpdHMgaW5mbHVlbmNlIG9uIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5vdGljZWQgdGhhdCBgc29ja19tYXAuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkIGFuZCBgZmlsdGVyLmNgIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGltcGxpZXMgdGhhdCBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgIGFyZSBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246XG4qICAgYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYFxuKiAgIGBicGZfdGNfc2tfbG9va3VwX3RjcGAsIGBicGZfdGNfc2tfbG9va3VwX3VkcGBcbiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGBcbiogICBgc29ja19tYXBfbG9va3VwYCwgYHNvY2tfaGFzaF9sb29rdXBgXG5cbkFoYSEgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgc3RhdGljLCB3aGljaCBtYXkgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIGZ1enppbmcgdGhlbSB3aXRoIFN5emthbGxlciwgdW5sZXNzIHRoZXJlIGFyZSBub24tc3RhdGljIHdyYXBwZXJzLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgc29ja19tYXBfb3BzYCBhbmQgYHNvY2tfaGFzaF9vcHNgLCB0aGVzZSBhcmUgc3RydWN0cy4gUmlnaHQsIHNvIHRoZSBCUEYgbWFwIGxvb2t1cCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtYC4gVGhpcyBpbXBsaWVzIHRoYXQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgZ29pbmcgdG8gYmUgY2FsbGVkIGludGVybmFsbHkgdmlhIHRoYXQgbWVjaGFuaXNtLCB3aGljaCBpcyBwcm9taXNpbmcuIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gdGhlbSBpZiB0aGV5IGFyZSBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBicGZfc2tfbG9va3VwX3RjcGAgaXMgbm9uLXN0YXRpYyBhcyBJIHN1c3BlY3QuXG5JdCBsb29rcyBsaWtlIHRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZXhwYW5kcyB0byBhIG5vbi1zdGF0aWMgZGVjbGFyYXRpb246XG5gYGBjXG51NjQgYnBmX3NrX2xvb2t1cF90Y3AodTY0IHIxLCB1NjQgcjIsIHU2NCByMywgdTY0IHI0LCB1NjQgcjUpO1xuYGBgXG5ZZXMsIHRoaXMgaXMgbm9uLXN0YXRpYyEgRXhjZWxsZW50LlxuXG5Ob3cgSSBuZWVkIHRvIHJlcGVhdCB0aGF0IGNoZWNrIGZvciBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgIGFuZCBlbnN1cmUgdGhhdCBpdCB0b28gaXMgbm9uLXN0YXRpYywgYnV0IEknbSBjb25maWRlbnQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjUyLjczOTU2ODYwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MDg3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0NBTExfNVxcXFwoYnBmX3RjX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTktXFxubmV0L2NvcmUvZmlsdGVyLmM6NzMyMDpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMyMS1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo1Mi43ODkxODM1MDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjU2MTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAncyBWaXNpYmlsaXR5KipcblxuQWxyaWdodCwgdGhhdCBjb25maXJtYXRpb24gZmVlbHMgZ29vZC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGFib3V0IHNvbWV0aGluZy4gSXMgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAgZGVjbGFyZWQgd2l0aCB0aGUgYHN0YXRpY2Aga2V5d29yZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGxpbmthZ2UgYW5kIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgaXQgaW50cm9kdWNlcyBzb21lIGRlc2lnbiBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgY29uc2lkZXIgd2hlbiBmb3JtdWxhdGluZyBteSBuZXh0IHN0ZXBzLiBJZiBub3QsIHRoZW4gSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgZXhpc3RpbmcgaHlwb3RoZXNpcy4gQSBxdWljayBjaGVjayBvZiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgSSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkZXRhaWwgSSdtIHJlbHlpbmcgb24sIHNvIGl04oCZcyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGdldHRpbmcgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDI3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6NTcuNDUxNzQ3OTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5NjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ0FMTF81XFxcXChicGZfeGRwX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzQxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDI5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MzA6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQzMS1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo1Ny40OTk2NTAwMzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2Mzg1OTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgcmVmbGVjdGluZyBvbiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmaWNhdGlvbiBvZiBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCBOb24tU3RhdGljIFN0YXR1cyoqXG5cbkFscmlnaHQsIHRoYXQncyBjb3JyZWN0LCBjb25maXJtZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCBmdW5jdGlvbiBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB3aGF0ZXZlciBJJ20gd29ya2luZyBvbiB0byBwcm9wZXJseSBsaW5rIGFuZCBhY2Nlc3MgdGhlIGZ1bmN0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxsIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjAyLjU2MzUxMTc2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3OTE5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0NBTExfNVxcXFwoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTc0NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3NDc0OkJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDc1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjAyLjYxMjMxMDAwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk0MTkzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24qKlxuXG5ZZXMsIHRoYXQncyByaWdodCwgYWJzb2x1dGVseS5cblxuT2theSwgbm93IGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwgZm9yIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgc29ja19tYXBfbG9va3VwYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBrbm93IGl0J3MgcHJvYmFibHkgb2J2aW91cywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBjb21wb25lbnRzIGxpa2UgdGhpcy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAgdG8gYXZvaWQgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjcmVhdGUgcHJvYmxlbXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MDYuMTA2NTA1NjkzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczNDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgdm9pZCBcXFxcKnNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzc3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MDYuMTUzMjQ1ODAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDk3ODU5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgRnVuY3Rpb24gUG9pbnRlcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3Mgc3RhdGljLiBCdXQsIHdhaXQgYSBtaW51dGUsIGl0J3MgYWxzbyBiZWluZyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBhIHN0YXRpYyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGluIHRoaXMgd2F5LiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhbGxzIGl0PyBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cbkFoLCBJIHJlbWVtYmVyIHRoYXQgdGhlIEJQRiBtYXAgbG9va3VwLCB0aGUgc3lzY2FsbCwgdWx0aW1hdGVseSBjYWxscyBgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW1gLiBPa2F5LCB0aGF0J3MgdGhlIGNvbm5lY3Rpb24hIExldCBtZSBzZWUsIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGl0c2VsZiBmb3IgdGhpcyBpcyBgbWFwX2xvb2t1cF9lbGVtYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLlxuXG5SaWdodCwgc28gdG8gdHJhY2UgdGhpcywgSSBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agbm93LiBMZXQgbWUgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlcnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjEwLjY2MzAzNTYwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTQzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvb2t1cF9lbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTMwOD1zdGF0aWMgaW50IGJwZl9tYXBfY29weV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI3LVxcdH0gZWxzZSBpZiAoSVNfRkRfQVJSQVkobWFwKSB8fCBJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjg6XFx0XFx0ZXJyID0gYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbShtYXAsIGtleSwgdmFsdWUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyOS1cXHR9IGVsc2UgaWYgKElTX0ZEX0hBU0gobWFwKSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMzMDpcXHRcXHRlcnIgPSBicGZfZmRfaHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzEtXFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SRVVTRVBPUlRfU09DS0FSUkFZKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDEtXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MjpcXHRcXHRpZiAobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDM6XFx0XFx0XFx0cHRyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seShtYXAsIGtleSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ0LVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDU6XFx0XFx0XFx0cHRyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2LVxcdFxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc2MD1zdGF0aWMgdm9pZCAqX19fYnBmX2NvcHlfa2V5KGJwZnB0cl90IHVrZXksIHU2NCBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE3NzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTc3NDpzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzc1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyOTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMzNy1cXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0VMRU06XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMzODpcXHRcXHRlcnIgPSBtYXBfbG9va3VwX2VsZW0oXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMzktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjEwLjcxMzMzNTIxOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDI3NDcxNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc29ja19tYXAgTG9va3VwIFByb2Nlc3MgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBgc29ja19tYXBgIGxvb2t1cCB3b3Jrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQgYW5kIGhvdyBTeXprYWxsZXIgY291bGQgaW50ZXJhY3Qgd2l0aCBpdC4gSSBzZWUgdGhhdCBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHVzZXMgYG1hcF9sb29rdXBfZWxlbWAgd2hpY2ggdGhlbiBkaXNwYXRjaGVzIHRvIGVpdGhlciBgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHlgIG9yIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAuIEZvciBgc29ja19tYXBgLCB0aGUgYHN5c19vbmx5YCB2ZXJzaW9uIHRyYW5zbGF0ZXMgdG8gYHNvY2tfbWFwX2xvb2t1cF9zeXNgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgc29ja19tYXBfbG9va3VwX3N5c2AgaXMgKmFsc28qIHN0YXRpYz8gVGhhdCdzIG5vdCBpZGVhbCBmb3IgU3l6a2FsbGVyJ3Mgc3ltYm9sIHJlc29sdXRpb24sIGVzcGVjaWFsbHkgaWYgaXQgZ2V0cyBpbmxpbmVkLlxuXG5UaGUgcmVndWxhciBgc29ja19tYXBfbG9va3VwYCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBCUEYgaGVscGVycyBsaWtlIGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCwgYnV0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBjYWxscyBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAsIHNvIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5SaWdodCwgc28gYHNvY2tfbWFwX2xvb2t1cGAgaXMgKm9ubHkqIGNhbGxlZCB2aWEgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtYC4gVGhlIGlzc3VlIGlzLCBzaW5jZSBpdCdzIHN0YXRpYywgU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdHJvdWJsZSByZXNvbHZpbmcgaXQsIHBhcnRpY3VsYXJseSBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyB0byBpbmxpbmUgaXQuIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIHRha2luZyB0aGUgYWRkcmVzcyBvZiBgc29ja19tYXBfbG9va3VwYCwgaW5saW5pbmcgaXMgbGVzcyBsaWtlbHksIGJ1dCBzdGlsbCBhIGNvbmNlcm4uIEl0ICpjb3VsZCogd29yayBpZiB3ZSBleHBsaWNpdGx5IHByb3ZpZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wgdG8gU3l6a2FsbGVyLCBidXQgaXQncyBhbHdheXMgY2xlYW5lciBhbmQgbW9yZSByb2J1c3QgdG8gdXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHBvc3NpYmxlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB3ZSAqY2FuKiB1c2U/IGBzb2NrX21hcF9vcHNgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCdzIGEgc3RydWN0IGFuZCBub3QgYSBmdW5jdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGVpdGhlciBgc29ja19tYXBfbG9va3VwYCBvciBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAuIFRoaXMgd2lsbCBiZSBteSBuZXh0IGFyZWEgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjE4Ljc0MDgwOTMyNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zb2NrX21hcF9sb29rdXBfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzg4PXN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQwMD1zdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwNzpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00MDgtXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ3PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTU6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy02ODQtXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjM9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyODpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjE4Ljc4OTc2MzczMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgzOTcxMDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBMb29rdXAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgYSBwb2ludCBvZiBpbnRlcmVzdCwgYnV0IHRoZW4gSSByZW1lbWJlciwgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBtb2RpZnlpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgbm90IHRoZSBsb3dlci1sZXZlbCBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAgZnVuY3Rpb24uXG5cblJpZ2h0LCBJIHNlZSB0aGUgZGlmZiBub3cuIFRoZXkndmUgY2hhbmdlZCB0aGUgcmVmY291bnRpbmcgaW4gYHNvY2tfbWFwX2xvb2t1cGAuIEluc3RlYWQgb2YgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkncmUgdXNpbmcgYHNvY2tfaG9sZGAuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGludGVuZGVkIG1ldGhvZCBvZiBidW1waW5nIHRoZSByZWZlcmVuY2UgY291bnQuXG5cbkFoYSEgU28gdGhlIGNydWNpYWwgY2hhbmdlIGlzIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGlua2luZyBtb3JlIGFib3V0IGhvdyBCUEYgbWFwcyB3b3JrLCBJIHJlYWxpemUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSdyZSBjYWxsZWQgdmlhIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFBlcmZlY3QhIFRoYXQncyBteSB0YXJnZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIG15IGZvY3VzIGNhbiByZW1haW4gb24gdGhlc2UgdHdvIGZ1bmN0aW9uczsgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhleSdyZSB0aGUgb25lcyBJIG5lZWQgdG8gZXhhbWluZSBjbG9zZWx5LiBBbmQsIGJlY2F1c2Ugb2YgaG93IFN5emthbGxlciBhbmQga2NvdiB3b3JrLCB0aGUgY292ZXJhZ2Ugd2lsbCBzdGlsbCBiZSB0cmFja2VkIGZvciB0aGVtLCBldmVuIHdpdGggdGhlc2UgY2hhbmdlcyBkZWVwZXIgZG93biBpbiB0aGUgc3RhY2suIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBgc29ja19oYXNoX2xvb2t1cGAgdG9vLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjMxLjYyOTQ3NjY3N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NjczMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19oYXNoX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODgxOnNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiBoYXNoLCB2b2lkICprZXksXFxubmV0L2NvcmUvc29ja19tYXAuYy04ODItXFx0XFx0XFx0ICB1MzIga2V5X3NpemUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjg5NTpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19oYXNoX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTkwNS1cXHRidWNrZXQgPSBzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkwNjpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTkwNy1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE4PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkzMzpcXHRlbGVtX3Byb2JlID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBlbGVtLVxcdTAwM2VoYXNoLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBlbGVtLVxcdTAwM2VrZXksIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05NDM9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjk1NTpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Ni1cXHRpZiAoZWxlbSkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05OTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAyMzpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjQtXFx0aWYgKGVsZW0gXFx1MDAyNlxcdTAwMjYgZmxhZ3MgPT0gQlBGX05PRVhJU1QpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA1OD1zdGF0aWMgaW50IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDcwLVxcdGhlYWQgPSBcXHUwMDI2c29ja19oYXNoX3NlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCktXFx1MDAzZWhlYWQ7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDcxOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3Mi1cXHRpZiAoIWVsZW0pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDY9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExOTk6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjA1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIwNjpcXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDctXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTQ6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTctXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjE4OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxOS1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUzPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjE6XFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjYyLVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI4MT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjg5OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI5MC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NDpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX2hhc2hfbG9va3VwLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NTpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19oYXNoX2xvb2t1cF9zeXMsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDU2LVxcdC5tYXBfcmVsZWFzZV91cmVmXFx0PSBzb2NrX2hhc2hfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MzEuNjc4NDUwMjk1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDc4MTM3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBTb2NrZXQgTG9va3VwIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgc29ja19oYXNoX2xvb2t1cGAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgc29ja19oYXNoX29wc2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGxldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIHdoaWNoIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYC4gQWgsIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdGhhdC5cblxuU28gdGhlIGNvcmUgb2YgdGhlIG1hdHRlciwgd2hhdCBJICpyZWFsbHkqIG5lZWQgdG8gZm9jdXMgb24sIGFyZSB0aGUgQlBGIGhlbHBlcnMgdGhhdCB1dGlsaXplIGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAgZGlyZWN0bHkuIExldCdzIHNlZS4uLiB0aG9zZSB3b3VsZCBiZTpcblxuKiAgIGBicGZfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NrX2xvb2t1cF91ZHBgXG4qICAgYGJwZl90Y19za19sb29rdXBfdGNwYFxuKiAgIGBicGZfdGNfc2tfbG9va3VwX3VkcGBcbiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYFxuKiAgIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgXG4qICAgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYFxuKiAgIGBzb2NrX21hcF9sb29rdXBgXG4qICAgYHNvY2tfaGFzaF9sb29rdXBgXG5cbkknbGwgYWRkIHRob3NlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCByaWdodCBhd2F5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgY29uZmlybSB0aGUgbmFtZSBhZ2FpbiwgaXQgc2VlbXMgcmlnaHQsIEknbGwgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgICppcyogYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZS4uLiBZZXAsIGBCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCAuLi4pYCBjb25maXJtcyBpdC4gU28sIHRoYXQncyBkZWZpbmVkIGNvcnJlY3RseS4gRXhjZWxsZW50LCBsZXQncyBub3cgY2hlY2sgaWYgYGJwZl9za19sb29rdXBfdGNwYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6NDQuNzU2NTkwODYyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzMjkzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjQ0LjgwNDEzMDE3MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc5OTEyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGdvb2QgbmV3cyBpcywgaWYgaXQncyBub24tc3RhdGljLCBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byB0YXJnZXQgaXQgZm9yIGZ1enppbmcuIFRoYXQncyB0aGUga2V5IHBvaW50OiBTeXprYWxsZXLigJlzIGNhcGFiaWxpdGllcyBleHRlbmQgYmV5b25kIGp1c3QgZXhwbGljaXRseSBleHBvcnRlZCBzeW1ib2xzLlxuXG5TbywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHNvY2tfbWFwX2xvb2t1cGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQncyB0aGUgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IG9yIGlmIEkgbmVlZCB0byBkbyBzb21lIG1vcmUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NTo1My4zODQwNDYxNloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MTAxOTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NTo1My40MzE5NjU4NjhaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU4ODQ4NTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgU3RhbGxlZCBQcm9jZXNzKipcblxuQWxyaWdodCwgdGhpcyBmZWVsc+KApnN0dWNrLiBEZWFkIGluIHRoZSB3YXRlci4gRXZlcnl0aGluZ+KAmXMganVzdCAqc3RhdGljKi4gTm8gYXBwYXJlbnQgbW92ZW1lbnQsIG5vIG9idmlvdXMgcHJvZ3Jlc3MuIEJlZm9yZSBJIHN0YXJ0IHRlYXJpbmcgaW50byB0aGUga2VybmVsIHdpdGggc3RyYWNlIG9yIGdkYiwgSSdtIGdvaW5nIHRvIHRha2UgYSBzbGlnaHRseSBtb3JlIHN1cmdpY2FsIGFwcHJvYWNoLiBUaGUgcHJvYmxlbSBjb3VsZCBsaWUgaW4gYSBsb3Qgb2YgcGxhY2VzLCBidXQgZ2l2ZW4gdGhlIHN5bXB0b21zLCBteSBndXQgc2F5cyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gc29ja2V0IG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYHNvY2tfaGFzaF9sb29rdXBgIGlzIGFjY2Vzc2libGUgZnJvbSB3aGVyZSBJJ20gc3VzcGVjdGluZyB0aGUgcHJvY2VzcyBpcyBodW5nLiBJcyB0aGF0IHN5bWJvbCBleHBvcnRlZCBpbiB0aGUga2VybmVsIGltYWdlIGZvciB0aGlzIGJ1aWxkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBkaXJlY3RseSwgYmVjYXVzZSBpZiB0aGF0J3Mgbm90IGV4cG9zZWQsIG15IGRlYnVnZ2luZyBpcyBnb2luZyB0byB0YWtlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgKGFuZCBtb3JlIHBhaW5mdWwpIHRyYWNrLiBMZXQncyBzZWUgaWYgdGhhdCdzIGV4cG9zZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjowMy4wMjA0NTQ4OTVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDkxOTY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzb2NrX2hhc2hfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjAzLjA2Mzk1MjM3NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDc4NTU1ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkgbmVlZGVkIHRvIGluY2x1ZGUgc2V2ZXJhbCBCUEYgZnVuY3Rpb25zIChgYnBmX3NrX3JlZGlyZWN0X21hcGAsIGBicGZfbXNnX3JlZGlyZWN0X21hcGAsIGV0Yy4pIGJlY2F1c2UgdGhleSByZWxhdGUgdG8gbG9va3Vwcy4gSG93ZXZlciwgdGhvc2UgZnVuY3Rpb25zIHVsdGltYXRlbHkgY2FsbCBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAgYW5kIGBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbWAsIGJ1dCBJIHJlYWxpemUgbm93IHRoYXQgdGhvc2UgYXJlbid0ICpkaXJlY3RseSogd2hlcmUgdGhlIGNvZGUgd2FzIG1vZGlmaWVkLiBUaGUgYWN0dWFsIGNoYW5nZXMgYXJlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBTbywgSSdsbCByZXN0cmljdCBteSBmb2N1cyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIHJlc2lkZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGluIHRoZSBwcm92aWRlZCBwYXRjaC4gWWVzLCB0aGUgY2hhbmdlIGlzIGluZGVlZCB3aXRoaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIHNpbWlsYXJseSBpbiBgc29ja19oYXNoX2xvb2t1cGAuIEkgbmVlZCB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzb2NrX21hcF9sb29rdXBgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBzb2NrX21hcF9vcHNgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgaXMgdGllZCB0byBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQlBGIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBtYXAgbG9va3VwcyBvbiBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgdmVyeSBpbnRlcmVzdGluZy4gU3l6a2FsbGVyIGNhbiBlYXNpbHkgdGFyZ2V0IHRoaXMgYnkgY3JlYXRpbmcgYSBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBjYWxsaW5nIGBicGZfbWFwX2xvb2t1cF9lbGVtYCBmcm9tIGEgQlBGIHByb2dyYW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0gY2FsbCBwYXRoIHRob3VnaC4gYG1hcF9sb29rdXBfZWxlbWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBjYWxscyBgbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5YCBpZiB0aGF0IGlzIHNldCwgb3RoZXJ3aXNlIGNhbGxzIGBtYXBfbG9va3VwX2VsZW1gLiBGb3IgYHNvY2tfbWFwYCwgYG1hcF9sb29rdXBfZWxlbV9zeXNfb25seWAgaXMgc2V0IHRvIGBzb2NrX21hcF9sb29rdXBfc3lzYC4gVGh1cywgdGhlIHN5c2NhbGwgYGJwZihCUEZfTUFQX0xPT0tVUF9FTEVNKWAgd2lsbCBjYWxsIGBzb2NrX21hcF9sb29rdXBfc3lzYCwgbm90IGBzb2NrX21hcF9sb29rdXBgLiBIb3dldmVyLCB0aGUgaGVscGVyIGBicGZfbWFwX2xvb2t1cF9lbGVtYCB3aWxsIGNhbGwgYHNvY2tfbWFwX2xvb2t1cGAuIFRoZSB2ZXJpZmllciByZXBsYWNlcyB0aGUgaGVscGVyIGNhbGwgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAsIHdoaWNoIGlzIGBzb2NrX21hcF9sb29rdXBgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlICppcyogcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgKmZ1enphYmxlKiBmcm9tIEJQRiBwcm9ncmFtcy5cblxuT2theSwgdGhpcyBzZWVtcyBsaWtlIGEgY29uY3JldGUgYW5kIHRhcmdldGFibGUgYXJlYS4gSSBmZWVsIGNvbmZpZGVudCBpbiBhc3Nlc3NpbmcgaXQgYXMgYW4gaW1wb3J0YW50IHNwb3QgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjM4LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjoxNy44NDk1MTQ4NzdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgxOTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl90Y19za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfeGRwX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICAgIFwic29ja19oYXNoX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl90Y19za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfeGRwX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIGFuZCBCUEYgc29ja21hcC9zb2NraGFzaCBtYXAgbG9va3VwIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIHJlZmFjdG9yIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGFyZSByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIEJQRiBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MTcuOTI4MzQxNDk0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE3Mjk4NDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjE3LjkyODkyMjg0NFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzE3MjM5ODA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NzE4OTJhNzY5Y2NhNGM1NWVhYjY5NDk2NmEzZmU1MjNiZTYzMThmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAzNDIzNzM0MTI0YTViLi4wMzFmYjJhYWQ3OTJhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzE2Nyw2ICs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpcbiticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbitcbitcdC8qXG4rXHQgKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiBzay1cdTAwM2Vyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWxcbitcdCAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbitcdCAqL1xuK1x0aWYgKHNrMiAhPSBzaykge1xuK1x0XHRzb2NrX2dlbl9wdXQoc2spO1xuK1x0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovXG4rXHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbitcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHRzayA9IHNrMjtcbitcdH1cbitcbitcdHJldHVybiBzaztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzE3NiwyMiArNzE5OCw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRcdFx0XHQgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBzZGlmKTtcbiBcbi1cdGlmIChzaykge1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4tXG4tXHRcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXHUwMDNlcnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrXG4tXHRcdCAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbi1cdFx0ICovXG4tXHRcdGlmIChzazIgIT0gc2spIHtcbi1cdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuLVx0XHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAoc2spXG4rXHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzIyMiwyMiArNzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0zOTIsOCArMzkyLDggQEAgc3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG5AQCAtMTIxOCw4ICsxMjE4LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjoxNy45Mjg5MjM4MzRaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNzIzNjg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUmVmYWN0b3JpbmcgYW5kIFJlZmNvdW50IENoYW5nZSBpbiBTb2NrZXQgTG9va3VwKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gSW4gYGZpbHRlci5jYCwgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBjb2RlIHJlZmFjdG9yaW5nOyB0aGV5J3JlIGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgZnJvbSBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgLiBOb3RoaW5nIHRvIHNlZSB0aGVyZSByZWFsbHksIGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLlxuXG5Ob3csIGBzb2NrX21hcC5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBUaGV5J3JlIGNoYW5naW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhleSd2ZSBzd2FwcGVkIG91dCBgcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudClgIGZvciBgc29ja19ob2xkKHNrKWAuIFRoYXQncyBhIGRlZmluaXRlIHNoaWZ0LiBgc29ja19ob2xkYCB1bmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50cyB0aGUgcmVmY291bnQsIHdoZXJlYXMgdGhlIG9yaWdpbmFsIGNoZWNrIGVuc3VyZXMgdGhlIHJlZmNvdW50IGlzbid0IGFscmVhZHkgemVyby4gVGhpcyBzY3JlYW1zIHJlZmNvdW50LXJlbGF0ZWQgYnVnIGZpeCBvciBjaGFuZ2Ug4oCTIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG1pdGlnYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBLQVNBTi9yZWZjb3VudC1yZWxhdGVkLCBub3QgS01TQU4uXG5cbkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvbXB0J3MgY3JpdGVyaWE6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZXNzIHdpdGggYm91bmRzIGNoZWNrcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M/IE5vcGUsIG5vbmUgb2YgdGhvc2UgYXBwbHkgaGVyZS4gSXQncyBhIHJlZmFjdG9yaW5nIGFuZCBhIHJlZmNvdW50IGNoYW5nZS4gS01TQU4gaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIHRoaXMgaXNuJ3QuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBgc29ja19ob2xkYCBmdW5jdGlvbiByZWFsbHkgZG9lcyBpbmNyZW1lbnQgdGhlIHJlZmNvdW50IHVuY29uZGl0aW9uYWxseS4gWWVwLCBpdCdzIGp1c3QgYHJlZmNvdW50X2luYyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpYC4gSWYgdGhlIHJlZmNvdW50IHdhcyBwcmV2aW91c2x5IHplcm8sIHRoZW4gYHNvY2tfaG9sZGAgd2lsbCBpbmNyZW1lbnQgaXQgZnJvbSB6ZXJvIHRvIG9uZS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlLiBJdCBpcyBhYnNvbHV0ZWx5IEtBU0FOL3JlZmNvdW50IHRlcnJpdG9yeS5cblxuT2theSwgbGV0IG1lIHB1dCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uOlxuXG5UaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgY29kZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AsIHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIHJlbGF0ZSB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFsdGVyIGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd2lsbCBiZSBkZXRlY3RlZCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc2LCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjMxLjEwMTI5NjY0OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:50:44 +0000 UTC FinishedAt: 2026-08-13 13:56:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "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": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "750d4d17-edb6-4c25-8112-fb34cbccbc5f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_lookup_tcp", "bpf_sk_lookup_udp", "bpf_tc_sk_lookup_tcp", "bpf_tc_sk_lookup_udp", "bpf_xdp_sk_lookup_udp", "bpf_xdp_sk_lookup_tcp", "bpf_sock_addr_sk_lookup_tcp", "bpf_sock_addr_sk_lookup_udp", "sock_map_lookup", "sock_hash_lookup" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl90Y19za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl90Y19za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAgICYjMzQ7c29ja19oYXNoX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGxvZ2ljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYnkgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYnkgcmVwbGFjaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdpdGggYHNvY2tfaG9sZGAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODcxODkyYTc2OWNjYTRjNTVlYWI2OTQ5NjZhM2ZlNTIzYmU2MzE4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjUyOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MTY3LDYgJiM0Mzs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqXG4mIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXHUwMDNlcnNrX2xpc3RlbmVyLCBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsXG4mIzQzO1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzazIgIT0gc2spIHtcbiYjNDM7XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4mIzQzO1x0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4mIzQzO1x0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2sgPSBzazI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2s7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzE3NiwyMiAmIzQzOzcxOTgsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0XHRcdFx0ICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncyxcbiBcdFx0XHRcdFx0ICAgc2RpZik7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0aWYgKHNrKVxuJiM0MztcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjIyLDIyICYjNDM7NzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDllZmJkOGNhN2RiODMuLmNhNDliYzdmODY4N2MgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtMzkyLDggJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuQEAgLTEyMTgsOCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzE4OTJhNzY5Y2NhNGM1NWVhYjY5NDk2NmEzZmU1MjNiZTYzMThmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MTY3LDYgJiM0Mzs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlyZXR1cm4gc2s7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNvY2sgKgomIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLSZndDtyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwKJiM0MzsJICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrMiAhPSBzaykgewomIzQzOwkJc29ja19nZW5fcHV0KHNrKTsKJiM0MzsJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlzayA9IHNrMjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gc2s7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBzb2NrICoKIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCQlzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwKQEAgLTcxNzYsMjIgJiM0Mzs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJCQkJCSAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsCiAJCQkJCSAgIHNkaWYpOwogCi0JaWYgKHNrKSB7Ci0JCXN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTsKLQotCQkvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLSZndDtyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2sKLQkJICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgotCQkgKi8KLQkJaWYgKHNrMiAhPSBzaykgewotCQkJc29ja19nZW5fcHV0KHNrKTsKLQkJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqLwotCQkJaWYgKHVubGlrZWx5KHNrMiAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHsKLQkJCQlXQVJOX09OQ0UoMSwgJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0ISYjMzQ7KTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrID0gc2syOwotCQl9Ci0JfQomIzQzOwlpZiAoc2spCiYjNDM7CQlzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7CiAKIAlyZXR1cm4gc2s7CiB9CkBAIC03MjIyLDIyICYjNDM7NzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlzdHJ1Y3Qgc29jayAqc2sgPSBicGZfc2tjX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIHByb3RvLCBuZXRuc19pZCwKIAkJCQkJIGZsYWdzKTsKIAotCWlmIChzaykgewotCQlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7Ci0KLQkJLyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS0mZ3Q7cnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrCi0JCSAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KLQkJICovCi0JCWlmIChzazIgIT0gc2spIHsKLQkJCXNvY2tfZ2VuX3B1dChzayk7Ci0JCQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi8KLQkJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7Ci0JCQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlzayA9IHNrMjsKLQkJfQotCX0KJiM0MzsJaWYgKHNrKQomIzQzOwkJc2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spOwogCiAJcmV0dXJuIHNrOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC0zOTIsOCAmIzQzOzM5Miw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTsKIAlpZiAoIXNrKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIApAQCAtMTIxOCw4ICYjNDM7MTIxOCw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX2hhc2hfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAoIXNrKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEluIGBmaWx0ZXIuY2AsIGEgbmV3IGhlbHBlciwgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGhhcyBiZWVuIGFkZGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgbG9va3VwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEdvb2QgdG8gc2VlIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHRoaW5ncyB1cC4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGNoYW5nZSBpbiBgc29ja19tYXAuY2AuIFRoZXkmIzM5O3ZlIGFsdGVyZWQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgcmVmY291bnQgY2hlY2suIEluc3RlYWQgb2YgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkmIzM5O3JlIG5vdyB1c2luZyBgc29ja19ob2xkYCB3aXRoaW4gYSBwcm90ZWN0ZWQgc2NvcGUuIFNvLCBlc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgYXNzdW1pbmcgdGhlIHNvY2tldCBpcyBhbHJlYWR5IHByb3RlY3RlZCwgcHJvYmFibHkgYnkgUkNVIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIGBzb2NrX2hvbGRgIGlzIGZvciBtYWludGFpbmluZyBhIGhvbGQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IHNvdW5kLCAqaWYqIHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZXhpc3RpbmcgcHJvdGVjdGlvbiBhcmUgY29ycmVjdC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV2ZW4gcmVhY2hhYmxlLiBXYWl0LCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSAqZGVmaW5pdGVseSogdXNlZCBhcyBCUEYgbWFwIGxvb2t1cCBmdW5jdGlvbnMgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiBZdXAsIHRob3NlIGFyZSByZWFjaGFibGUgYW5kIGZ1enplYWJsZSwgbm8gcXVlc3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIGBzb2NrX21hcC5jYC4gTGV0IG1lIHF1aWNrbHkgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLi4uIE9rYXksIGl0IGxvb2tzIGxpa2UgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBTbywgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSByZXF1aXJlbWVudC4gRWFzeSBlbm91Z2ggdG8gY2hlY2suCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgYGZpbHRlci5jYC4gU2FtZSBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGRlcGVuZGVuY3kgaXMgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpbHRlci5vYCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcHBsaWVzIHRoZXJlIHRvby4gSG1tLCB3YWl0LiBPciBtYXliZSB0aGUgZnVsbCBgbmV0YCBjb25maWcgaXMgbmVlZGVkIGZvciB0aGUgY29tcGlsZS4uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc2FtZSBgTWFrZWZpbGVgIGFnYWluIHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gc2ttc2cub1xubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBkZXBlbmRlbmNpZXMgb2YgYHNvY2tfbWFwLm9gLiBOb3csIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBmaWx0ZXIub2AuLi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhpcyBpcyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGZpbHRlci5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoYXQgYW5kIHRoZSBCUEYgc29ja2V0IGxvb2t1cCBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCByaWdodCwgYGJwZl9za19sb29rdXBgIGlzIGEgQlBGIGhlbHBlciwgdGhhdCYjMzk7cyBrZXkuIE5vdywgd2hlcmUgZG8gdGhlIG1hcCBvcGVyYXRpb25zIGZpdCBpbj8gSSBrbm93IGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgYXJlIHRoZSBtYXAgb3BlcmF0aW9ucyBoZXJlLgoKU28sIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwYCwgYW5kIGBfX2JwZl9za19sb29rdXBgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzIGJlY2F1c2UgaXQgaXMgc3RhdGljLiBJdCYjMzk7cyBsaWtlbHkgaW5saW5lZCBvciBtaWdodCBub3QgZXZlbiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWVhbnMgaXQgbWlnaHQgbm90IHNob3cgdXAgZGlyZWN0bHkuCgpIb3dldmVyLCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCB0aG9zZSBhcmUgYWxzbyBzdGF0aWMsIGJ1dCB0aGV5IGFyZSAqdXNlZCogYXMgZnVuY3Rpb24gcG9pbnRlcnMgaW4gYGJwZl9tYXBfb3BzYC4gVGhhdCBtZWFucyB0aGV5IHdpbGwgbm90IGJlIGlubGluZWQgYW5kICpkbyogaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgYXJlIHN0YXRpYyBhbmQgSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCUEYgTWFwIExvb2t1cHMgYW5kIFNvY2tldCBMb29rdXBzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEJQRiBtYXBzIGFuZCBzb2NrZXQgbG9va3Vwcy4gSSBzZWUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGBicGZfbWFwX29wc2Agc3RydWN0LiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoZWlyIGZ1bmN0aW9uLiBUaGV5JiMzOTtyZSBwYXJ0IG9mIGEgZGVmaW5lZCBzZXQgb2Ygb3BlcmF0aW9ucy4KCk5vdywgSSYjMzk7bSBzaGlmdGluZyBmb2N1cyB0byB0aG9zZSBCUEYgc29ja2V0IGxvb2t1cCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgYnBmX3NrX2xvb2t1cGAgYW5kIGBfX2JwZl9za19sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MTcwPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9maWx0ZXIuYy03MTcyLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTkyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTkzOl9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5NC1cdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMS1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDI6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDMtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzIyNj1zdGF0aWMgc3RydWN0IHNvY2sgKlxubmV0L2NvcmUvZmlsdGVyLmM6NzIyNzpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MjI4LVx0ICAgICAgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzMtXHRpZiAoc2spXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM0Olx0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG5uZXQvY29yZS9maWx0ZXIuYy03MjM1LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI1Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNTg6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI1OS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Mi1cdFx0XHRcdFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjY6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Ny1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI3NzpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzkte1xubmV0L2NvcmUvZmlsdGVyLmM6NzI4MDpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXG5uZXQvY29yZS9maWx0ZXIuYy03MjgxLVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjgzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI4NTpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjg2LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTczMjA9QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMjYtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzI3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03MzI4LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzM0ND1CUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM1MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjczNTE6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTItXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzgyPUJQRl9DQUxMXzUoYnBmX3hkcF9za19sb29rdXBfdWRwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczODgtXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzg5Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5MC1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc0MzA9QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQzNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0Mzc6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03NDM4LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzQ3ND1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo3NDc3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3OC1cdFx0XHRcdFx0ICAgICAgc29ja19uZXQoY3R4LVx1MDAzZXNrKSwgMCwgSVBQUk9UT19UQ1AsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzQ5Mz1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5NS17XG5uZXQvY29yZS9maWx0ZXIuYzo3NDk2Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5Ny1cdFx0XHRcdFx0ICAgICAgc29ja19uZXQoY3R4LVx1MDAzZXNrKSwgMCwgSVBQUk9UT19VRFAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ5Nj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTI0LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODUyNTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUyNi1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjgtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzOT1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODY1LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODg2NjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODg2Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg4Njg6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjktXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4OTU9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTctXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5ODpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTk6RVhQT1JUX1NZTUJPTChicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMTpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTAyLVx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjktXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzE6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzItXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE5NDA9c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDUtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ2Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk1ND1zdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU4LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTU5Olx0aWYgKG9mZiBcdTAwM2MgMCB8fCBvZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGJwZl9za19sb29rdXApKVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cdHN3aXRjaCAob2ZmKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk2NzpcdGNhc2UgYnBmX2N0eF9yYW5nZV9wdHIoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RPX1NPQ0tFVF9PUl9OVUxMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcHJvdG9jb2wpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzM6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzQ6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc2Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc3Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc4Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzktXHRcdGJwZl9jdHhfcmVjb3JkX2ZpZWxkX3NpemUoaW5mbywgc2l6ZW9mKF9fdTMyKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4MjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODMtXHRcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4OTpcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KSAuLi5cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTkwOlx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MS1cdFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDAwPXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDA4LVx0c3dpdGNoIChzaS1cdTAwM2VvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDA5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDExOlx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTUtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTY6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTctXHRcdFx0XHRcdFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyMDpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDIxLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDIyOlx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDIzLVx0XHRcdFx0XHRcdCAgICAgcHJvdG9jb2wsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyNjpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjctXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjg6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjktXHRcdFx0XHRcdFx0ICAgICB2NC5zYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDMyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMzLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDM0Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDM1LVx0XHRcdFx0XHRcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzctXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzODpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzktXHRcdFx0XHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDM6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NC1cdFx0b2ZmICYjNDM7PSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwNDUtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDQ2Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDQ3LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cdTAwM2Vkc3RfcmVnLCAwLCAxKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1My1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU0Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA1NS1cdFx0XHRcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDU4LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNTk6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYwLVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA2MS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNjI6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwNjMtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDY5LVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzA6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3MS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA3MjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3My1cdFx0XHRcdFx0XHQgICAgIHNwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzY6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3Ny1cdFx0KnRhcmdldF9zaXplID0gMjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDgxOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4Mi1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA4MzpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4NC1cdFx0XHRcdFx0XHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDg2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODc6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODk6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwOTAtXHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU0sgTG9va3VwIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBgYnBmX3NrX2xvb2t1cGAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9za19sb29rdXBgIGl0c2VsZiBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGJlaW5nIGNhbGxlZCBieSBgYnBmX3NrX2xvb2t1cF90Y3BgIGFuZCBgYnBmX3NrX2xvb2t1cF91ZHBgLCB3aGljaCBhcmUgcHJlc2VudGVkIGFzIEJQRiBoZWxwZXJzLiBTaW1pbGFybHksIGBfX2JwZl9za19sb29rdXBgIGlzIGFsc28gc3RhdGljLCBidXQgZ2V0cyB1dGlsaXplZCBieSBhIHdpZGVyIHNldCBvZiBmdW5jdGlvbnMgbGlrZSBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBhbmQgdGhlIFhEUCBhbmQgYHNvY2tfYWRkcmAgdmFyaWFudHMuCgpTbywgaW4gdGVybXMgb2YgdGhpbmdzIHRvIGNoZWNrLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYW5kIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLiBJJiMzOTttIGFsc28gYWRkaW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEFsdGhvdWdoLCB3YWl0Li4uIHRob3NlIGxhc3QgdHdvIGFyZSBzdGF0aWMgYnV0IHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIG9rYXkuCgpOb3csIGxvb2tpbmcgY2xvc2VyIGF0IGhvdyB0aGVzZSBhcmUgZGVmaW5lZCwgSSBzZWUgYEJQRl9DQUxMXzUoLi4uKWAgYmVpbmcgdXNlZC4gVGhhdCBtYWNybyBleHBhbmRzIHRvIHRoaW5ncyBsaWtlIGBicGZfc2tfbG9va3VwX3RjcGAgb3IgdGhlIGRvdWJsZS11bmRlcnNjb3JlIHZhcmlhbnRzLCBsaWtlIGBfX19fYnBmX3NrX2xvb2t1cF90Y3BgLiBSaWdodCwgc28gaXQgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBidXQgYEJQRl9DQUxMXzVgIGFjdHVhbGx5IGRlZmluZXMgYm90aCwgcmlnaHQ/IExldCYjMzk7cyBqdXN0IGF2b2lkIHRoZSBkb3VibGUgdW5kZXJzY29yZSBhbmQgZm9jdXMgb24gdGhlIHNpbXBsZXIgbmFtZXMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYC4KCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSAmIzM5O3ByaW1hcnkmIzM5OyBmdW5jdGlvbnMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYXJlIGV4cG9ydGVkIG9yIG1hcmtlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kIHRoZWlyIGJyb2FkZXIgYXZhaWxhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3NrX2xvb2t1cF90Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz03MjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTctXG5uZXQvY29yZS9maWx0ZXIuYzo3MjU4OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTktXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBCUEZfQ0FMTF81YCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaGVuIEkgc2VlIGBCUEZfQ0FMTF81YCwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgZnVuY3Rpb24gY2FsbCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEJ1dCBpcyBpdCBjcmVhdGluZyBhIGZ1bmN0aW9uIG9yIGNhbGxpbmcgb25lPyBHaXZlbiB0aGUgbmFtaW5nLCBteSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyAqY3JlYXRpbmcqIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IHNldHRpbmcgdXAgdGhlIG1lYW5zIGZvciBvbmUuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzVgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoaXMgbWFjcm8gKG9yIGZ1bmN0aW9uLCBJJiMzOTtsbCBmaW5kIG91dCkgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBhcmd1bWVudHMgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkJQRiBIZWFkZXIgSHVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwtbGV2ZWwgZGVmaW5pdGlvbnMuIFdoZXJlIGFyZSB0aGV5IGxpa2VseSBoaWRpbmc/IE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3Rvcmllcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgaGlzdG9yaWNhbCBjb250ZXh0IG9mIHRoZSBCZXJrZWxleSBQYWNrZXQgRmlsdGVyLiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3RydWN0dXJlcyBmb3IgZmlsdGVyaW5nIG1pZ2h0IHJlc2lkZS4gSWYgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSB5aWVsZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIG15IG5leHQgbW92ZSBpcyB0byBnbyBkZWVwZXIgd2l0aCBgaW5jbHVkZS9saW51eC9icGYuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbW9yZSBtb2Rlcm4gYW5kIGV4cGFuZGVkIEJQRi1zcGVjaWZpYyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZSBpbnN0cnVjdGlvbiBzZXQsIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgbGlrZWx5IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgbG9naWNhbCBwYXRoIOKAkyBgZmlsdGVyLmhgIGZvciB0aGUgaGlzdG9yaWNhbCBncm91bmRpbmcsIHRoZW4gYGJwZi5oYCBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC04NS0vKiB1bnVzZWQgb3Bjb2RlIHRvIG1hcmsgY2FsbCB0byBpbnRlcnByZXRlciB3aXRoIGFyZ3VtZW50cyAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo4NjojZGVmaW5lIEJQRl9DQUxMX0FSR1NcdDB4ZTBcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MTItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUxMzojZGVmaW5lIEJQRl9DQUxMX1JFTChUR1QpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUxNC1cdCgoc3RydWN0IGJwZl9pbnNuKSB7XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MjItXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUyMzojZGVmaW5lIEJQRl9DQUxMX0lNTSh4KVx0KCh2b2lkICopKHgpIC0gKHZvaWQgKilfX2JwZl9jYWxsX2Jhc2UpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUzNC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NTM1OiNkZWZpbmUgQlBGX0NBTExfS0ZVTkMoT0ZGLCBJTU0pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MzYtXHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY3OC0jZGVmaW5lIF9fTk9BVFRSXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY3OTojZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MDojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MjojZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MzojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4NDojZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQ2FsbCBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byBpdHMgZGVmaW5pdGlvbi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3Mg4oCTIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBleHBhbmRlZCwgd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLCBhbmQgaG93IGl0IHRyYW5zbGF0ZXMgaW50byB0aGUgQlBGIGluc3RydWN0aW9uIHNldC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgY2FsbCB0aGlzIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSXMgdGhlcmUgYSBoZWxwZXIgZnVuY3Rpb24gbG9va3VwIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdGFjayBmcmFtZSBhZGp1c3RtZW50cz8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBhbmQgdW5kZXJzdGFuZCB0aGUgQUJJLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMX3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9NDI0PXN0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmaWx0ZXIuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgTGludXgga2VybmVsJiMzOTtzIGZpbHRlcmluZyBmcmFtZXdvcmssIGFuZCBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHNvbWUgY3J1Y2lhbCBzdHVmZiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gU3BlY2lmaWNhbGx5LCBJIGhhdmUgYSBmZWVsaW5nIHRoZSBkZXRhaWxzIEkmIzM5O20gYWZ0ZXIgYXJlIGFyb3VuZCBsaW5lIDY2Niwgc28gSSYjMzk7bGwganVtcCByaWdodCB0byB0aGF0IGFyZWEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmaWx0ZXJpbmcsIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmtpbmcgb3Igc2VjdXJpdHkuIExldCYjMzk7cyBzZWUgd2hhdCBnb29kaWVzIGFyZSB3YWl0aW5nIGZvciBtZSB0aGVyZSEgSSBhbnRpY2lwYXRlIHNlZWluZyBlaXRoZXIgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBlbnVtZXJhdGlvbnMsIG9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZmlsdGVyaW5nIHJ1bGVzLCBwYWNrZXQgaW5zcGVjdGlvbiwgb3IgcGVyaGFwcyBldmVuIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaW50ZWdyYXRpb24uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcbiA2NjE6XHRcbiA2NjI6XHQjZGVmaW5lIF9fQlBGX1BBRChuKVx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjYzOlx0XHRfX0JQRl9NQVAobiwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9OLCB1NjQsIF9fdXJfMSwgdTY0LCBfX3VyXzIsICAgICAgIFxcXG4gNjY0Olx0XHRcdCAgdTY0LCBfX3VyXzMsIHU2NCwgX191cl80LCB1NjQsIF9fdXJfNSlcbiA2NjU6XHRcbiA2NjY6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njc6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Njg6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2Njk6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2NzA6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2NzE6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2NzI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjczOlx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2NzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc1Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjc2Olx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjc3Olx0XG4gNjc4Olx0I2RlZmluZSBfX05PQVRUUlxuIDY3OTpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIC4uLilgIGlzIGRlZmluaW5nIGJvdGggdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gYGJwZl9za19sb29rdXBfdGNwKC4uLilgIGFuZCBhbiBpbnRlcm5hbCBgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgX19fX2JwZl9za19sb29rdXBfdGNwKC4uLilgIGhlbHBlci4gVGhpcyBtZWFucyBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIGxpa2VseSB0aGUgcHJpbWFyeSBzeW1ib2wgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gZm9yIGFuYWx5c2lzIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQuCgpUaGF0IHBhdHRlcm4sIG5hdHVyYWxseSwgZXh0ZW5kcyB0byB0aGUgb3RoZXIgcmVsYXRlZCBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBhbmQgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAuIFRoZXkmIzM5O2xsIGFsbCBmb2xsb3cgdGhlIHNhbWUgc3RydWN0dXJlLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGNoZWNrIGhvdyB0aGVzZSBsb29rdXAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBtYXBzLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpdGhpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgaW50ZXJuYWwgd29ya2luZ3MgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gVGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBCdXQgdGhhdCBgc3RhdGljYCBxdWFsaWZpZXIuLi4gaWYgdGhlIGNvbXBpbGVyIGRlY2lkZWQgdG8gaW5saW5lIHRoZW0sIHN5emthbGxlciwgb3VyIGZ1enplciwgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyB0aGVpciBhZGRyZXNzZXMuIEhvd2V2ZXIsIHNpbmNlIHRoZSBjb2RlIHRha2VzIHRoZWlyIGFkZHJlc3NlcywgaW5saW5pbmcgaXMgcHJvYmFibHkgbm90IGhhcHBlbmluZy4gU3RpbGwsIHN5emthbGxlciB0ZW5kcyB0byBwcmVmZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGZvciBlYXNpZXIgaW5zdHJ1bWVudGF0aW9uLgoKU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGl2ZT8gQ2FuIHdlIGxldmVyYWdlIGEgbm9uLXN0YXRpYyB2ZXJzaW9uPyBBcmUgYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCB0aGVtc2VsdmVzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IEkgbmVlZCB0byB2ZXJpZnkuIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyBgc29ja19tYXBfb3BzYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB3ZSBjYW4gYXZvaWQgdGhlc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTgzMD1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMi1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIHJlZmxlY3Rpb246CgoqKkNvbnRlbXBsYXRpbmcgU29ja2V0IE9wZXJhdGlvbiBTY29wZSoqCgpIbW0sIHNvIGBzb2NrX21hcF9vcHNgIGlzIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHVzYWdlIGNvbnRleHQsIHByb2JhYmx5IG5lZWRpbmcgYWNjZXNzIGFjcm9zcyBtb2R1bGVzIG9yIHdpdGhpbiBhIGNvbXBsZXggc29ja2V0IGltcGxlbWVudGF0aW9uLiBJdCBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSwgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGludGVudGlvbiBpcyBmb3IgaXQgdG8gYmUgYSBtb3JlIGdlbmVyYWxpemVkLCBwb3RlbnRpYWxseSBleHRlbnNpYmxlIGludGVyZmFjZS4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4ud2hhdCYjMzk7cyB0aGUgc3Rvcnkgd2l0aCBgc29ja19oYXNoX29wc2A/IElzICp0aGF0KiBub24tc3RhdGljIGFzIHdlbGw/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXN0cmlidXRlZCBzeXN0ZW0gb3IgY29uY3VycmVuY3kuIFRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZm9ybWVyIGltcGxpZXMgdGhhdCB0aGVzZSBgb3BzYCBzdHJ1Y3R1cmVzIHByb2JhYmx5IHBsYXkgYSBwcmV0dHkgaW1wb3J0YW50IHBhcnQgaW4gdGhlIGNvcmUgbG9naWMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgZHluYW1pYyByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeT8gT3IsIGlzIGl0IHBlcmhhcHMgdXNlZCBieSB0aGluZ3Mgb3V0c2lkZSBvZiBpdHMgb3JpZ2luYXRpbmcgZmlsZT8gVGhpcyBsaW5lIG9mIHF1ZXN0aW9uaW5nIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZWxhdGVkIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbiBhbmQgaW52ZXN0aWdhdGUgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfaGFzaF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nj1CVEZfSURfTElTVF9TSU5HTEUoc29ja19oYXNoX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zaHRhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ0Nzpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0OC1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIE1hcCBPcHMgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgSSBuZWVkIHRvIGluY2x1ZGUgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBpbiBteSBhbmFseXNpcyBvZiBrZXkgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgcHJvYmFibHkgc3RhdGljIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5JiMzOTtsbCBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlcywgYW5kIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSB2aXRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCBmb3IgYHNvY2tfbWFwLm9gLCBidXQgd2hhdCBhYm91dCBpdHMgZGVwZW5kZW5jaWVzPyBSaWdodCwgYENPTkZJR19ORVRgIGhhcyB0byBiZSBlbmFibGVkIHRvbywgaXQmIzM5O3MgYSBwYXJlbnQgY29uZmlnLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZS4gTGV0IG1lIGRpZyBpbnRvIGBuZXQvY29yZS9LY29uZmlnYCBhbmQgc2VlIGlmIGBzb2NrX21hcC5vYCBvciBgZmlsdGVyLm9gIGFyZSBtZW50aW9uZWQgYW55d2hlcmUgZWxzZS4gVGhhdCBzaG91bGQgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBpbml0L0tjb25maWdgIGZvciBgQlBGX1NZU0NBTExgOgoKKipDaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgd291bGQgdGhpcyBjb25maWd1cmF0aW9uIGJlIGRlZmluZWQ/JiMzNDsgR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN5c3RlbS1sZXZlbCBmZWF0dXJlLCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpa2UgdGhpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhlIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgcmVsZXZhbnQgYGNvbmZpZ2AgYmxvY2suIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGRlZmluZWQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkIGZyb20gYW5vdGhlciBLY29uZmlnIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIGl0IHRvIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkOyBhIHNpbXBsZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBhbmQgc29tZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBkZWZpbmluZyB3aGF0IHRoZSBvcHRpb24gY29udHJvbHMuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgcGFydGljdWxhciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9uIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgcmVsaWFibGUgb25lIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIEJQRiBvcHRpb25zIGFyZSB1c3VhbGx5IGxvY2F0ZWQsIG9yIGF0IGxlYXN0IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxpbmtzIHRvIHRoZSByZWxldmFudCBzdWItY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBjaGVjayBzaW1pbGFyIGZpbGVzIHRvbywganVzdCBpbiBjYXNlLCBidXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgc3VzcGVjdCBmb3IgZ2V0dGluZyBtZSBzdGFydGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdpbiBpZiBJJiMzOTttIGx1Y2t5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9TWVNDQUxMYC4gTXkgZmlyc3QgbW92ZSBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYXNzZXNzLiBUaGVyZSBpc24mIzM5O3QgbXVjaCBtb3JlIHRvIGl0IC0gdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgTG9va3VwIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIEJQRiBsb29rdXAgZnVuY3Rpb25zLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEkmIzM5O2xsIGFsc28gcmVxdWlyZSBgTkVUYCBkdWUgdG8gaXRzIGluZmx1ZW5jZSBvbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFNwZWNpZmljYWxseSwgSSBub3RpY2VkIHRoYXQgYHNvY2tfbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCBhbmQgYGZpbHRlci5jYCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHRoYXQgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCBhcmUgbmVjZXNzYXJ5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246CiogICBgYnBmX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAKKiAgIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYAoqICAgYHNvY2tfbWFwX2xvb2t1cGAsIGBzb2NrX2hhc2hfbG9va3VwYAoKQWhhISBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdGF0aWMsIHdoaWNoIG1heSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggZnV6emluZyB0aGVtIHdpdGggU3l6a2FsbGVyLCB1bmxlc3MgdGhlcmUgYXJlIG5vbi1zdGF0aWMgd3JhcHBlcnMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgc29ja19tYXBfb3BzYCBhbmQgYHNvY2tfaGFzaF9vcHNgLCB0aGVzZSBhcmUgc3RydWN0cy4gUmlnaHQsIHNvIHRoZSBCUEYgbWFwIGxvb2t1cCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYG1hcC0mZ3Q7b3BzLSZndDttYXBfbG9va3VwX2VsZW1gLiBUaGlzIGltcGxpZXMgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBnb2luZyB0byBiZSBjYWxsZWQgaW50ZXJuYWxseSB2aWEgdGhhdCBtZWNoYW5pc20sIHdoaWNoIGlzIHByb21pc2luZy4gU3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0byB0aGVtIGlmIHRoZXkgYXJlIGluIHRoZSBsaXN0LgoKT2theSwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIG5vbi1zdGF0aWMgYXMgSSBzdXNwZWN0LgpJdCBsb29rcyBsaWtlIHRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZXhwYW5kcyB0byBhIG5vbi1zdGF0aWMgZGVjbGFyYXRpb246CmBgYGMKdTY0IGJwZl9za19sb29rdXBfdGNwKHU2NCByMSwgdTY0IHIyLCB1NjQgcjMsIHU2NCByNCwgdTY0IHI1KTsKYGBgClllcywgdGhpcyBpcyBub24tc3RhdGljISBFeGNlbGxlbnQuCgpOb3cgSSBuZWVkIHRvIHJlcGVhdCB0aGF0IGNoZWNrIGZvciBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgIGFuZCBlbnN1cmUgdGhhdCBpdCB0b28gaXMgbm9uLXN0YXRpYywgYnV0IEkmIzM5O20gY29uZmlkZW50IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NBTExfNVxcKGJwZl90Y19za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzE5LVxubmV0L2NvcmUvZmlsdGVyLmM6NzMyMDpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MzIxLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAmIzM5O3MgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBmZWVscyBnb29kLiBOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgc29tZXRoaW5nLiBJcyBgYnBmX3hkcF9za19sb29rdXBfdGNwYCBkZWNsYXJlZCB3aXRoIHRoZSBgc3RhdGljYCBrZXl3b3JkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGxpbmthZ2UgYW5kIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgaXQgaW50cm9kdWNlcyBzb21lIGRlc2lnbiBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgY29uc2lkZXIgd2hlbiBmb3JtdWxhdGluZyBteSBuZXh0IHN0ZXBzLiBJZiBub3QsIHRoZW4gSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgZXhpc3RpbmcgaHlwb3RoZXNpcy4gQSBxdWljayBjaGVjayBvZiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgSSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkZXRhaWwgSSYjMzk7bSByZWx5aW5nIG9uLCBzbyBpdOKAmXMgc29tZXRoaW5nIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBnZXR0aW5nIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzQxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQyOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0MzA6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03NDMxLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIHJlZmxlY3Rpbmcgb24gdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZpY2F0aW9uIG9mIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgIE5vbi1TdGF0aWMgU3RhdHVzKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgIGZ1bmN0aW9uIGlzICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbiB0byBwcm9wZXJseSBsaW5rIGFuZCBhY2Nlc3MgdGhlIGZ1bmN0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQ0FMTF81XFwoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3My1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0NzQ6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3NS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBGdW5jdGlvbioqCgpZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIGFic29sdXRlbHkuCgpPa2F5LCBub3cgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwgZm9yIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNvY2tfbWFwX2xvb2t1cGAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBvYnZpb3VzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBjb21wb25lbnRzIGxpa2UgdGhpcy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAgdG8gYXZvaWQgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjcmVhdGUgcHJvYmxlbXMgbGF0ZXIgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB2b2lkIFxcKnNvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNzc9c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDAwOnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN0YXRpYyBGdW5jdGlvbiBQb2ludGVyKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHN0YXRpYy4gQnV0LCB3YWl0IGEgbWludXRlLCBpdCYjMzk7cyBhbHNvIGJlaW5nIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGEgc3RhdGljIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXM6IElzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgaXQ/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4KCkFoLCBJIHJlbWVtYmVyIHRoYXQgdGhlIEJQRiBtYXAgbG9va3VwLCB0aGUgc3lzY2FsbCwgdWx0aW1hdGVseSBjYWxscyBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24hIExldCBtZSBzZWUsIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGl0c2VsZiBmb3IgdGhpcyBpcyBgbWFwX2xvb2t1cF9lbGVtYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLgoKUmlnaHQsIHNvIHRvIHRyYWNlIHRoaXMsIEkgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG5vdy4gTGV0IG1lIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI3LVx0fSBlbHNlIGlmIChJU19GRF9BUlJBWShtYXApIHx8IElTX0ZEX1BST0dfQVJSQVkobWFwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI4Olx0XHRlcnIgPSBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5LCB2YWx1ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjktXHR9IGVsc2UgaWYgKElTX0ZEX0hBU0gobWFwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzMwOlx0XHRlcnIgPSBicGZfZmRfaHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMzMS1cdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SRVVTRVBPUlRfU09DS0FSUkFZKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQxLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDI6XHRcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MzpcdFx0XHRwdHIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seShtYXAsIGtleSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDQtXHRcdGVsc2Vcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NTpcdFx0XHRwdHIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDYtXHRcdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE3NjA9c3RhdGljIHZvaWQgKl9fX2JwZl9jb3B5X2tleShicGZwdHJfdCB1a2V5LCB1NjQga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTc3My1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE3NzQ6c3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzc1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzM3LVx0Y2FzZSBCUEZfTUFQX0xPT0tVUF9FTEVNOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMzODpcdFx0ZXJyID0gbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMzOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc29ja19tYXAgTG9va3VwIFByb2Nlc3MgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBzb2NrX21hcGAgbG9va3VwIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dCBhbmQgaG93IFN5emthbGxlciBjb3VsZCBpbnRlcmFjdCB3aXRoIGl0LiBJIHNlZSB0aGF0IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdXNlcyBgbWFwX2xvb2t1cF9lbGVtYCB3aGljaCB0aGVuIGRpc3BhdGNoZXMgdG8gZWl0aGVyIGBtYXAtJmd0O29wcy0mZ3Q7bWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5YCBvciBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIEZvciBgc29ja19tYXBgLCB0aGUgYHN5c19vbmx5YCB2ZXJzaW9uIHRyYW5zbGF0ZXMgdG8gYHNvY2tfbWFwX2xvb2t1cF9zeXNgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgc29ja19tYXBfbG9va3VwX3N5c2AgaXMgKmFsc28qIHN0YXRpYz8gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIFN5emthbGxlciYjMzk7cyBzeW1ib2wgcmVzb2x1dGlvbiwgZXNwZWNpYWxseSBpZiBpdCBnZXRzIGlubGluZWQuCgpUaGUgcmVndWxhciBgc29ja19tYXBfbG9va3VwYCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBCUEYgaGVscGVycyBsaWtlIGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCwgYnV0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBjYWxscyBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAsIHNvIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KClJpZ2h0LCBzbyBgc29ja19tYXBfbG9va3VwYCBpcyAqb25seSogY2FsbGVkIHZpYSBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIFRoZSBpc3N1ZSBpcywgc2luY2UgaXQmIzM5O3Mgc3RhdGljLCBTeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIHJlc29sdmluZyBpdCwgcGFydGljdWxhcmx5IGlmIHRoZSBjb21waWxlciBkZWNpZGVzIHRvIGlubGluZSBpdC4gSG93ZXZlciwgc2luY2Ugd2UmIzM5O3JlIHRha2luZyB0aGUgYWRkcmVzcyBvZiBgc29ja19tYXBfbG9va3VwYCwgaW5saW5pbmcgaXMgbGVzcyBsaWtlbHksIGJ1dCBzdGlsbCBhIGNvbmNlcm4uIEl0ICpjb3VsZCogd29yayBpZiB3ZSBleHBsaWNpdGx5IHByb3ZpZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wgdG8gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGNsZWFuZXIgYW5kIG1vcmUgcm9idXN0IHRvIHVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpZiBwb3NzaWJsZS4KClNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHdlICpjYW4qIHVzZT8gYHNvY2tfbWFwX29wc2AgaXMgbm9uLXN0YXRpYywgYnV0IGl0JiMzOTtzIGEgc3RydWN0IGFuZCBub3QgYSBmdW5jdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGVpdGhlciBgc29ja19tYXBfbG9va3VwYCBvciBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAuIFRoaXMgd2lsbCBiZSBteSBuZXh0IGFyZWEgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc29ja19tYXBfbG9va3VwX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzg4PXN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00MDA9c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg0LVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIzPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo3Mjg6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBNYXAgTG9va3VwIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgb2YgaW50ZXJlc3QsIGJ1dCB0aGVuIEkgcmVtZW1iZXIsIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgbW9kaWZ5aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAsIG5vdCB0aGUgbG93ZXItbGV2ZWwgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLgoKUmlnaHQsIEkgc2VlIHRoZSBkaWZmIG5vdy4gVGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgcmVmY291bnRpbmcgaW4gYHNvY2tfbWFwX2xvb2t1cGAuIEluc3RlYWQgb2YgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkmIzM5O3JlIHVzaW5nIGBzb2NrX2hvbGRgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgaW50ZW5kZWQgbWV0aG9kIG9mIGJ1bXBpbmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KCkFoYSEgU28gdGhlIGNydWNpYWwgY2hhbmdlIGlzIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGlua2luZyBtb3JlIGFib3V0IGhvdyBCUEYgbWFwcyB3b3JrLCBJIHJlYWxpemUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSYjMzk7cmUgY2FsbGVkIHZpYSBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFBlcmZlY3QhIFRoYXQmIzM5O3MgbXkgdGFyZ2V0LgoKVGhlIGdvb2QgbmV3cyBpcywgbXkgZm9jdXMgY2FuIHJlbWFpbiBvbiB0aGVzZSB0d28gZnVuY3Rpb25zOyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGV5JiMzOTtyZSB0aGUgb25lcyBJIG5lZWQgdG8gZXhhbWluZSBjbG9zZWx5LiBBbmQsIGJlY2F1c2Ugb2YgaG93IFN5emthbGxlciBhbmQga2NvdiB3b3JrLCB0aGUgY292ZXJhZ2Ugd2lsbCBzdGlsbCBiZSB0cmFja2VkIGZvciB0aGVtLCBldmVuIHdpdGggdGhlc2UgY2hhbmdlcyBkZWVwZXIgZG93biBpbiB0aGUgc3RhY2suIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgYHNvY2tfaGFzaF9sb29rdXBgIHRvbywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTg4MD1zdGF0aWMgc3RydWN0IGJwZl9zaHRhYl9lbGVtICpcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODgxOnNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiBoYXNoLCB2b2lkICprZXksXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4Mi1cdFx0XHQgIHUzMiBrZXlfc2l6ZSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODk1OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX2hhc2hfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy04OTYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA1LVx0YnVja2V0ID0gc29ja19oYXNoX3NlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjkwNjpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA3LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE4PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzMi1cdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjkzMzpcdGVsZW1fcHJvYmUgPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBlbGVtLVx1MDAzZWhhc2gsXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNC1cdFx0XHRcdFx0ICAgICAgIGVsZW0tXHUwMDNla2V5LCBtYXAtXHUwMDNla2V5X3NpemUpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQzPXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NTQtXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo5NTU6XHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcdTAwMjZidWNrZXQtXHUwMDNlaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Ni1cdGlmIChlbGVtKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05OTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDIyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAyMzpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyNC1cdGlmIChlbGVtIFx1MDAyNlx1MDAyNiBmbGFncyA9PSBCUEZfTk9FWElTVCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA1OD1zdGF0aWMgaW50IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3MC1cdGhlYWQgPSBcdTAwMjZzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKS1cdTAwM2VoZWFkO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDcxOlx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNzItXHRpZiAoIWVsZW0pXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMTQ2PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTk4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTk5OnN0YXRpYyB2b2lkICpzb2NrX2hhc2hfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIwNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIwNjpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjA3LVx0aWYgKCFzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTQ6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjE1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTg6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxOS1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUzPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNjAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjE6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyODE9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4OTpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjkwLVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NDpcdC5tYXBfbG9va3VwX2VsZW1cdD0gc29ja19oYXNoX2xvb2t1cCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NTpcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX2hhc2hfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1Ni1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfaGFzaF9yZWxlYXNlX3Byb2dzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgU29ja2V0IExvb2t1cCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgc29ja19oYXNoX2xvb2t1cGAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgc29ja19oYXNoX29wc2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBhbHNvIGNvbnNpZGVyIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCB3aGljaCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRoYXQuCgpTbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB3aGF0IEkgKnJlYWxseSogbmVlZCB0byBmb2N1cyBvbiwgYXJlIHRoZSBCUEYgaGVscGVycyB0aGF0IHV0aWxpemUgYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYCBkaXJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiB0aG9zZSB3b3VsZCBiZToKCiogICBgYnBmX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgCiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYAoqICAgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAKKiAgIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgCiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYAoqICAgYHNvY2tfbWFwX2xvb2t1cGAKKiAgIGBzb2NrX2hhc2hfbG9va3VwYAoKSSYjMzk7bGwgYWRkIHRob3NlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCByaWdodCBhd2F5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBjb25maXJtIHRoZSBuYW1lIGFnYWluLCBpdCBzZWVtcyByaWdodCwgSSYjMzk7bGwgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgICppcyogYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZS4uLiBZZXAsIGBCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCAuLi4pYCBjb25maXJtcyBpdC4gU28sIHRoYXQmIzM5O3MgZGVmaW5lZCBjb3JyZWN0bHkuIEV4Y2VsbGVudCwgbGV0JiMzOTtzIG5vdyBjaGVjayBpZiBgYnBmX3NrX2xvb2t1cF90Y3BgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9za19sb29rdXBfdGNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBmaWVsZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGF0IGlzbiYjMzk7dCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBnb29kIG5ld3MgaXMsIGlmIGl0JiMzOTtzIG5vbi1zdGF0aWMsIFN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIHRhcmdldCBpdCBmb3IgZnV6emluZy4gVGhhdCYjMzk7cyB0aGUga2V5IHBvaW50OiBTeXprYWxsZXLigJlzIGNhcGFiaWxpdGllcyBleHRlbmQgYmV5b25kIGp1c3QgZXhwbGljaXRseSBleHBvcnRlZCBzeW1ib2xzLgoKU28sIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBzb2NrX21hcF9sb29rdXBgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgYSB2aWFibGUgZnV6emluZyB0YXJnZXQgb3IgaWYgSSBuZWVkIHRvIGRvIHNvbWUgbW9yZSBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhIFN0YWxsZWQgUHJvY2VzcyoqCgpBbHJpZ2h0LCB0aGlzIGZlZWxz4oCmc3R1Y2suIERlYWQgaW4gdGhlIHdhdGVyLiBFdmVyeXRoaW5n4oCZcyBqdXN0ICpzdGF0aWMqLiBObyBhcHBhcmVudCBtb3ZlbWVudCwgbm8gb2J2aW91cyBwcm9ncmVzcy4gQmVmb3JlIEkgc3RhcnQgdGVhcmluZyBpbnRvIHRoZSBrZXJuZWwgd2l0aCBzdHJhY2Ugb3IgZ2RiLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBzbGlnaHRseSBtb3JlIHN1cmdpY2FsIGFwcHJvYWNoLiBUaGUgcHJvYmxlbSBjb3VsZCBsaWUgaW4gYSBsb3Qgb2YgcGxhY2VzLCBidXQgZ2l2ZW4gdGhlIHN5bXB0b21zLCBteSBndXQgc2F5cyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBzb2NrX2hhc2hfbG9va3VwYCBpcyBhY2Nlc3NpYmxlIGZyb20gd2hlcmUgSSYjMzk7bSBzdXNwZWN0aW5nIHRoZSBwcm9jZXNzIGlzIGh1bmcuIElzIHRoYXQgc3ltYm9sIGV4cG9ydGVkIGluIHRoZSBrZXJuZWwgaW1hZ2UgZm9yIHRoaXMgYnVpbGQ/IEkgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5LCBiZWNhdXNlIGlmIHRoYXQmIzM5O3Mgbm90IGV4cG9zZWQsIG15IGRlYnVnZ2luZyBpcyBnb2luZyB0byB0YWtlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgKGFuZCBtb3JlIHBhaW5mdWwpIHRyYWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3MgZXhwb3NlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNvY2tfaGFzaF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MzgKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogOTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCB0byBpbmNsdWRlIHNldmVyYWwgQlBGIGZ1bmN0aW9ucyAoYGJwZl9za19yZWRpcmVjdF9tYXBgLCBgYnBmX21zZ19yZWRpcmVjdF9tYXBgLCBldGMuKSBiZWNhdXNlIHRoZXkgcmVsYXRlIHRvIGxvb2t1cHMuIEhvd2V2ZXIsIHRob3NlIGZ1bmN0aW9ucyB1bHRpbWF0ZWx5IGNhbGwgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGFuZCBgX19zb2NrX2hhc2hfbG9va3VwX2VsZW1gLCBidXQgSSByZWFsaXplIG5vdyB0aGF0IHRob3NlIGFyZW4mIzM5O3QgKmRpcmVjdGx5KiB3aGVyZSB0aGUgY29kZSB3YXMgbW9kaWZpZWQuIFRoZSBhY3R1YWwgY2hhbmdlcyBhcmUgd2l0aGluIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAuIFNvLCBJJiMzOTtsbCByZXN0cmljdCBteSBmb2N1cyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGluIHRoZSBwcm92aWRlZCBwYXRjaC4gWWVzLCB0aGUgY2hhbmdlIGlzIGluZGVlZCB3aXRoaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIHNpbWlsYXJseSBpbiBgc29ja19oYXNoX2xvb2t1cGAuIEkgbmVlZCB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGhlcmUuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNvY2tfbWFwX2xvb2t1cGAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgYHNvY2tfbWFwX29wc2Agc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBpcyB0aWVkIHRvIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuCgpUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQlBGIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBtYXAgbG9va3VwcyBvbiBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIHZlcnkgaW50ZXJlc3RpbmcuIFN5emthbGxlciBjYW4gZWFzaWx5IHRhcmdldCB0aGlzIGJ5IGNyZWF0aW5nIGEgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYCBhbmQgY2FsbGluZyBgYnBmX21hcF9sb29rdXBfZWxlbWAgZnJvbSBhIEJQRiBwcm9ncmFtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtIGNhbGwgcGF0aCB0aG91Z2guIGBtYXBfbG9va3VwX2VsZW1gIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY2FsbHMgYG1hcF9sb29rdXBfZWxlbV9zeXNfb25seWAgaWYgdGhhdCBpcyBzZXQsIG90aGVyd2lzZSBjYWxscyBgbWFwX2xvb2t1cF9lbGVtYC4gRm9yIGBzb2NrX21hcGAsIGBtYXBfbG9va3VwX2VsZW1fc3lzX29ubHlgIGlzIHNldCB0byBgc29ja19tYXBfbG9va3VwX3N5c2AuIFRodXMsIHRoZSBzeXNjYWxsIGBicGYoQlBGX01BUF9MT09LVVBfRUxFTSlgIHdpbGwgY2FsbCBgc29ja19tYXBfbG9va3VwX3N5c2AsIG5vdCBgc29ja19tYXBfbG9va3VwYC4gSG93ZXZlciwgdGhlIGhlbHBlciBgYnBmX21hcF9sb29rdXBfZWxlbWAgd2lsbCBjYWxsIGBzb2NrX21hcF9sb29rdXBgLiBUaGUgdmVyaWZpZXIgcmVwbGFjZXMgdGhlIGhlbHBlciBjYWxsIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgbWFwLSZndDtvcHMtJmd0O21hcF9sb29rdXBfZWxlbWAsIHdoaWNoIGlzIGBzb2NrX21hcF9sb29rdXBgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlICppcyogcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgKmZ1enphYmxlKiBmcm9tIEJQRiBwcm9ncmFtcy4KCk9rYXksIHRoaXMgc2VlbXMgbGlrZSBhIGNvbmNyZXRlIGFuZCB0YXJnZXRhYmxlIGFyZWEuIEkgZmVlbCBjb25maWRlbnQgaW4gYXNzZXNzaW5nIGl0IGFzIGFuIGltcG9ydGFudCBzcG90IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3RjX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3RjX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AmIzM0OywKICAgICYjMzQ7YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfdGNfc2tfbG9va3VwX3VkcCYjMzQ7LAogICAgJiMzNDticGZfeGRwX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9za19sb29rdXBfdGNwJiMzNDssCiAgICAmIzM0O2JwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCYjMzQ7LAogICAgJiMzNDticGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODcxODkyYTc2OWNjYTRjNTVlYWI2OTQ5NjZhM2ZlNTIzYmU2MzE4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjUyOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAzNDIzNzM0MTI0YTViLi4wMzFmYjJhYWQ3OTJhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNzE2Nyw2ICYjNDM7NzE2NywyOCBAQCBfX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJcmV0dXJuIHNrOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrICoKJiM0MzticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiBzay0mZ3Q7cnNrX2xpc3RlbmVyLCBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsCiYjNDM7CSAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KJiM0MzsJICovCiYjNDM7CWlmIChzazIgIT0gc2spIHsKJiM0MzsJCXNvY2tfZ2VuX3B1dChzayk7CiYjNDM7CQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovCiYjNDM7CQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJc2sgPSBzazI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNrOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqCiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAkJc3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsCkBAIC03MTc2LDIyICYjNDM7NzE5OCw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCQkJCQkgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLAogCQkJCQkgICBzZGlmKTsKIAotCWlmIChzaykgewotCQlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7Ci0KLQkJLyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS0mZ3Q7cnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrCi0JCSAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay4KLQkJICovCi0JCWlmIChzazIgIT0gc2spIHsKLQkJCXNvY2tfZ2VuX3B1dChzayk7Ci0JCQkvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi8KLQkJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7Ci0JCQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlzayA9IHNrMjsKLQkJfQotCX0KJiM0MzsJaWYgKHNrKQomIzQzOwkJc2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spOwogCiAJcmV0dXJuIHNrOwogfQpAQCAtNzIyMiwyMiAmIzQzOzcyMzAsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJc3RydWN0IHNvY2sgKnNrID0gYnBmX3NrY19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBwcm90bywgbmV0bnNfaWQsCiAJCQkJCSBmbGFncyk7CiAKLQlpZiAoc2spIHsKLQkJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwotCi0JCS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktJmd0O3Jza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBzawotCQkgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuCi0JCSAqLwotCQlpZiAoc2syICE9IHNrKSB7Ci0JCQlzb2NrX2dlbl9wdXQoc2spOwotCQkJLyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovCi0JCQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewotCQkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2sgPSBzazI7Ci0JCX0KLQl9CiYjNDM7CWlmIChzaykKJiM0MzsJCXNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTsKIAogCXJldHVybiBzazsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jCmluZGV4IDllZmJkOGNhN2RiODMuLmNhNDliYzdmODY4N2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29ja19tYXAuYwpAQCAtMzkyLDggJiM0MzszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKQEAgLTEyMTgsOCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJc2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzYKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFJlZmFjdG9yaW5nIGFuZCBSZWZjb3VudCBDaGFuZ2UgaW4gU29ja2V0IExvb2t1cCoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIHRvdWNoZXMgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJbiBgZmlsdGVyLmNgLCBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGNvZGUgcmVmYWN0b3Jpbmc7IHRoZXkmIzM5O3JlIGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgZnJvbSBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgLiBOb3RoaW5nIHRvIHNlZSB0aGVyZSByZWFsbHksIGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLgoKTm93LCBgc29ja19tYXAuY2AgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudClgIGZvciBgc29ja19ob2xkKHNrKWAuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBzaGlmdC4gYHNvY2tfaG9sZGAgdW5jb25kaXRpb25hbGx5IGluY3JlbWVudHMgdGhlIHJlZmNvdW50LCB3aGVyZWFzIHRoZSBvcmlnaW5hbCBjaGVjayBlbnN1cmVzIHRoZSByZWZjb3VudCBpc24mIzM5O3QgYWxyZWFkeSB6ZXJvLiBUaGlzIHNjcmVhbXMgcmVmY291bnQtcmVsYXRlZCBidWcgZml4IG9yIGNoYW5nZSDigJMgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgbWl0aWdhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IEtBU0FOL3JlZmNvdW50LXJlbGF0ZWQsIG5vdCBLTVNBTi4KCkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiBkb2VzIHRoaXMgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgb3IgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzPyBOb3BlLCBub25lIG9mIHRob3NlIGFwcGx5IGhlcmUuIEl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgYW5kIGEgcmVmY291bnQgY2hhbmdlLiBLTVNBTiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggdGhpcyBpc24mIzM5O3QuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgYHNvY2tfaG9sZGAgZnVuY3Rpb24gcmVhbGx5IGRvZXMgaW5jcmVtZW50IHRoZSByZWZjb3VudCB1bmNvbmRpdGlvbmFsbHkuIFllcCwgaXQmIzM5O3MganVzdCBgcmVmY291bnRfaW5jKCZhbXA7c2stJmd0O3NrX3JlZmNudClgLiBJZiB0aGUgcmVmY291bnQgd2FzIHByZXZpb3VzbHkgemVybywgdGhlbiBgc29ja19ob2xkYCB3aWxsIGluY3JlbWVudCBpdCBmcm9tIHplcm8gdG8gb25lLiBUaGlzIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUuIEl0IGlzIGFic29sdXRlbHkgS0FTQU4vcmVmY291bnQgdGVycml0b3J5LgoKT2theSwgbGV0IG1lIHB1dCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uOgoKVGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGNvZGUgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyByZWxhdGUgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbHRlciBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgZGVidWdnaW5nIHRlY2huaXF1ZXMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzb2NrZXQgbG9va3VwIGxvZ2ljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYnkgZXh0cmFjdGluZyBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AgYnkgcmVwbGFjaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdpdGggYHNvY2tfaG9sZGAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MjoyNi4zNTcyNTQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDc0NDA4MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MjoyNi4zNTcyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkxNzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3MTg5MmE3NjljY2E0YzU1ZWFiNjk0OTY2YTNmZTUyM2JlNjMxOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MTY3LDYgKzcxNjcsMjggQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc29jayAqXFxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXFx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxcbitcXHQgKiBzayBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2syICE9IHNrKSB7XFxuK1xcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuK1xcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNrMiBcXHUwMDI2XFx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2sgPSBzazI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcXG4gX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbkBAIC03MTc2LDIyICs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNkaWYpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcyMjIsMjIgKzcyMzAsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXFxuaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXFxuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xcbkBAIC0zOTIsOCArMzkyLDggQEAgc3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG4gXFx0aWYgKCFzaylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcXG4rXFx0XFx0c29ja19ob2xkKHNrKTtcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbkBAIC0xMjE4LDggKzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjUyOjI2LjgzNjcxMTkzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzMTA5MTYyNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyBhbmQgQlBGIHNvY2ttYXAvc29ja2hhc2ggbWFwIGxvb2t1cCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyByZWZhY3RvciBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIGFuZCBCUEYgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MTg5MmE3NjljY2E0YzU1ZWFiNjk0OTY2YTNmZTUyM2JlNjMxOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzo1MjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjAzMWZiMmFhZDc5MmEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MTY3LDYgKzcxNjcsMjggQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNvY2sgKlxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuK1xuK1x0LypcbitcdCAqIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuK1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuK1x0ICovXG4rXHRpZiAoc2syICE9IHNrKSB7XG4rXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4rXHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudC4gKi9cbitcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXHRcdHNrID0gc2syO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNrO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHNvY2sgKlxuIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcbkBAIC03MTc2LDIyICs3MTk4LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG4gXHRcdFx0XHRcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgIHNkaWYpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjIyLDIyICs3MjMwLDggQEAgYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gYnBmX3NrY19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBwcm90bywgbmV0bnNfaWQsXG4gXHRcdFx0XHRcdCBmbGFncyk7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHNrKVxuK1x0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG4gXG4gXHRyZXR1cm4gc2s7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCA5ZWZiZDhjYTdkYjgzLi5jYTQ5YmM3Zjg2ODdjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTM5Miw4ICszOTIsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC0xMjE4LDggKzEyMTgsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2spXG4gXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjUyOjI2LjgzNjcxMzAxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDkzOTk3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIG1vZGlmaWNhdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJbiBgZmlsdGVyLmNgLCBhIG5ldyBoZWxwZXIsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBoYXMgYmVlbiBhZGRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgbG9va3VwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEdvb2QgdG8gc2VlIHRoZXkncmUgY2xlYW5pbmcgdGhpbmdzIHVwLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBjaGFuZ2UgaW4gYHNvY2tfbWFwLmNgLiBUaGV5J3ZlIGFsdGVyZWQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgcmVmY291bnQgY2hlY2suIEluc3RlYWQgb2YgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkncmUgbm93IHVzaW5nIGBzb2NrX2hvbGRgIHdpdGhpbiBhIHByb3RlY3RlZCBzY29wZS4gU28sIGVzc2VudGlhbGx5LCB0aGV5J3JlIGFzc3VtaW5nIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBwcm90ZWN0ZWQsIHByb2JhYmx5IGJ5IFJDVSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZSBgc29ja19ob2xkYCBpcyBmb3IgbWFpbnRhaW5pbmcgYSBob2xkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBzb3VuZCwgKmlmKiB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGV4aXN0aW5nIHByb3RlY3Rpb24gYXJlIGNvcnJlY3QuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyB0aGUgY2FzZS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBldmVuIHJlYWNoYWJsZS4gV2FpdCwgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgKmRlZmluaXRlbHkqIHVzZWQgYXMgQlBGIG1hcCBsb29rdXAgZnVuY3Rpb25zIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4gWXVwLCB0aG9zZSBhcmUgcmVhY2hhYmxlIGFuZCBmdXp6ZWFibGUsIG5vIHF1ZXN0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYHNvY2tfbWFwLmNgLiBMZXQgbWUgcXVpY2tseSBsb29rIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAuLi4gT2theSwgaXQgbG9va3MgbGlrZSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gU28sIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEVhc3kgZW5vdWdoIHRvIGNoZWNrLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCBgZmlsdGVyLmNgLiBTYW1lIGBuZXQvY29yZS9NYWtlZmlsZWAsIGFuZCB0aGUgZGVwZW5kZW5jeSBpcyBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaWx0ZXIub2Agc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgYXBwbGllcyB0aGVyZSB0b28uIEhtbSwgd2FpdC4gT3IgbWF5YmUgdGhlIGZ1bGwgYG5ldGAgY29uZmlnIGlzIG5lZWRlZCBmb3IgdGhlIGNvbXBpbGUuLi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHNhbWUgYE1ha2VmaWxlYCBhZ2FpbiB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowMy4zMzA3MTMzMjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTU3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowMy4zNzY1NzQ1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzY3Mzg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBzb2NrX21hcC5vYC4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBnb2luZyBvbiB3aXRoIGBmaWx0ZXIub2AuLi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gVGhpcyBpcyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MDYuOTEzMzE3NTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjAxNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzowNi45NTk5MzAxNTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQxODQ3MzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIGBmaWx0ZXIub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGF0IGFuZCB0aGUgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGFuZCBgYnBmX3NrX2xvb2t1cGAuIEFoLCByaWdodCwgYGJwZl9za19sb29rdXBgIGlzIGEgQlBGIGhlbHBlciwgdGhhdCdzIGtleS4gTm93LCB3aGVyZSBkbyB0aGUgbWFwIG9wZXJhdGlvbnMgZml0IGluPyBJIGtub3cgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgdGhlIG1hcCBvcGVyYXRpb25zIGhlcmUuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc29ja19tYXBfbG9va3VwYCwgYHNvY2tfaGFzaF9sb29rdXBgLCBgYnBmX3NrX2xvb2t1cGAsIGFuZCBgX19icGZfc2tfbG9va3VwYC4gSGFuZyBvbiBhIHNlY29uZCwgdGhhdCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBtaWdodCBjb21wbGljYXRlIHRoaW5ncyBiZWNhdXNlIGl0IGlzIHN0YXRpYy4gSXQncyBsaWtlbHkgaW5saW5lZCBvciBtaWdodCBub3QgZXZlbiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWVhbnMgaXQgbWlnaHQgbm90IHNob3cgdXAgZGlyZWN0bHkuXG5cbkhvd2V2ZXIsIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAsIHRob3NlIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZXkgYXJlICp1c2VkKiBhcyBmdW5jdGlvbiBwb2ludGVycyBpbiBgYnBmX21hcF9vcHNgLiBUaGF0IG1lYW5zIHRoZXkgd2lsbCBub3QgYmUgaW5saW5lZCBhbmQgKmRvKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgc3RhdGljIGFuZCBJIGNhbiBwcm9jZWVkIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MzMuMzc4NDA3MTgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgwOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU2LVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njc1PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTcyMz1zdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI4OlxcdGluZm8tXFx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVxcdTAwM2VtYXAsIGluZm8tXFx1MDAzZWluZGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2OlxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5OlxcdC5tYXBfbG9va3VwX2VsZW1cXHQ9IHNvY2tfbWFwX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6MzMuNDI0ODk0MjYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NDg0ODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEJQRiBNYXAgTG9va3VwcyBhbmQgU29ja2V0IExvb2t1cHMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEJQRiBtYXBzIGFuZCBzb2NrZXQgbG9va3Vwcy4gSSBzZWUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGBicGZfbWFwX29wc2Agc3RydWN0LiBUaGF0IG1lYW5zIHRoZXkncmUgbm90IGlubGluZWQsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdCBnaXZlbiB0aGVpciBmdW5jdGlvbi4gVGhleSdyZSBwYXJ0IG9mIGEgZGVmaW5lZCBzZXQgb2Ygb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gc2hpZnRpbmcgZm9jdXMgdG8gdGhvc2UgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGJwZl9za19sb29rdXBgIGFuZCBgX19icGZfc2tfbG9va3VwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCBob3cgdGhleSdyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzozNy41Njk3NDc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTcxNzA9c3RhdGljIHN0cnVjdCBzb2NrICpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Mi17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTkyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5MzpfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk0LVxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMS1cXHRpZiAoc2spXFxubmV0L2NvcmUvZmlsdGVyLmM6NzIwMjpcXHRcXHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzIwMy1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyMjY9c3RhdGljIHN0cnVjdCBzb2NrICpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjI3OmJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjI4LVxcdCAgICAgIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzMtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMzQ6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMzUtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI1Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjU4OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjU5LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2MTpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjY0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjY2OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzc6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzgtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc5LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjgwOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI4MS1cXHRcXHRcXHRcXHRcXHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyODMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyODU6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyODYtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTczMjA9QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzI3OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzM0ND1CUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTE6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1VEUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgyPUJQRl9DQUxMXzUoYnBmX3hkcF9za19sb29rdXBfdWRwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM4OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzg5OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc0MzA9QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDM2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0Mzc6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MzgtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzQ3ND1CUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDc2LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDc3OlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1RDUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc0OTM9QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzQ5NjpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBzb2NrX25ldChjdHgtXFx1MDAzZXNrKSwgMCwgSVBQUk9UT19VRFAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDk2PWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODUyNC1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODUyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MjYtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1Mjc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTI4LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg4Mzk9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODY1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODY2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODg2Ny1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg2ODpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjktXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4OTU9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5ODpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk5OkVYUE9SVF9TWU1CT0woYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMTpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMi1cXHQgICBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzE6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTMyLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk0MD1za19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDctXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE5NTQ9c3RhdGljIGJvb2wgc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU4LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1OTpcXHRpZiAob2ZmIFxcdTAwM2MgMCB8fCBvZmYgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBicGZfc2tfbG9va3VwKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cXHRzd2l0Y2ggKG9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV9wdHIoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2OC1cXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19TT0NLRVRfT1JfTlVMTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTcxOlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgZmFtaWx5KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc0OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTc4OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3OS1cXHRcXHRicGZfY3R4X3JlY29yZF9maWVsZF9zaXplKGluZm8sIHNpemVvZihfX3UzMikpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODI6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODMtXFx0XFx0LyogQWxsb3cgNC1ieXRlIGFjY2VzcyB0byAyLWJ5dGUgZmllbGQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KSAuLi5cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk5MDpcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpIC0gMTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MS1cXHRcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gemVybyBwYWRkaW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjAwMD1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDA4LVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDA5OlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMi1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNDpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDE1LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAyMDpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjEtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjI6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAyMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjY6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMjctXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMjg6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAyOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMzI6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzNDpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzODpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzOS1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNDItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDM6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NC1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0NS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNDY6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA0Ny1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNTMtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDU0OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDU1LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNTk6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYwLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYxLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA2MjpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDYzLVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA2OS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwNzA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDcxLVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDcyOlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwNzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDc2OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA3Ny1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODE6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODItXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODM6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwODYtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwODc6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjA4OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjA4OTpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1MzozNy42MTY2Mzk1NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY3OTgxNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNLIExvb2t1cCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGBicGZfc2tfbG9va3VwYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYnBmX3NrX2xvb2t1cGAgaXRzZWxmIGlzIHN0YXRpYywgYnV0IGl0J3MgY2xlYXJseSBiZWluZyBjYWxsZWQgYnkgYGJwZl9za19sb29rdXBfdGNwYCBhbmQgYGJwZl9za19sb29rdXBfdWRwYCwgd2hpY2ggYXJlIHByZXNlbnRlZCBhcyBCUEYgaGVscGVycy4gU2ltaWxhcmx5LCBgX19icGZfc2tfbG9va3VwYCBpcyBhbHNvIHN0YXRpYywgYnV0IGdldHMgdXRpbGl6ZWQgYnkgYSB3aWRlciBzZXQgb2YgZnVuY3Rpb25zIGxpa2UgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYW5kIHRoZSBYRFAgYW5kIGBzb2NrX2FkZHJgIHZhcmlhbnRzLlxuXG5TbywgaW4gdGVybXMgb2YgdGhpbmdzIHRvIGNoZWNrLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYW5kIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLiBJJ20gYWxzbyBhZGRpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCB0byB0aGUgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaC4gQWx0aG91Z2gsIHdhaXQuLi4gdGhvc2UgbGFzdCB0d28gYXJlIHN0YXRpYyBidXQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgc28gdGhleSBzaG91bGQgYmUgb2theS5cblxuTm93LCBsb29raW5nIGNsb3NlciBhdCBob3cgdGhlc2UgYXJlIGRlZmluZWQsIEkgc2VlIGBCUEZfQ0FMTF81KC4uLilgIGJlaW5nIHVzZWQuIFRoYXQgbWFjcm8gZXhwYW5kcyB0byB0aGluZ3MgbGlrZSBgYnBmX3NrX2xvb2t1cF90Y3BgIG9yIHRoZSBkb3VibGUtdW5kZXJzY29yZSB2YXJpYW50cywgbGlrZSBgX19fX2JwZl9za19sb29rdXBfdGNwYC4gUmlnaHQsIHNvIGl0IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGBCUEZfQ0FMTF81YCBhY3R1YWxseSBkZWZpbmVzIGJvdGgsIHJpZ2h0PyBMZXQncyBqdXN0IGF2b2lkIHRoZSBkb3VibGUgdW5kZXJzY29yZSBhbmQgZm9jdXMgb24gdGhlIHNpbXBsZXIgbmFtZXMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB3aGV0aGVyIHRoZXNlICdwcmltYXJ5JyBmdW5jdGlvbnMsIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYXJlIGV4cG9ydGVkIG9yIG1hcmtlZCBhcyBub24tc3RhdGljLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kIHRoZWlyIGJyb2FkZXIgYXZhaWxhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0NS4yOTY0NTg4ODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzVcXFxcKGJwZl9za19sb29rdXBfdGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTcyNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjU3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNTg6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTktXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTM6NDUuMzQzOTQ0MTI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODU1NDAyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBCUEZfQ0FMTF81YCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoZW4gSSBzZWUgYEJQRl9DQUxMXzVgLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGZ1bmN0aW9uIGNhbGwgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBCdXQgaXMgaXQgY3JlYXRpbmcgYSBmdW5jdGlvbiBvciBjYWxsaW5nIG9uZT8gR2l2ZW4gdGhlIG5hbWluZywgbXkgaW50dWl0aW9uIGxlYW5zIHRvd2FyZHMgKmNyZWF0aW5nKiBhIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBzZXR0aW5nIHVwIHRoZSBtZWFucyBmb3Igb25lLiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzVgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IHRoaXMgbWFjcm8gKG9yIGZ1bmN0aW9uLCBJJ2xsIGZpbmQgb3V0KSBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0OS4xMjk0ODcxOTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMwMjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo0OS4xNzY1MjY4ODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzODQzMzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgSGVhZGVyIEh1bnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLCBhbmQgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGtlcm5lbC1sZXZlbCBkZWZpbml0aW9ucy4gV2hlcmUgYXJlIHRoZXkgbGlrZWx5IGhpZGluZz8gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzLiBJJ2xsIHN0YXJ0IHdpdGggYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlci4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3RydWN0dXJlcyBmb3IgZmlsdGVyaW5nIG1pZ2h0IHJlc2lkZS4gSWYgdGhhdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHlpZWxkIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBuZXh0IG1vdmUgaXMgdG8gZ28gZGVlcGVyIHdpdGggYGluY2x1ZGUvbGludXgvYnBmLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbW9yZSBtb2Rlcm4gYW5kIGV4cGFuZGVkIEJQRi1zcGVjaWZpYyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZSBpbnN0cnVjdGlvbiBzZXQsIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgbGlrZWx5IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgbG9naWNhbCBwYXRoIOKAkyBgZmlsdGVyLmhgIGZvciB0aGUgaGlzdG9yaWNhbCBncm91bmRpbmcsIHRoZW4gYGJwZi5oYCBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo1NC42MTQ5NjI3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODUtLyogdW51c2VkIG9wY29kZSB0byBtYXJrIGNhbGwgdG8gaW50ZXJwcmV0ZXIgd2l0aCBhcmd1bWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1xcdDB4ZTBcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MjQ9c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUxMi1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjUxMzojZGVmaW5lIEJQRl9DQUxMX1JFTChUR1QpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTE0LVxcdCgoc3RydWN0IGJwZl9pbnNuKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC01MjItXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo1MjM6I2RlZmluZSBCUEZfQ0FMTF9JTU0oeClcXHQoKHZvaWQgKikoeCkgLSAodm9pZCAqKV9fYnBmX2NhbGxfYmFzZSlcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTUyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTM0LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NTM1OiNkZWZpbmUgQlBGX0NBTExfS0ZVTkMoT0ZGLCBJTU0pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNTM2LVxcdCgoc3RydWN0IGJwZl9pbnNuKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NjUtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NjY6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY3LVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NzgtI2RlZmluZSBfX05PQVRUUlxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Njc5OiNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODA6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4MTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjgyOiNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2ODM6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY4NDojZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1Mzo1NC43MDExNDQwNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MTYyOTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENhbGwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEJQRl9DQUxMX3hgIG1hY3JvLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byBpdHMgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gc2VlIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyDigJMgZXhhY3RseSB3aGF0J3MgYmVpbmcgZXhwYW5kZWQsIHdoYXQgcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZCwgdGhlIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGhvdyBpdCB0cmFuc2xhdGVzIGludG8gdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgY2FsbCB0aGlzIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSXMgdGhlcmUgYSBoZWxwZXIgZnVuY3Rpb24gbG9va3VwIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdGFjayBmcmFtZSBhZGp1c3RtZW50cz8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBhbmQgdW5kZXJzdGFuZCB0aGUgQUJJLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjAzLjA0Mjc3NjgxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNTA2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQyND1zdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjY1LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjY2OiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY2Ny1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MDMuMDg4ODMzMjU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDcwMTM4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZpbHRlci5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIExpbnV4IGtlcm5lbCdzIGZpbHRlcmluZyBmcmFtZXdvcmssIGFuZCBJIHJlbWVtYmVyIHRoZXJlJ3Mgc29tZSBjcnVjaWFsIHN0dWZmIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBTcGVjaWZpY2FsbHksIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGRldGFpbHMgSSdtIGFmdGVyIGFyZSBhcm91bmQgbGluZSA2NjYsIHNvIEknbGwganVtcCByaWdodCB0byB0aGF0IGFyZWEuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmaWx0ZXJpbmcsIGxpa2VseSByZWxhdGVkIHRvIG5ldHdvcmtpbmcgb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIHdhaXRpbmcgZm9yIG1lIHRoZXJlISBJIGFudGljaXBhdGUgc2VlaW5nIGVpdGhlciBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMsIGVudW1lcmF0aW9ucywgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmaWx0ZXJpbmcgcnVsZXMsIHBhY2tldCBpbnNwZWN0aW9uLCBvciBwZXJoYXBzIGV2ZW4gQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBpbnRlZ3JhdGlvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjA3Ljg5NTg0OTYyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjYxOlxcdFxcbiA2NjI6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NjM6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY2NDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY2NTpcXHRcXG4gNjY2OlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjY3OlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Njg6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY2OTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjcwOlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NzE6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY3MjpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjczOlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NzQ6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY3NTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjc2OlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2Nzk6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MDcuODk1OTcxNzIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODAzODEyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFNvY2tldCBMb29rdXAgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgLi4uKWAgaXMgZGVmaW5pbmcgYm90aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBgYnBmX3NrX2xvb2t1cF90Y3AoLi4uKWAgYW5kIGFuIGludGVybmFsIGBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBfX19fYnBmX3NrX2xvb2t1cF90Y3AoLi4uKWAgaGVscGVyLiBUaGlzIG1lYW5zIGBicGZfc2tfbG9va3VwX3RjcGAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IHN5bWJvbCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3IgYW5hbHlzaXMgaW4gdGhpcyBjb250ZXh0LiBJdCdzIHRoZSBwdWJsaWMtZmFjaW5nIGVudHJ5IHBvaW50LlxuXG5UaGF0IHBhdHRlcm4sIG5hdHVyYWxseSwgZXh0ZW5kcyB0byB0aGUgb3RoZXIgcmVsYXRlZCBsb29rdXAgZnVuY3Rpb25zOiBgYnBmX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3RjX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BgLCBhbmQgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAuIFRoZXknbGwgYWxsIGZvbGxvdyB0aGUgc2FtZSBzdHJ1Y3R1cmUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIGNoZWNrIGhvdyB0aGVzZSBsb29rdXAgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBtYXBzLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgd2l0aGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDoxMy4zNzYzNTQ1ODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTk5NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NDc9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU2LVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njc1PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTcyMz1zdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI4OlxcdGluZm8tXFx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVxcdTAwM2VtYXAsIGluZm8tXFx1MDAzZWluZGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2OlxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM3LVxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM5OlxcdC5tYXBfbG9va3VwX2VsZW1cXHQ9IHNvY2tfbWFwX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0MC1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MTMuNDIyNTU3NjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNDk4NzA2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgZnVuY3Rpb25zLiBUaGV5J3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBUaGV5J3JlIGJlaW5nIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBzb2NrX21hcF9vcHNgIGFuZCBgc29ja19oYXNoX29wc2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gQnV0IHRoYXQgYHN0YXRpY2AgcXVhbGlmaWVyLi4uIGlmIHRoZSBjb21waWxlciBkZWNpZGVkIHRvIGlubGluZSB0aGVtLCBzeXprYWxsZXIsIG91ciBmdXp6ZXIsIG1pZ2h0IGhhdmUgdHJvdWJsZSByZXNvbHZpbmcgdGhlaXIgYWRkcmVzc2VzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29kZSB0YWtlcyB0aGVpciBhZGRyZXNzZXMsIGlubGluaW5nIGlzIHByb2JhYmx5IG5vdCBoYXBwZW5pbmcuIFN0aWxsLCBzeXprYWxsZXIgdGVuZHMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBmb3IgZWFzaWVyIGluc3RydW1lbnRhdGlvbi5cblxuU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGl2ZT8gQ2FuIHdlIGxldmVyYWdlIGEgbm9uLXN0YXRpYyB2ZXJzaW9uPyBBcmUgYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCB0aGVtc2VsdmVzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IEkgbmVlZCB0byB2ZXJpZnkuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBzb2NrX21hcF9vcHNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlIGNhbiBhdm9pZCB0aGVzZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDoyMS43NzI0MzI2OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODAyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMwPUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzItXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjIxLjgxNzI0MDYyMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY3MTEyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIHJlZmxlY3Rpb246XG5cbioqQ29udGVtcGxhdGluZyBTb2NrZXQgT3BlcmF0aW9uIFNjb3BlKipcblxuSG1tLCBzbyBgc29ja19tYXBfb3BzYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiBpdHMgbGlrZWx5IHVzYWdlIGNvbnRleHQsIHByb2JhYmx5IG5lZWRpbmcgYWNjZXNzIGFjcm9zcyBtb2R1bGVzIG9yIHdpdGhpbiBhIGNvbXBsZXggc29ja2V0IGltcGxlbWVudGF0aW9uLiBJdCBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSwgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhlIGludGVudGlvbiBpcyBmb3IgaXQgdG8gYmUgYSBtb3JlIGdlbmVyYWxpemVkLCBwb3RlbnRpYWxseSBleHRlbnNpYmxlIGludGVyZmFjZS5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmcuLi53aGF0J3MgdGhlIHN0b3J5IHdpdGggYHNvY2tfaGFzaF9vcHNgPyBJcyAqdGhhdCogbm9uLXN0YXRpYyBhcyB3ZWxsPyBUaGUgaW1wbGljYXRpb25zIGFyZSBpbW1lZGlhdGVseSByZWxldmFudCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaXN0cmlidXRlZCBzeXN0ZW0gb3IgY29uY3VycmVuY3kuIFRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZm9ybWVyIGltcGxpZXMgdGhhdCB0aGVzZSBgb3BzYCBzdHJ1Y3R1cmVzIHByb2JhYmx5IHBsYXkgYSBwcmV0dHkgaW1wb3J0YW50IHBhcnQgaW4gdGhlIGNvcmUgbG9naWMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgZHluYW1pYyByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeT8gT3IsIGlzIGl0IHBlcmhhcHMgdXNlZCBieSB0aGluZ3Mgb3V0c2lkZSBvZiBpdHMgb3JpZ2luYXRpbmcgZmlsZT8gVGhpcyBsaW5lIG9mIHF1ZXN0aW9uaW5nIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZWxhdGVkIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbiBhbmQgaW52ZXN0aWdhdGUgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MjYuMTg0MzU1Njk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgwMzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX2hhc2hfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0xNDQ2PUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX2hhc2hfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3NodGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ0Nzpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NDgtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjI2LjIzMDE2NTQ1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ5NjY0OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBNYXAgT3BzIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGNvbnN0IHN0cnVjdCBicGZfbWFwX29wc2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBJIG5lZWQgdG8gaW5jbHVkZSBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGluIG15IGFuYWx5c2lzIG9mIGtleSBzeW1ib2xzLiBFdmVuIHRob3VnaCB0aGV5J3JlIHByb2JhYmx5IHN0YXRpYyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyBtZWFucyB0aGV5J2xsIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzLCBhbmQgSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSB2aXRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCBmb3IgYHNvY2tfbWFwLm9gLCBidXQgd2hhdCBhYm91dCBpdHMgZGVwZW5kZW5jaWVzPyBSaWdodCwgYENPTkZJR19ORVRgIGhhcyB0byBiZSBlbmFibGVkIHRvbywgaXQncyBhIHBhcmVudCBjb25maWcuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZS4gTGV0IG1lIGRpZyBpbnRvIGBuZXQvY29yZS9LY29uZmlnYCBhbmQgc2VlIGlmIGBzb2NrX21hcC5vYCBvciBgZmlsdGVyLm9gIGFyZSBtZW50aW9uZWQgYW55d2hlcmUgZWxzZS4gVGhhdCBzaG91bGQgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozMC43Nzk4MzQ1NTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTYwOTI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozMC44MjcwMDEwNzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4OTc3NzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byBjaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYDpcblxuKipDaGVja2luZyBgaW5pdC9LY29uZmlnYCBmb3IgYEJQRl9TWVNDQUxMYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX1NZU0NBTExgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB3b3VsZCB0aGlzIGNvbmZpZ3VyYXRpb24gYmUgZGVmaW5lZD9cIiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5kYW1lbnRhbCBzeXN0ZW0tbGV2ZWwgZmVhdHVyZSwgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrLCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpa2UgdGhpcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhlIGZpbGUgYW5kIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgcmVsZXZhbnQgYGNvbmZpZ2AgYmxvY2suIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGRlZmluZWQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkIGZyb20gYW5vdGhlciBLY29uZmlnIGZpbGUuIEknbSBleHBlY3RpbmcgaXQgdG8gYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQ7IGEgc2ltcGxlIGBjb25maWcgQlBGX1NZU0NBTExgIGFuZCBzb21lIGFzc29jaWF0ZWQgaGVscCB0ZXh0IGRlZmluaW5nIHdoYXQgdGhlIG9wdGlvbiBjb250cm9scy4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjMzLjgxNjc4MDk5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzEyMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjMzLjg2MzcxOTY3MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwOTM2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSByZWxpYWJsZSBvbmUgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgQlBGIG9wdGlvbnMgYXJlIHVzdWFsbHkgbG9jYXRlZCwgb3IgYXQgbGVhc3Qgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsaW5rcyB0byB0aGUgcmVsZXZhbnQgc3ViLWNvbmZpZ3VyYXRpb25zLiBJJ2xsIGxpa2VseSBjaGVjayBzaW1pbGFyIGZpbGVzIHRvbywganVzdCBpbiBjYXNlLCBidXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgc3VzcGVjdCBmb3IgZ2V0dGluZyBtZSBzdGFydGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdpbiBpZiBJJ20gbHVja3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6MzcuMjg0NjU5NjE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxMDQ4MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDozOC45NjU3MTU4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIxMDA0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBNeSBmaXJzdCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEkga25vdyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFzc2Vzcy4gVGhlcmUgaXNuJ3QgbXVjaCBtb3JlIHRvIGl0IC0gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6NDIuMTg2NzIzNDI5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo0Mi4xODY4MTE0MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTI3NTQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIExvb2t1cCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgQlBGIGxvb2t1cCBmdW5jdGlvbnMsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgYEJQRl9TWVNDQUxMYCwgYW5kIEknbGwgYWxzbyByZXF1aXJlIGBORVRgIGR1ZSB0byBpdHMgaW5mbHVlbmNlIG9uIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5vdGljZWQgdGhhdCBgc29ja19tYXAuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkIGFuZCBgZmlsdGVyLmNgIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGltcGxpZXMgdGhhdCBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgIGFyZSBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246XG4qICAgYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYFxuKiAgIGBicGZfdGNfc2tfbG9va3VwX3RjcGAsIGBicGZfdGNfc2tfbG9va3VwX3VkcGBcbiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGBcbiogICBgc29ja19tYXBfbG9va3VwYCwgYHNvY2tfaGFzaF9sb29rdXBgXG5cbkFoYSEgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgc3RhdGljLCB3aGljaCBtYXkgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIGZ1enppbmcgdGhlbSB3aXRoIFN5emthbGxlciwgdW5sZXNzIHRoZXJlIGFyZSBub24tc3RhdGljIHdyYXBwZXJzLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgc29ja19tYXBfb3BzYCBhbmQgYHNvY2tfaGFzaF9vcHNgLCB0aGVzZSBhcmUgc3RydWN0cy4gUmlnaHQsIHNvIHRoZSBCUEYgbWFwIGxvb2t1cCBzeXNjYWxsIHVsdGltYXRlbHkgY2FsbHMgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtYC4gVGhpcyBpbXBsaWVzIHRoYXQgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgZ29pbmcgdG8gYmUgY2FsbGVkIGludGVybmFsbHkgdmlhIHRoYXQgbWVjaGFuaXNtLCB3aGljaCBpcyBwcm9taXNpbmcuIFN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBnZXQgdG8gdGhlbSBpZiB0aGV5IGFyZSBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBicGZfc2tfbG9va3VwX3RjcGAgaXMgbm9uLXN0YXRpYyBhcyBJIHN1c3BlY3QuXG5JdCBsb29rcyBsaWtlIHRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZXhwYW5kcyB0byBhIG5vbi1zdGF0aWMgZGVjbGFyYXRpb246XG5gYGBjXG51NjQgYnBmX3NrX2xvb2t1cF90Y3AodTY0IHIxLCB1NjQgcjIsIHU2NCByMywgdTY0IHI0LCB1NjQgcjUpO1xuYGBgXG5ZZXMsIHRoaXMgaXMgbm9uLXN0YXRpYyEgRXhjZWxsZW50LlxuXG5Ob3cgSSBuZWVkIHRvIHJlcGVhdCB0aGF0IGNoZWNrIGZvciBgYnBmX3RjX3NrX2xvb2t1cF90Y3BgIGFuZCBlbnN1cmUgdGhhdCBpdCB0b28gaXMgbm9uLXN0YXRpYywgYnV0IEknbSBjb25maWRlbnQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU0OjUyLjczOTU2ODYwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MDg3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0NBTExfNVxcXFwoYnBmX3RjX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTktXFxubmV0L2NvcmUvZmlsdGVyLmM6NzMyMDpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMyMS1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo1Mi43ODkxODM1MDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjU2MTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAncyBWaXNpYmlsaXR5KipcblxuQWxyaWdodCwgdGhhdCBjb25maXJtYXRpb24gZmVlbHMgZ29vZC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGFib3V0IHNvbWV0aGluZy4gSXMgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAgZGVjbGFyZWQgd2l0aCB0aGUgYHN0YXRpY2Aga2V5d29yZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGxpbmthZ2UgYW5kIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgaXQgaW50cm9kdWNlcyBzb21lIGRlc2lnbiBsaW1pdGF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgY29uc2lkZXIgd2hlbiBmb3JtdWxhdGluZyBteSBuZXh0IHN0ZXBzLiBJZiBub3QsIHRoZW4gSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgZXhpc3RpbmcgaHlwb3RoZXNpcy4gQSBxdWljayBjaGVjayBvZiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgSSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VyLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkZXRhaWwgSSdtIHJlbHlpbmcgb24sIHNvIGl04oCZcyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGdldHRpbmcgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDI3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTQ6NTcuNDUxNzQ3OTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5NjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ0FMTF81XFxcXChicGZfeGRwX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzQxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDI5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MzA6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQzMS1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NDo1Ny40OTk2NTAwMzVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2Mzg1OTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgcmVmbGVjdGluZyBvbiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmaWNhdGlvbiBvZiBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCBOb24tU3RhdGljIFN0YXR1cyoqXG5cbkFscmlnaHQsIHRoYXQncyBjb3JyZWN0LCBjb25maXJtZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCBmdW5jdGlvbiBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB3aGF0ZXZlciBJJ20gd29ya2luZyBvbiB0byBwcm9wZXJseSBsaW5rIGFuZCBhY2Nlc3MgdGhlIGZ1bmN0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxsIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgzOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjAyLjU2MzUxMTc2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3OTE5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0NBTExfNVxcXFwoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTc0NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQ3My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3NDc0OkJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDc1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjAyLjYxMjMxMDAwM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk0MTkzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24qKlxuXG5ZZXMsIHRoYXQncyByaWdodCwgYWJzb2x1dGVseS5cblxuT2theSwgbm93IGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGNydWNpYWwgZm9yIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgc29ja19tYXBfbG9va3VwYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBrbm93IGl0J3MgcHJvYmFibHkgb2J2aW91cywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBjb21wb25lbnRzIGxpa2UgdGhpcy4gQSBxdWljayBjaGVjayB3aWxsIGhlbHAgdG8gYXZvaWQgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBjcmVhdGUgcHJvYmxlbXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MDYuMTA2NTA1NjkzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczNDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgdm9pZCBcXFxcKnNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzc3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MDYuMTUzMjQ1ODAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDk3ODU5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgRnVuY3Rpb24gUG9pbnRlcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3Mgc3RhdGljLiBCdXQsIHdhaXQgYSBtaW51dGUsIGl0J3MgYWxzbyBiZWluZyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBhIHN0YXRpYyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGluIHRoaXMgd2F5LiBUaGUga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNhbGxzIGl0PyBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cbkFoLCBJIHJlbWVtYmVyIHRoYXQgdGhlIEJQRiBtYXAgbG9va3VwLCB0aGUgc3lzY2FsbCwgdWx0aW1hdGVseSBjYWxscyBgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW1gLiBPa2F5LCB0aGF0J3MgdGhlIGNvbm5lY3Rpb24hIExldCBtZSBzZWUsIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGl0c2VsZiBmb3IgdGhpcyBpcyBgbWFwX2xvb2t1cF9lbGVtYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLlxuXG5SaWdodCwgc28gdG8gdHJhY2UgdGhpcywgSSBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agbm93LiBMZXQgbWUgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlcnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjEwLjY2MzAzNTYwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTQzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvb2t1cF9lbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTMwOD1zdGF0aWMgaW50IGJwZl9tYXBfY29weV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI3LVxcdH0gZWxzZSBpZiAoSVNfRkRfQVJSQVkobWFwKSB8fCBJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjg6XFx0XFx0ZXJyID0gYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbShtYXAsIGtleSwgdmFsdWUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyOS1cXHR9IGVsc2UgaWYgKElTX0ZEX0hBU0gobWFwKSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMzMDpcXHRcXHRlcnIgPSBicGZfZmRfaHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzEtXFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SRVVTRVBPUlRfU09DS0FSUkFZKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDEtXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MjpcXHRcXHRpZiAobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDM6XFx0XFx0XFx0cHRyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbV9zeXNfb25seShtYXAsIGtleSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ0LVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDU6XFx0XFx0XFx0cHRyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2LVxcdFxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc2MD1zdGF0aWMgdm9pZCAqX19fYnBmX2NvcHlfa2V5KGJwZnB0cl90IHVrZXksIHU2NCBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE3NzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTc3NDpzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzc1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYyOTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMzNy1cXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0VMRU06XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMzODpcXHRcXHRlcnIgPSBtYXBfbG9va3VwX2VsZW0oXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMzktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjEwLjcxMzMzNTIxOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDI3NDcxNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc29ja19tYXAgTG9va3VwIFByb2Nlc3MgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBgc29ja19tYXBgIGxvb2t1cCB3b3Jrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQgYW5kIGhvdyBTeXprYWxsZXIgY291bGQgaW50ZXJhY3Qgd2l0aCBpdC4gSSBzZWUgdGhhdCBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHVzZXMgYG1hcF9sb29rdXBfZWxlbWAgd2hpY2ggdGhlbiBkaXNwYXRjaGVzIHRvIGVpdGhlciBgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHlgIG9yIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAuIEZvciBgc29ja19tYXBgLCB0aGUgYHN5c19vbmx5YCB2ZXJzaW9uIHRyYW5zbGF0ZXMgdG8gYHNvY2tfbWFwX2xvb2t1cF9zeXNgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgc29ja19tYXBfbG9va3VwX3N5c2AgaXMgKmFsc28qIHN0YXRpYz8gVGhhdCdzIG5vdCBpZGVhbCBmb3IgU3l6a2FsbGVyJ3Mgc3ltYm9sIHJlc29sdXRpb24sIGVzcGVjaWFsbHkgaWYgaXQgZ2V0cyBpbmxpbmVkLlxuXG5UaGUgcmVndWxhciBgc29ja19tYXBfbG9va3VwYCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBCUEYgaGVscGVycyBsaWtlIGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCwgYnV0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBjYWxscyBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAsIHNvIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5SaWdodCwgc28gYHNvY2tfbWFwX2xvb2t1cGAgaXMgKm9ubHkqIGNhbGxlZCB2aWEgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtYC4gVGhlIGlzc3VlIGlzLCBzaW5jZSBpdCdzIHN0YXRpYywgU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdHJvdWJsZSByZXNvbHZpbmcgaXQsIHBhcnRpY3VsYXJseSBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyB0byBpbmxpbmUgaXQuIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIHRha2luZyB0aGUgYWRkcmVzcyBvZiBgc29ja19tYXBfbG9va3VwYCwgaW5saW5pbmcgaXMgbGVzcyBsaWtlbHksIGJ1dCBzdGlsbCBhIGNvbmNlcm4uIEl0ICpjb3VsZCogd29yayBpZiB3ZSBleHBsaWNpdGx5IHByb3ZpZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wgdG8gU3l6a2FsbGVyLCBidXQgaXQncyBhbHdheXMgY2xlYW5lciBhbmQgbW9yZSByb2J1c3QgdG8gdXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGlmIHBvc3NpYmxlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB3ZSAqY2FuKiB1c2U/IGBzb2NrX21hcF9vcHNgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCdzIGEgc3RydWN0IGFuZCBub3QgYSBmdW5jdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGVpdGhlciBgc29ja19tYXBfbG9va3VwYCBvciBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAuIFRoaXMgd2lsbCBiZSBteSBuZXh0IGFyZWEgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjE4Ljc0MDgwOTMyNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zb2NrX21hcF9sb29rdXBfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzg4PXN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQwMD1zdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwNzpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00MDgtXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ3PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTU6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1Ni1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3NT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgzOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy02ODQtXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjM9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyODpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjE4Ljc4OTc2MzczMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgzOTcxMDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBMb29rdXAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBicGZfc2tfcmVkaXJlY3RfbWFwYCBhbmQgYGJwZl9tc2dfcmVkaXJlY3RfbWFwYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgYSBwb2ludCBvZiBpbnRlcmVzdCwgYnV0IHRoZW4gSSByZW1lbWJlciwgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBtb2RpZnlpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgbm90IHRoZSBsb3dlci1sZXZlbCBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAgZnVuY3Rpb24uXG5cblJpZ2h0LCBJIHNlZSB0aGUgZGlmZiBub3cuIFRoZXkndmUgY2hhbmdlZCB0aGUgcmVmY291bnRpbmcgaW4gYHNvY2tfbWFwX2xvb2t1cGAuIEluc3RlYWQgb2YgYHJlZmNvdW50X2luY19ub3RfemVyb2AsIHRoZXkncmUgdXNpbmcgYHNvY2tfaG9sZGAuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGludGVuZGVkIG1ldGhvZCBvZiBidW1waW5nIHRoZSByZWZlcmVuY2UgY291bnQuXG5cbkFoYSEgU28gdGhlIGNydWNpYWwgY2hhbmdlIGlzIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGlua2luZyBtb3JlIGFib3V0IGhvdyBCUEYgbWFwcyB3b3JrLCBJIHJlYWxpemUgdGhhdCBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSdyZSBjYWxsZWQgdmlhIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIFBlcmZlY3QhIFRoYXQncyBteSB0YXJnZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIG15IGZvY3VzIGNhbiByZW1haW4gb24gdGhlc2UgdHdvIGZ1bmN0aW9uczsgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhleSdyZSB0aGUgb25lcyBJIG5lZWQgdG8gZXhhbWluZSBjbG9zZWx5LiBBbmQsIGJlY2F1c2Ugb2YgaG93IFN5emthbGxlciBhbmQga2NvdiB3b3JrLCB0aGUgY292ZXJhZ2Ugd2lsbCBzdGlsbCBiZSB0cmFja2VkIGZvciB0aGVtLCBldmVuIHdpdGggdGhlc2UgY2hhbmdlcyBkZWVwZXIgZG93biBpbiB0aGUgc3RhY2suIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBgc29ja19oYXNoX2xvb2t1cGAgdG9vLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjMxLjYyOTQ3NjY3N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NjczMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19oYXNoX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODgxOnNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIHUzMiBoYXNoLCB2b2lkICprZXksXFxubmV0L2NvcmUvc29ja19tYXAuYy04ODItXFx0XFx0XFx0ICB1MzIga2V5X3NpemUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjg5NTpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19oYXNoX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTkwNS1cXHRidWNrZXQgPSBzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkwNjpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTkwNy1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE4PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkzMzpcXHRlbGVtX3Byb2JlID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBlbGVtLVxcdTAwM2VoYXNoLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBlbGVtLVxcdTAwM2VrZXksIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05NDM9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjk1NTpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Ni1cXHRpZiAoZWxlbSkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05OTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAyMzpcXHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhcXHUwMDI2YnVja2V0LVxcdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjQtXFx0aWYgKGVsZW0gXFx1MDAyNlxcdTAwMjYgZmxhZ3MgPT0gQlBGX05PRVhJU1QpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA1OD1zdGF0aWMgaW50IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDcwLVxcdGhlYWQgPSBcXHUwMDI2c29ja19oYXNoX3NlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCktXFx1MDAzZWhlYWQ7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDcxOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3Mi1cXHRpZiAoIWVsZW0pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDY9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExOTk6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjA1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIwNjpcXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDctXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTQ6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTctXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjE4OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxOS1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUzPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjE6XFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjYyLVxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI4MT1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjg5OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI5MC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDc9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NDpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX2hhc2hfbG9va3VwLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1NTpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19oYXNoX2xvb2t1cF9zeXMsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDU2LVxcdC5tYXBfcmVsZWFzZV91cmVmXFx0PSBzb2NrX2hhc2hfcmVsZWFzZV9wcm9ncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6MzEuNjc4NDUwMjk1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDc4MTM3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBTb2NrZXQgTG9va3VwIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgc29ja19oYXNoX2xvb2t1cGAgaXMgaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgc29ja19oYXNoX29wc2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGxldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIHdoaWNoIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYC4gQWgsIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdGhhdC5cblxuU28gdGhlIGNvcmUgb2YgdGhlIG1hdHRlciwgd2hhdCBJICpyZWFsbHkqIG5lZWQgdG8gZm9jdXMgb24sIGFyZSB0aGUgQlBGIGhlbHBlcnMgdGhhdCB1dGlsaXplIGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAgZGlyZWN0bHkuIExldCdzIHNlZS4uLiB0aG9zZSB3b3VsZCBiZTpcblxuKiAgIGBicGZfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NrX2xvb2t1cF91ZHBgXG4qICAgYGJwZl90Y19za19sb29rdXBfdGNwYFxuKiAgIGBicGZfdGNfc2tfbG9va3VwX3VkcGBcbiogICBgYnBmX3hkcF9za19sb29rdXBfdWRwYFxuKiAgIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgXG4qICAgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcGBcbiogICBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwYFxuKiAgIGBzb2NrX21hcF9sb29rdXBgXG4qICAgYHNvY2tfaGFzaF9sb29rdXBgXG5cbkknbGwgYWRkIHRob3NlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCByaWdodCBhd2F5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgY29uZmlybSB0aGUgbmFtZSBhZ2FpbiwgaXQgc2VlbXMgcmlnaHQsIEknbGwgY2hlY2sgdGhhdCBgYnBmX3NrX2xvb2t1cF90Y3BgICppcyogYWN0dWFsbHkgdGhlIGNvcnJlY3QgbmFtZS4uLiBZZXAsIGBCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCAuLi4pYCBjb25maXJtcyBpdC4gU28sIHRoYXQncyBkZWZpbmVkIGNvcnJlY3RseS4gRXhjZWxsZW50LCBsZXQncyBub3cgY2hlY2sgaWYgYGJwZl9za19sb29rdXBfdGNwYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTU6NDQuNzU2NTkwODYyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzMjkzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3NrX2xvb2t1cF90Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU1OjQ0LjgwNDEzMDE3MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTc5OTEyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGZpZWxkIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGdvb2QgbmV3cyBpcywgaWYgaXQncyBub24tc3RhdGljLCBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byB0YXJnZXQgaXQgZm9yIGZ1enppbmcuIFRoYXQncyB0aGUga2V5IHBvaW50OiBTeXprYWxsZXLigJlzIGNhcGFiaWxpdGllcyBleHRlbmQgYmV5b25kIGp1c3QgZXhwbGljaXRseSBleHBvcnRlZCBzeW1ib2xzLlxuXG5TbywgdGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHNvY2tfbWFwX2xvb2t1cGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQncyB0aGUgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0IG9yIGlmIEkgbmVlZCB0byBkbyBzb21lIG1vcmUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NTo1My4zODQwNDYxNloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MTAxOTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNvY2tfbWFwX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NTo1My40MzE5NjU4NjhaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU4ODQ4NTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgU3RhbGxlZCBQcm9jZXNzKipcblxuQWxyaWdodCwgdGhpcyBmZWVsc+KApnN0dWNrLiBEZWFkIGluIHRoZSB3YXRlci4gRXZlcnl0aGluZ+KAmXMganVzdCAqc3RhdGljKi4gTm8gYXBwYXJlbnQgbW92ZW1lbnQsIG5vIG9idmlvdXMgcHJvZ3Jlc3MuIEJlZm9yZSBJIHN0YXJ0IHRlYXJpbmcgaW50byB0aGUga2VybmVsIHdpdGggc3RyYWNlIG9yIGdkYiwgSSdtIGdvaW5nIHRvIHRha2UgYSBzbGlnaHRseSBtb3JlIHN1cmdpY2FsIGFwcHJvYWNoLiBUaGUgcHJvYmxlbSBjb3VsZCBsaWUgaW4gYSBsb3Qgb2YgcGxhY2VzLCBidXQgZ2l2ZW4gdGhlIHN5bXB0b21zLCBteSBndXQgc2F5cyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gc29ja2V0IG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYHNvY2tfaGFzaF9sb29rdXBgIGlzIGFjY2Vzc2libGUgZnJvbSB3aGVyZSBJJ20gc3VzcGVjdGluZyB0aGUgcHJvY2VzcyBpcyBodW5nLiBJcyB0aGF0IHN5bWJvbCBleHBvcnRlZCBpbiB0aGUga2VybmVsIGltYWdlIGZvciB0aGlzIGJ1aWxkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBkaXJlY3RseSwgYmVjYXVzZSBpZiB0aGF0J3Mgbm90IGV4cG9zZWQsIG15IGRlYnVnZ2luZyBpcyBnb2luZyB0byB0YWtlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgKGFuZCBtb3JlIHBhaW5mdWwpIHRyYWNrLiBMZXQncyBzZWUgaWYgdGhhdCdzIGV4cG9zZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjowMy4wMjA0NTQ4OTVaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDkxOTY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzb2NrX2hhc2hfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjAzLjA2Mzk1MjM3NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDc4NTU1ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgZmVlbHMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkgbmVlZGVkIHRvIGluY2x1ZGUgc2V2ZXJhbCBCUEYgZnVuY3Rpb25zIChgYnBmX3NrX3JlZGlyZWN0X21hcGAsIGBicGZfbXNnX3JlZGlyZWN0X21hcGAsIGV0Yy4pIGJlY2F1c2UgdGhleSByZWxhdGUgdG8gbG9va3Vwcy4gSG93ZXZlciwgdGhvc2UgZnVuY3Rpb25zIHVsdGltYXRlbHkgY2FsbCBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAgYW5kIGBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbWAsIGJ1dCBJIHJlYWxpemUgbm93IHRoYXQgdGhvc2UgYXJlbid0ICpkaXJlY3RseSogd2hlcmUgdGhlIGNvZGUgd2FzIG1vZGlmaWVkLiBUaGUgYWN0dWFsIGNoYW5nZXMgYXJlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBTbywgSSdsbCByZXN0cmljdCBteSBmb2N1cyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIHJlc2lkZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGluIHRoZSBwcm92aWRlZCBwYXRjaC4gWWVzLCB0aGUgY2hhbmdlIGlzIGluZGVlZCB3aXRoaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIHNpbWlsYXJseSBpbiBgc29ja19oYXNoX2xvb2t1cGAuIEkgbmVlZCB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBzb2NrX21hcF9sb29rdXBgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBzb2NrX21hcF9vcHNgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgaXMgdGllZCB0byBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQlBGIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBtYXAgbG9va3VwcyBvbiBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC5cblxuRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgdmVyeSBpbnRlcmVzdGluZy4gU3l6a2FsbGVyIGNhbiBlYXNpbHkgdGFyZ2V0IHRoaXMgYnkgY3JlYXRpbmcgYSBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBjYWxsaW5nIGBicGZfbWFwX2xvb2t1cF9lbGVtYCBmcm9tIGEgQlBGIHByb2dyYW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0gY2FsbCBwYXRoIHRob3VnaC4gYG1hcF9sb29rdXBfZWxlbWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBjYWxscyBgbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5YCBpZiB0aGF0IGlzIHNldCwgb3RoZXJ3aXNlIGNhbGxzIGBtYXBfbG9va3VwX2VsZW1gLiBGb3IgYHNvY2tfbWFwYCwgYG1hcF9sb29rdXBfZWxlbV9zeXNfb25seWAgaXMgc2V0IHRvIGBzb2NrX21hcF9sb29rdXBfc3lzYC4gVGh1cywgdGhlIHN5c2NhbGwgYGJwZihCUEZfTUFQX0xPT0tVUF9FTEVNKWAgd2lsbCBjYWxsIGBzb2NrX21hcF9sb29rdXBfc3lzYCwgbm90IGBzb2NrX21hcF9sb29rdXBgLiBIb3dldmVyLCB0aGUgaGVscGVyIGBicGZfbWFwX2xvb2t1cF9lbGVtYCB3aWxsIGNhbGwgYHNvY2tfbWFwX2xvb2t1cGAuIFRoZSB2ZXJpZmllciByZXBsYWNlcyB0aGUgaGVscGVyIGNhbGwgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIGBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9sb29rdXBfZWxlbWAsIHdoaWNoIGlzIGBzb2NrX21hcF9sb29rdXBgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlICppcyogcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgKmZ1enphYmxlKiBmcm9tIEJQRiBwcm9ncmFtcy5cblxuT2theSwgdGhpcyBzZWVtcyBsaWtlIGEgY29uY3JldGUgYW5kIHRhcmdldGFibGUgYXJlYS4gSSBmZWVsIGNvbmZpZGVudCBpbiBhc3Nlc3NpbmcgaXQgYXMgYW4gaW1wb3J0YW50IHNwb3QgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjM4LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjoxNy44NDk1MTQ4NzdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgxOTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3RjX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl90Y19za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfeGRwX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl94ZHBfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICAgIFwic29ja19oYXNoX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgYW5kIEJQRiBzb2NrbWFwL3NvY2toYXNoIG1hcCBsb29rdXAgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgcmVmYWN0b3Igc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBhbmQgQlBGIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NrX2xvb2t1cF91ZHBcIixcbiAgICBcImJwZl90Y19za19sb29rdXBfdGNwXCIsXG4gICAgXCJicGZfdGNfc2tfbG9va3VwX3VkcFwiLFxuICAgIFwiYnBmX3hkcF9za19sb29rdXBfdWRwXCIsXG4gICAgXCJicGZfeGRwX3NrX2xvb2t1cF90Y3BcIixcbiAgICBcImJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcFwiLFxuICAgIFwiYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwXCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIGFuZCBCUEYgc29ja21hcC9zb2NraGFzaCBtYXAgbG9va3VwIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIHJlZmFjdG9yIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGFyZSByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgYW5kIEJQRiBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6NTY6MTcuOTI4MzQxNDk0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE3Mjk4NDU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjE3LjkyODkyMjg0NFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzE3MjM5ODA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NzE4OTJhNzY5Y2NhNGM1NWVhYjY5NDk2NmEzZmU1MjNiZTYzMThmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6NTI6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAzNDIzNzM0MTI0YTViLi4wMzFmYjJhYWQ3OTJhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzE2Nyw2ICs3MTY3LDI4IEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpcbiticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbitcbitcdC8qXG4rXHQgKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiBzay1cdTAwM2Vyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWxcbitcdCAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbitcdCAqL1xuK1x0aWYgKHNrMiAhPSBzaykge1xuK1x0XHRzb2NrX2dlbl9wdXQoc2spO1xuK1x0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQuICovXG4rXHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbitcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHRzayA9IHNrMjtcbitcdH1cbitcbitcdHJldHVybiBzaztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzE3NiwyMiArNzE5OCw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRcdFx0XHQgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBzZGlmKTtcbiBcbi1cdGlmIChzaykge1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4tXG4tXHRcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXHUwMDNlcnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrXG4tXHRcdCAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbi1cdFx0ICovXG4tXHRcdGlmIChzazIgIT0gc2spIHtcbi1cdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuLVx0XHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAoc2spXG4rXHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzIyMiwyMiArNzIzMCw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggOWVmYmQ4Y2E3ZGI4My4uY2E0OWJjN2Y4Njg3YyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0zOTIsOCArMzkyLDggQEAgc3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG5AQCAtMTIxOCw4ICsxMjE4LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzo1NjoxNy45Mjg5MjM4MzRaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNzIzNjg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUmVmYWN0b3JpbmcgYW5kIFJlZmNvdW50IENoYW5nZSBpbiBTb2NrZXQgTG9va3VwKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gSW4gYGZpbHRlci5jYCwgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBjb2RlIHJlZmFjdG9yaW5nOyB0aGV5J3JlIGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgZnJvbSBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgLiBOb3RoaW5nIHRvIHNlZSB0aGVyZSByZWFsbHksIGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLlxuXG5Ob3csIGBzb2NrX21hcC5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBUaGV5J3JlIGNoYW5naW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhleSd2ZSBzd2FwcGVkIG91dCBgcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudClgIGZvciBgc29ja19ob2xkKHNrKWAuIFRoYXQncyBhIGRlZmluaXRlIHNoaWZ0LiBgc29ja19ob2xkYCB1bmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50cyB0aGUgcmVmY291bnQsIHdoZXJlYXMgdGhlIG9yaWdpbmFsIGNoZWNrIGVuc3VyZXMgdGhlIHJlZmNvdW50IGlzbid0IGFscmVhZHkgemVyby4gVGhpcyBzY3JlYW1zIHJlZmNvdW50LXJlbGF0ZWQgYnVnIGZpeCBvciBjaGFuZ2Ug4oCTIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIG1pdGlnYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBLQVNBTi9yZWZjb3VudC1yZWxhdGVkLCBub3QgS01TQU4uXG5cbkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB0aGUgcHJvbXB0J3MgY3JpdGVyaWE6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZXNzIHdpdGggYm91bmRzIGNoZWNrcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M/IE5vcGUsIG5vbmUgb2YgdGhvc2UgYXBwbHkgaGVyZS4gSXQncyBhIHJlZmFjdG9yaW5nIGFuZCBhIHJlZmNvdW50IGNoYW5nZS4gS01TQU4gaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIHRoaXMgaXNuJ3QuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBgc29ja19ob2xkYCBmdW5jdGlvbiByZWFsbHkgZG9lcyBpbmNyZW1lbnQgdGhlIHJlZmNvdW50IHVuY29uZGl0aW9uYWxseS4gWWVwLCBpdCdzIGp1c3QgYHJlZmNvdW50X2luYyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpYC4gSWYgdGhlIHJlZmNvdW50IHdhcyBwcmV2aW91c2x5IHplcm8sIHRoZW4gYHNvY2tfaG9sZGAgd2lsbCBpbmNyZW1lbnQgaXQgZnJvbSB6ZXJvIHRvIG9uZS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlLiBJdCBpcyBhYnNvbHV0ZWx5IEtBU0FOL3JlZmNvdW50IHRlcnJpdG9yeS5cblxuT2theSwgbGV0IG1lIHB1dCB0aGlzIHRvZ2V0aGVyIGludG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uOlxuXG5UaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgY29kZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBhbmQgbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AsIHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIHJlbGF0ZSB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFsdGVyIGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd2lsbCBiZSBkZXRlY3RlZCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc2LCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjU2OjMxLjEwMTI5NjY0OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHNvY2tldCBsb29rdXAgbG9naWMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBieSBleHRyYWN0aW5nIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIGFuZCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2Agd2l0aCBgc29ja19ob2xkYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc29ja2V0IGxvb2t1cCBsb2dpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGJ5IGV4dHJhY3RpbmcgYGJwZl9za19sb29rdXBfZnVsbF9za2AgYW5kIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aXRoIGBzb2NrX2hvbGRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[1] Phase: Succeeded StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 13:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 13:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2] Phase: Succeeded StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","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-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 13:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 13:56:42 +0000 UTC FinishedAt: 2026-08-13 13:56:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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-workflow686nc/series-workflow686nc-convert-artifact-2765219307/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 13:56:52 +0000 UTC FinishedAt: 2026-08-13 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 13:56:52 +0000 UTC FinishedAt: 2026-08-13 14:14:29 +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:*2a6f535e-30c2-43c2-8df4-cbe8141ce173,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-workflow686nc/series-workflow686nc-convert-artifact-2765219307/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": "9ba26110-8a91-43ba-b00d-13148e2f749f", "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-workflow686nc/series-workflow686nc-build-action-1811175913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:56:52 +0000 UTC FinishedAt: 2026-08-13 14:14:19 +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:*2a6f535e-30c2-43c2-8df4-cbe8141ce173,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-workflow686nc/series-workflow686nc-convert-artifact-2765219307/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": "9ba26110-8a91-43ba-b00d-13148e2f749f", "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-workflow686nc/series-workflow686nc-build-action-1811175913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 14:14:29 +0000 UTC FinishedAt: 2026-08-13 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 14:14:29 +0000 UTC FinishedAt: 2026-08-13 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 14:14:29 +0000 UTC FinishedAt: 2026-08-13 14:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 14:14:29 +0000 UTC FinishedAt: 2026-08-13 14:14:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","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-workflow686nc/series-workflow686nc-convert-artifact-3960716482/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 14:14:39 +0000 UTC FinishedAt: 2026-08-13 14:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 14:14:39 +0000 UTC FinishedAt: 2026-08-13 14:16:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ba26110-8a91-43ba-b00d-13148e2f749f,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-workflow686nc/series-workflow686nc-build-action-1811175913/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-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 14:16:35 +0000 UTC FinishedAt: 2026-08-13 14:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:16:35 +0000 UTC FinishedAt: 2026-08-13 14:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 14:16:35 +0000 UTC FinishedAt: 2026-08-13 14:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 14:16:35 +0000 UTC FinishedAt: 2026-08-13 14:35:43 +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:*2a6f535e-30c2-43c2-8df4-cbe8141ce173,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-workflow686nc/series-workflow686nc-convert-artifact-3960716482/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": "60bfd49a-c479-4667-89a6-598c727630ae", "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-workflow686nc/series-workflow686nc-build-action-521301782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:16:35 +0000 UTC FinishedAt: 2026-08-13 14:35:33 +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:*2a6f535e-30c2-43c2-8df4-cbe8141ce173,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-workflow686nc/series-workflow686nc-convert-artifact-3960716482/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": "60bfd49a-c479-4667-89a6-598c727630ae", "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-workflow686nc/series-workflow686nc-build-action-521301782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 14:35:43 +0000 UTC FinishedAt: 2026-08-13 14:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 14:35:43 +0000 UTC FinishedAt: 2026-08-13 14:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 14:35:43 +0000 UTC FinishedAt: 2026-08-13 14:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 14:35:43 +0000 UTC FinishedAt: 2026-08-13 14:37:25 +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:*60bfd49a-c479-4667-89a6-598c727630ae,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-workflow686nc/series-workflow686nc-build-action-521301782/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-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"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:*9ba26110-8a91-43ba-b00d-13148e2f749f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60bfd49a-c479-4667-89a6-598c727630ae,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-workflow686nc/series-workflow686nc-build-action-1811175913/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-workflow686nc/series-workflow686nc-build-action-521301782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 14:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 14:37:42 +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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"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-workflow686nc/series-workflow686nc-convert-artifact-995372023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 14:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 14:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:37:35 +0000 UTC FinishedAt: 2026-08-13 14:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 14:37:45 +0000 UTC FinishedAt: 2026-08-13 17:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow686nc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_sk_lookup_tcp","bpf_sk_lookup_udp","bpf_tc_sk_lookup_tcp","bpf_tc_sk_lookup_udp","bpf_xdp_sk_lookup_udp","bpf_xdp_sk_lookup_tcp","bpf_sock_addr_sk_lookup_tcp","bpf_sock_addr_sk_lookup_udp","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"750d4d17-edb6-4c25-8112-fb34cbccbc5f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 14:37:45 +0000 UTC FinishedAt: 2026-08-13 17:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ba26110-8a91-43ba-b00d-13148e2f749f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60bfd49a-c479-4667-89a6-598c727630ae,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-workflow686nc/series-workflow686nc-build-action-1811175913/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-workflow686nc/series-workflow686nc-build-action-521301782/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-workflow686nc/series-workflow686nc-convert-artifact-995372023/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,}