Name: series-workflowhq277 Phase: Running StartedAt: 2026-08-21 07:04:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq277[0] Phase: Running StartedAt: 2026-08-21 07:04:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq277[0].run-triage Phase: Running StartedAt: 2026-08-21 07:04:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq277[0].run-triage(0) Phase: Running StartedAt: 2026-08-21 07:04:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e264c048709469096f3927fcd35a2c45f9e38eb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CONNTRACK_H323" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e264c048709469096f3927fcd35a2c45f9e38eb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_CONNTRACK", "NF_CONNTRACK_H323" ], "series_id": "c3a4db82-6382-49eb-a29b-02fc4fa4f9be" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "DecodeRasMessage", "DecodeMultimediaSystemControlMessage", "DecodeQ931" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywKICAgICYjMzQ7RGVjb2RlUTkzMSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGRlY29kZV9pbnRgIHdoZXJlIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBgYnMtXHUwMDNlY3VyYCBpcyBhZHZhbmNlZCB0d2ljZSBieSBgbGVuYCB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIgZmllbGQgd2l0aCB0aGUgYERFQ09ERWAgYXR0cmlidXRlICh3aGljaCBvbmx5IGFwcGxpZXMgdG8gdGhlIGB0aW1lVG9MaXZlYCBmaWVsZCBpbiB0aGUgSC4zMjMgQVNOLjEgc2NoZW1hKS4gSG93ZXZlciwgYmVjYXVzZSBgdGltZVRvTGl2ZWAgaXMgYWx3YXlzIGFuIGV4dGVuc2lvbiBjb21wb25lbnQgaW4gYFJlZ2lzdHJhdGlvblJlcXVlc3RgIGFuZCBgUmVnaXN0cmF0aW9uQ29uZmlybWAsIHRoZSBjYWxsZXIgYGRlY29kZV9zZXFgIHNhdmVzIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBiZWZvcmUgZGVjb2RpbmcgdGhlIGNvbXBvbmVudCBhbmQgdW5jb25kaXRpb25hbGx5IHJlc3RvcmVzIGl0IHRvIGBiZWcgJiM0MzsgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCkgYWZ0ZXJ3YXJkcy4gQXMgYSByZXN1bHQsIHRoZSBkb3VibGUgYWR2YW5jZSBpbiBgZGVjb2RlX2ludGAgaXMgaW1tZWRpYXRlbHkgdW5kb25lIGJ5IHRoZSBjYWxsZXIgYW5kIGhhcyBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiBzdWJzZXF1ZW50IHBhcnNpbmcuXG5cbkZ1cnRoZXJtb3JlLCB0aGUgYWN0dWFsIG1lbW9yeSByZWFkIGluIGBnZXRfdWludGAgb2NjdXJzIGJlZm9yZSB0aGUgZXJyb25lb3VzIHNlY29uZCBhZHZhbmNlIGFuZCBpcyBwcm9wZXJseSBib3VuZHMtY2hlY2tlZCBieSBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuIFRoZXJlZm9yZSwgdGhpcyBidWcgZG9lcyBub3QgY2F1c2UgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMsIG91dC1vZi1ib3VuZHMgd3JpdGVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gU2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLCBsZWFrZWQsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGZvciB0aGlzIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFTTi4xIGRlY29kZXIgZm9yIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgd2hlcmUgdGhlIGJpdHN0cmVhbSBjdXJzb3Igd2FzIGluY29ycmVjdGx5IGFkdmFuY2VkIHR3aWNlIHdoZW4gZGVjb2RpbmcgYW4gaW50ZWdlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0d29yayB0cmFmZmljIHdoZW4gSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmNjZGE0NWVhZDc2YTU0ZmUxNTZlNzliOTc4YmVlNzhhNDk0MmFjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjMwOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbkBAIC0zMzYsOCAmIzQzOzMzNiw5IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gXHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuIFx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbiBcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIFx0XHR9XG4tXHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVU5DTzpcbiBcdFx0QllURV9BTElHTihicyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywKICAgICYjMzQ7RGVjb2RlUTkzMSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQVNOLjEgZGVjb2RlciBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyB3aGVyZSB0aGUgYml0c3RyZWFtIGN1cnNvciB3YXMgaW5jb3JyZWN0bHkgYWR2YW5jZWQgdHdpY2Ugd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyY2NkYTQ1ZWFkNzZhNTRmZTE1NmU3OWI5NzhiZWU3OGE0OTQyYWMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDc6MzA6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCkBAIC0zMzYsOCAmIzQzOzMzNiw5IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsCiAJCQl1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtJmd0O2xiOwogCQkJUFJJTlQoJiMzNDsgPSAldSYjMzQ7LCB2KTsKIAkJCSooKHVuc2lnbmVkIGludCAqKShiYXNlICYjNDM7IGYtJmd0O29mZnNldCkpID0gdjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQl9Ci0JCWJzLSZndDtjdXIgJiM0Mzs9IGxlbjsKIAkJYnJlYWs7CiAJY2FzZSBVTkNPOgogCQlCWVRFX0FMSUdOKGJzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEguMzIzIEFTTi4xIERlY29kZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24uIExldCYjMzk7cyBkaXZlIGluLgoKUmlnaHQsIEkgc2VlIHRoZSBkaWZmLiBUaGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24mIzM5O3MgbG9naWMuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW5gIHVuY29uZGl0aW9uYWxseSBmb2xsb3dpbmcgdGhlIGBpZiAoYmFzZSlgIGJsb2NrLiBOb3csIHRoZXkmIzM5O3ZlIG1vdmVkIHRoYXQgaW5jcmVtZW50IHdpdGhpbiBhbiBgZWxzZWAgY2xhdXNlLiBUaGV5IGFkZGVkIGFuIGVsc2UgYmxvY2ssIGNvbnRhaW5pbmcgYGJzLSZndDtjdXIgJiM0Mzs9IGxlbjtgLiBUaGlzIG1lYW5zIGlmIGBiYXNlYCBpcyBudWxsLCB0aGUgY29kZSB3b3VsZCBhZHZhbmNlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIChgYnMtJmd0O2N1cmApIGJ5IGBsZW5gICpvbmx5KiB3aXRoaW4gdGhlIGBlbHNlYCBibG9jay4gSW50ZXJlc3RpbmcuCgpJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvcmlnaW5hbCBsb2dpYy4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGlzIGBpZiAoYmFzZSlgIGNoZWNrLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRlY29kZV9pbnRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGJhc2VgIG1pZ2h0IGJlIG51bGwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aHkgdGhlIHVuY29uZGl0aW9uYWwgaW5jcmVtZW50IHdhcyBwcm9ibGVtYXRpYy4gV2hhdCBzY2VuYXJpb3MgYXJlIHdlIGNvdmVyaW5nIGhlcmU/IElzIHRoZXJlIGEgc3VidGxlIGJ1ZyBiZWluZyBhZGRyZXNzZWQsIG9yIGlzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/CgpUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGUgY3Vyc29yIHdhcyBiZWluZyBhZHZhbmNlZCBldmVuIGlmIHRoZXJlIHdhcyBubyBkYXRhIHRvIHdyaXRlLCBtZWFuaW5nIHdlJiMzOTtkIGluY29ycmVjdGx5IGFkdmFuY2UgdG8gdGhlIG5leHQgQVNOLjEgZmllbGQgdG8gYmUgZGVjb2RlZC4gTm93IGl0ICpvbmx5KiBhZHZhbmNlcyB0aGUgY3Vyc29yIGlmIHRoZXJlJiMzOTtzIG5vIGRlc3RpbmF0aW9uIGZvciB0aGUgZGVjb2RlZCBpbnRlZ2VyLiBUaGlzIGlzIGNlcnRhaW5seSBhIHBvdGVudGlhbCBidWcgZml4LiBJIHNob3VsZCB2ZXJpZnkgdGhpcyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVjb2RlX2ludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTExMD1zdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTExOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMTItc3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIzPXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjYtXHRkZWNvZGVfb2lkLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI3Olx0ZGVjb2RlX2ludCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyOC1cdGRlY29kZV9lbnVtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTI5Mz1zdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMxMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMxMjpzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzEzLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSC4zMjMgQ29ubnRyYWNrIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdvcmtzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBBU04uMSBkZWNvZGluZyBwcm9jZXNzIGZvciBILjMyMyB0cmFmZmljLCB3aGljaCBpcyBjZW50cmFsIHRvIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgaGFuZGxlcyBILjMyMyBzaWduYWxpbmcuIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkmIzM5O3JlIHBhcnNpbmcgdGhlIEguMjI1LjAgYW5kIFJBUyBtZXNzYWdlcyB0aGF0IGNvbnRhaW4gdGhlIGNydWNpYWwgaW5mb3JtYXRpb24gZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuIERlY29kaW5nIHRoZSBpbnRlZ2VycyBlZmZlY3RpdmVseSwgYW5kIGhvdyB0aG9zZSBpbnRlZ2VycyByZWxhdGUgdG8gdGhlIGRhdGEsIGlzIG9mdGVuIHRoZSBtb3N0IGZ1bmRhbWVudGFsIHBhcnQgb2YgdW5kZXJzdGFuZGluZyBob3cgcHJvdG9jb2xzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBnb29kIEFTTi4xIGRlY29kZXJzIGNhbiBnZXQgcHJldHR5IGRlbnNlIHByZXR0eSBxdWlja2x5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEJFUi9ERVIgZW5jb2Rpbmcgc3BlY2lmaWNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTI6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDMxMzpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzE0Olx0e1xuIDMxNTpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAzMTY6XHRcbiAzMTc6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDMxODpcdFxuIDMxOTpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzIwOlx0XHRjYXNlIEJZVEU6XHRcdC8qIFJhbmdlID09IDI1NiAqL1xuIDMyMTpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMjI6XHRcdFx0YnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAzMjM6XHRcdFx0YnJlYWs7XG4gMzI0Olx0XHRjYXNlIFdPUkQ6XHRcdC8qIDI1NyBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gNjRLICovXG4gMzI1Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyNjpcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IDI7XG4gMzI3Olx0XHRcdGJyZWFrO1xuIDMyODpcdFx0Y2FzZSBDT05TOlx0XHQvKiA2NEsgXHUwMDNjIFJhbmdlIFx1MDAzYyA0RyAqL1xuIDMyOTpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXG4gMzMwOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzMxOlx0XHRcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSAmIzQzOyAxO1xuIDMzMjpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcbiAzMzM6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzM1Olx0XHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG4gMzM2Olx0XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuIDMzNzpcdFx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbiAzMzg6XHRcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbiAzMzk6XHRcdFx0fSBlbHNlIHtcbiAzNDA6XHRcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzNDE6XHRcdFx0fVxuIDM0MjpcdFx0XHRicmVhaztcbiAzNDM6XHRcdGNhc2UgVU5DTzpcbiAzNDQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzQ1Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzNDY6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNDc6XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gMzQ4Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0OTpcdFx0XHRicmVhaztcbiAzNTA6XHRcdGRlZmF1bHQ6XHRcdC8qIDIgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDI1NSAqL1xuIDM1MTpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzUyOlx0XHRcdGJyZWFrO1xuIDM1MzpcdFx0fVxuIDM1NDpcdFxuIDM1NTpcdFx0UFJJTlQoXCYjMzQ7XFxuXCYjMzQ7KTtcbiAzNTY6XHRcbiAzNTc6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzNTg6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzU5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDM2MDpcdH1cbiAzNjE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjUwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGdldF91aW50YCYjMzk7cyBCaXRzdHJlYW0gTWFuYWdlbWVudCoqCgpSaWdodCwgc28gYGdldF91aW50KGJzLCBsZW4pYCBpcyBjbGVhcmx5IHVwZGF0aW5nIHRoZSBiaXRzdHJlYW0mIzM5O3MgY3VycmVudCBwb3NpdGlvbiwgYGJzLSZndDtjdXJgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBiZWhhdmlvciwgYnV0IEkgYWx3YXlzIGxpa2UgdG8gY29uZmlybSB0aGVzZSB0aGluZ3Mg4oCTIHBhcnRpY3VsYXJseSBpbiBiaXRzdHJlYW0gbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCB3aGVyZSBvZmYtYnktb25lIGVycm9ycyBjYW4gYmUgYnJ1dGFsLiBJdCYjMzk7cyBlYXN5IHRvIGdldCBsb3N0IHdpdGggYWxsIHRoZXNlIGJpdC1sZXZlbCBvcGVyYXRpb25zLiBTbywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZ2V0X3VpbnRgIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSB0aGluayBpdCYjMzk7cyBkb2luZyDigJMgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgYWR2YW5jaW5nIGBicy0mZ3Q7Y3VyYCBieSBgbGVuYCBiaXRzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiBhbiBpbnRlZ2VyIG92ZXJmbG93PyBEb2VzIGl0IGNvcnJlY3RseSBoYW5kbGUgdGhlIGVkZ2UgY2FzZXMgb2YgcmVhZGluZyBhIGZ1bGwgYnl0ZT8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy4gQSByb2J1c3QgYml0c3RyZWFtIHJlYWRlciBpcyBjcnVjaWFsIGZvciByZWxpYWJpbGl0eS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF91aW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTA0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNDktICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNS1cdFx0aWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcdC8qIHRpbWVUb0xpdmUgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMzNjpcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtXHUwMDNlbGI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzctXHRcdFx0UFJJTlQoXCYjMzQ7ID0gJXVcJiMzNDssIHYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgY29kZSBhbmQgZnVsbHkgZW5nYWdlZDoKCioqRGl2aW5nIGludG8gYGdldF91aW50YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIGludG8gYGdldF91aW50YC4gSSYjMzk7dmUgYmVlbiBtZWFuaW5nIHRvIHJlYWxseSBuYWlsIGRvd24gaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMsIGFuZCB0aGlzIHNlZW1zIGxpa2UgdGhlIHBlcmZlY3QgbW9tZW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYXliZSBldmVuIHNwb3QgYSBmZXcgYXJlYXMgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgY2xhcmlmaWNhdGlvbiBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyB1bnNpZ25lZCBpbnRlZ2VycywgYW5kIHdoYXQgdGhlIGVkZ2UgY2FzZXMgYXJlLiBJIGJldCB0aGVyZSBhcmUgc29tZSBjbGV2ZXIgYml0d2lzZSBvcGVyYXRpb25zIGluIHRoZXJlIHRoYXQgSSBjYW4gYWx3YXlzIGFwcHJlY2lhdGUuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbiAyNTE6XHR7XG4gMjUyOlx0XHR1bnNpZ25lZCBpbnQgdiA9IDA7XG4gMjUzOlx0XG4gMjU0Olx0XHRzd2l0Y2ggKGIpIHtcbiAyNTU6XHRcdGNhc2UgNDpcbiAyNTY6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNTc6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjU4Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1OTpcdFx0Y2FzZSAzOlxuIDI2MDpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2MTpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNjI6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjYzOlx0XHRjYXNlIDI6XG4gMjY0Olx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjY1Olx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2NjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjc6XHRcdGNhc2UgMTpcbiAyNjg6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBCdWcgRml4KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFllcywgYGdldF91aW50YCAqZG9lcyogYWR2YW5jZSBgYnMtJmd0O2N1cmAgYnkgYGJgLCB3aGljaCBpbiB0aGlzIGNhc2UsIGBiYCByZXByZXNlbnRzIGBsZW5gLiBTbywgYmVmb3JlIHRoZSBwYXRjaCB3YXMgYXBwbGllZCwgdGhlcmUgd2FzIGEgY2xlYXIgaXNzdWUuIFRoZSBsaW5lIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW5gIHdhcyBleGVjdXRlZCAqYWZ0ZXIqIGBnZXRfdWludGAgaGFkIGFscmVhZHkgYnVtcGVkIGBicy0mZ3Q7Y3VyYCBieSBgbGVuYC4gVGhhdCBtZWFudCBgYnMtJmd0O2N1cmAgd2FzIGdldHRpbmcgaW5jcmVtZW50ZWQgYnkgYDIgKiBsZW5gIGluc3RlYWQgb2YganVzdCBgbGVuYCEgVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZG91YmxlLWluY3JlbWVudCBidWcuIFRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBhIGJ1ZyBmaXguIEl0IGNvcnJlY3RzIHRoaXMgZXJyYW50IGRvdWJsZS1hZHZhbmNlIG9mIGBicy0mZ3Q7Y3VyYC4KClRoZSBsb2NhdGlvbiBpcyBjcnVjaWFsLCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgY29tcG9uZW50IG9mIG5ldGZpbHRlci4gVGhpcyBidWcgaXMgbmV0d29yay1yZWFjaGFibGUgaWYgSC4zMjMgY29ubnRyYWNrIGlzIGVuYWJsZWQsIHNvIGl0IG5lZWRzIHRvIGJlIGFzc2Vzc2VkIGZvciBzZXZlcml0eSBiYXNlZCBvbiBob3cgY29tbW9uIEguMzIzIGlzIHN0aWxsIGluIHRoZSB3aWxkLgoKSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGUgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgaW1wYWN0IHRoaXMgaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaDMyM19hc24xLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSAmIzQzOz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLSMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBuZl9jb25udHJhY2tfaDMyMyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNgIG1vZHVsZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb25maWcgZmlsZXMsIHByb2JhYmx5IGxvb2tpbmcgYXQgYm90aCB0aGUgY3VycmVudCBydW5uaW5nIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IGdlbmVyYXRlZCBpdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgemdyZXBgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIGVmZmljaWVudGx5IHNlYXJjaCB0aHJvdWdoIGEgcG90ZW50aWFsIG1vdW50YWluIG9mIHRleHQgZm9yIHRoYXQgc3BlY2lmaWMgc3RyaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBsaW5lcyB0aGF0IGRlZmluZSBgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzYCBhbmQgaXRzIHZhbHVl4oCUbGlrZWx5IGB5YCwgYG1gLCBvciBldmVuIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbi4gSWYgaXQmIzM5O3MgYSBtb2R1bGUgKGBtYCksIHRoZW4gdGhlIGJvb3QgcHJvY2VzcyBtaWdodCBiZSBsb2FkaW5nIGl0IGRpcmVjdGx5LCBvciBkZXBlbmRpbmcgb24gYSBkZXBlbmRlbmN5LiBJZiBpdCYjMzk7cyBidWlsdC1pbiAoYHlgKSB0aGVuIGl0IHdvdWxkIGJlIGNvbXBpbGVkIGRpcmVjdGx5LiBJZiBpdCYjMzk7cyBjb25kaXRpb25hbCwgdGhlbiBzb21lIG90aGVyIG9wdGlvbiBtaWdodCBpbmZsdWVuY2UgaXQuIEkmIzM5O2xsIGFsc28gY2hlY2sgYW55IHJlbGV2YW50IG1vZHByb2JlIGNvbmZpZ3VyYXRpb25zIG9yIHNjcmlwdHMuIEVzc2VudGlhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGNvbmZpZyBjaGVja3MsIGxvb2tpbmcgZm9yIGEgY2xlYXIgZGVmaW5pdGlvbiwgYW5kIHRoZW4gaWYgdGhhdCYjMzk7cyBub3QgeWllbGRpbmcgdGhlIGFuc3dlciwgaSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBhbmQgbW9kdWxlIGxvYWRpbmcgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaDMyMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICYjNDM7PSBuZm5ldGxpbmtfY3RoZWxwZXIub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDI6bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGVuYWJsaW5nIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGtlZXAgaW4gbWluZCBpcyBgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzYC4gQWx3YXlzIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb247IGl0IGRpY3RhdGVzIHdoZXRoZXIgdGhlIHJlbGV2YW50IGNvZGUgZXZlbiBnZXRzIGNvbXBpbGVkLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgZGVjbGFyYXRpb24gb2YgYE5GX0NPTk5UUkFDS19IMzIzYC4gVGhpcyB3aWxsIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZSBhbmQgc2hlZCBsaWdodCBvbiBhbnkgcHJlcmVxdWlzaXRlIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTIyNz1jb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORl9DT05OVFJBQ0tfSDMyMyBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tfSDMyM2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBuZXR3b3JrIGZ1bmN0aW9uJiMzOTtzIHJlbGlhbmNlIG9uIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYG5mX2Nvbm50cmFja2AgaXRzZWxmLCBvYnZpb3VzbHksIGFuZCB0aGVuIGZ1cnRoZXIgZG93biB0aGUgc3RhY2suIElzIGl0IGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBiYXNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLCBvciBkb2VzIGl0IGRlcGVuZCBvbiBvdGhlciwgaW50ZXJtZWRpYXJ5IG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGVscGVyIG1vZHVsZXMgb3IgcHJvdG9jb2wgZmFtaWxpZXMgaXQgcmVxdWlyZXMsIGJleW9uZCB0aGUgb2J2aW91cyBJUCBvciBJUHY2IHN1cHBvcnQ/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1vZHVsZSBsb2FkaW5nIG9yZGVyLiBJZiBgTkZfQ09OTlRSQUNLX0gzMjNgIGRlcGVuZHMgb24gc29tZXRoaW5nIGxpa2UgYSBzcGVjaWZpYyBjb2RlYyBzdXBwb3J0IG1vZHVsZSwgdGhhdCBsb2FkaW5nIG9yZGVyIGJlY29tZXMgY3JpdGljYWwuIEEgZmFpbHVyZSB0byBsb2FkIHRoZSBkZXBlbmRlbnQgbW9kdWxlIGNhbiBjYXVzZSBpbnN0YWJpbGl0eSBvciBldmVuIHByZXZlbnQgYE5GX0NPTk5UUkFDS19IMzIzYCBmcm9tIGZ1bmN0aW9uaW5nIGNvcnJlY3RseSwgb3Igd29yc2UsIGNyYXNoIHRoZSBzeXN0ZW0uIEkgYWxzbyB3YW50IHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIG1pc3NpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLiBJZiBhIG1vZHVsZSBjYW5ub3QgbG9hZCwgaXMgdGhlcmUgYSBncmFjZWZ1bCBkZWdyYWRhdGlvbiwgb3IgYSBoYXJkIGZhaWx1cmU/IEFuZCBpZiBncmFjZWZ1bCwgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGxvc3Q/CgpJIGFsc28gbmVlZCB0byBzZWUgaWYgYW55IG90aGVyIG1vZHVsZXMgZGVwZW5kIG9uIGBORl9DT05OVFJBQ0tfSDMyM2AuIEFyZSB0aGVyZSBhbnkgZmlyZXdhbGwgcnVsZXMgb3IgbmV0ZmlsdGVyIGV4dGVuc2lvbnMgdGhhdCBob29rIGludG8gaXQ/IFdoYXQgaGFwcGVucyBpZiBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzIHVubG9hZGVkIG9yIGRpc2FibGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgZGVwZW5kZW5jeSB0cmVlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UsIGFuZCBhdm9pZGluZyBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgZnJvbSBtb2R1bGUgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgbW9kaW5mb2AgYW5kIHNpbWlsYXIgdG9vbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIGluY2x1ZGluZyBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFyZSBleHBvc2VkIGJ5IHRoZSBtb2R1bGUgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGdvZXMgYmV5b25kIHNpbXBsZSBtb2R1bGUgZGVwZW5kZW5jaWVzLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBtb2R1bGUgaW5mbHVlbmNlcyBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzk6XHRjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbiAyNDA6XHRcdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAyNDE6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjQyOlx0XHRoZWxwXG4gMjQzOlx0XHQgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdFxuIDI0NDpcdFx0ICBpbXBvcnRhbnQgVm9JUCBwcm90b2NvbHMsIGl0IGlzIHdpZGVseSB1c2VkIGJ5IHZvaWNlIGhhcmR3YXJlIGFuZFxuIDI0NTpcdFx0ICBzb2Z0d2FyZSBpbmNsdWRpbmcgdm9pY2UgZ2F0ZXdheXMsIElQIHBob25lcywgTmV0bWVldGluZywgT3BlblBob25lLFxuIDI0NjpcdFx0ICBHbm9tZW1lZXRpbmcsIGV0Yy5cbiAyNDc6XHRcbiAyNDg6XHRcdCAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVFxuIDI0OTpcdFx0ICBmaXJld2FsbC5cbiAyNTA6XHRcbiAyNTE6XHRcdCAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgUkFTLCBGYXN0IFN0YXJ0LCBILjI0NSBUdW5uZWxsaW5nLCBDYWxsXG4gMjUyOlx0XHQgIEZvcndhcmRpbmcsIFJUUC9SVENQIGFuZCBULjEyMCBiYXNlZCBhdWRpbywgdmlkZW8sIGZheCwgY2hhdCxcbiAyNTM6XHRcdCAgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlXG4gMjU0Olx0XHQgIHZpc2l0IGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8uXG4gMjU1Olx0XG4gMjU2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDI1NzpcdFxuIDI1ODpcdGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZ2F0ZS4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCYjMzk7cyAqYWxzbyogbmVzdGxlZCB3aXRoaW4gYW4gYGlmIE5GX0NPTk5UUkFDS2AgYmxvY2suIFNvLCBldmVuIGlmIGBORVRGSUxURVJfQURWQU5DRURgIGlzIGVuYWJsZWQsIGlmIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBORl9DT05OVFJBQ0tgKSBpc24mIzM5O3QsIHRoaXMgZW50aXJlIHNlY3Rpb24gd29uJiMzOTt0IGJlIGNvbXBpbGVkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBpcywgaW4gZmFjdCwgcmVxdWlyZWQuIEkmIzM5O2xsIG1lbnRhbGx5IGZsYWcgdGhpcyBhcyBhIGRlcGVuZGVuY3kgY2hlY2sgSSBuZWVkIHRvIGNvbmR1Y3QgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgdGhlIG5lc3RlZCBjb25kaXRpb24gdGhhdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB2ZXJpZnkgdGhpcyByZWxhdGlvbnNoaXAgdG8gcHJvY2VlZCB3aXRoIGFueSBjb25maWRlbmNlIGluIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gY29uZmlndXJlIHRoaXMga2VybmVsIG1vZHVsZSBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBlbmFibGUgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYC4gU2VlbXMgbG9naWNhbCBlbm91Z2ggZ2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgbmV0ZmlsdGVyIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLgoKSG1tLCBub3cgd2hhdCBhYm91dCB0aGlzIGBkZWNvZGVfaW50YCBmdW5jdGlvbj8gSXQmIzM5O3Mgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBpdHNlbGYsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIGZpbmQgYWxsIG9mIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIGl0LCBhbmQgZW5zdXJlIHRoYXQgaXQmIzM5O3MgY29ycmVjdGx5IHVzZWQgYnkgdGhlIGBEZWNvZGVyc2AgY29tcG9uZW50LiBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBjb25maXJtIGl0JiMzOTtzIGJlaW5nIHVzZWQgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIyPXR5cGVkZWYgaW50ICgqZGVjb2Rlcl90KShzdHJ1Y3QgYml0c3RyICosIGNvbnN0IHN0cnVjdCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMzpzdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjQtXHRkZWNvZGVfbnVsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMT1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2Ni1cdFx0XHQvKiBEZWNvZGUgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU2NzpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTY4LVx0XHRcdFx0XHRcdFx0ICBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTczLVx0XHRcdGJzLVx1MDAzZWJpdCA9IDA7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NzQ6XHRcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTc1LVx0XHRcdFx0XHRcdFx0IGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2MzM6XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzQtXHRcdFx0XHRcdFx0ICBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NjQ0PXN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MTQ6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cdFx0XHRcdFx0XHRcdCAgaSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjQtXHRcdH0gZWxzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzI1Olx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXHRcdFx0XHRcdFx0XHQgIGkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODA4Olx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDktXHRcdCAgICBIMzIzX0VSUk9SX05PTkUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODE0Olx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgxNS1cdFx0ICAgSDMyM19FUlJPUl9OT05FKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDIzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBEZWNvZGluZyBOZXR3b3JrIFRyYWZmaWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGBEZWNvZGVyc2AgYXJyYXkuIFRoYXQgcmluZ3MgYSBiZWxsIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBjb21wb25lbnQgZm9yIHRoZSB2YXJpb3VzIGRlY29kaW5nIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIGJ5IGBkZWNvZGVfc2VxYCwgYGRlY29kZV9zZXFvZmAsIGFuZCBgZGVjb2RlX2Nob2ljZWAuIFRoYXTigJlzIG15IHByaW1hcnkgY29uY2VybiBmb3Igbm93LCB0aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb250ZXh0IGZvciB0aGUgYXJyYXkuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF04oCZcyBiZWluZyBkZWNvZGVkLCBzbyBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIFVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBleHBvcnRlZCB3aWxsIGlsbHVtaW5hdGUgd2hhdCB0aGlzIGBEZWNvZGVyc2AgYXJyYXkgaXMgYmVpbmcgdXNlZCBmb3IuIEl04oCZcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5yYXZlbGluZyB0aGlzIGRlY29kaW5nIGxvZ2ljIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnJvYWRlciBuZXR3b3JrIHRyYWZmaWMgYW5hbHlzaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBmb3JtYXRzIHRoaXMgY29kZSBpcyB3b3JraW5nIHdpdGgsIGFuZCB0aG9zZSBleHBvcnRlZCBmdW5jdGlvbnMgaG9sZCB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjkKCQkJCQkJCW91dHB1dDogNzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLi4uIFRoZSBmaXJzdCBxdWVzdGlvbiBJJiMzOTttIGFza2luZyBteXNlbGYgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgbGFuZHNjYXBlIG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQ/JiMzNDsgSSB3YW50IHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW5zdGFuY2UgbWV0aG9kcyBhbmQsIHRoZXJlZm9yZSwgb3BlcmF0aW5nIG9uIG9iamVjdCBzdGF0ZS4gVGhpcyB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduIOKAkyBhcmUgd2UgaGVhdmlseSByZWxpYW50IG9uIG9iamVjdC1vcmllbnRlZCBwcmluY2lwbGVzLCBvciBpcyBpdCBtb3JlIG9mIGEgaHlicmlkIGFwcHJvYWNoPyBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSB0aWVkIHRvIHNwZWNpZmljIG9iamVjdCBpbnN0YW5jZXM/IEl0IHdpbGwgYWxzbyBoZWxwIG1lIG5hcnJvdyBkb3duIHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBtb3N0IGxpa2VseSB0byBkZWFsIHdpdGggc3RhdGUgbWFuYWdlbWVudCwgYW5kIHdoZXJlIEkgY2FuIGV4cGVjdCB0byBmaW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3Igc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBvciBjb250ZXh0cy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWwgY29tcGxleGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1NC1cdFx0XHRcdFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODcxOmludCBEZWNvZGVROTMxKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBROTMxICpxOTMxKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjcKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgRW50cnkgUG9pbnQgQW5hbHlzaXMgZm9yIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gU3BlY2lmaWNhbGx5LCBteSBmb2N1cyBpcyBvbiBob3cgdGhlIEguMzIzIHByb3RvY29sIGlzIHByb2Nlc3NlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gbm90aW5nIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cywgd2hpY2ggYXBwZWFyIHRvIGJlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAuIFRoZXNlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIGluaXRpYWwgZGVjb2RpbmcgYW5kIHByb2Nlc3Npbmcgb2YgdGhlIHZhcmlvdXMgSC4zMjMgbWVzc2FnZXMgYXJlIGhhbmRsZWQuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgSSBhbSBnb2luZyB0byBjaGVjayBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgYW5kLCB1bHRpbWF0ZWx5LCBob3cgSC4zMjMgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHByb2Nlc3Mgd2l0aGluIG5ldGZpbHRlci4gSXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgcGFyc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V8RGVjb2RlUTkzMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTItXHRcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcdFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXHRcdFx0XHRcdFx0XHQgICBcdTAwMjZtc2NtKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTItXHRcdC8qIERlY29kZSBRLjkzMSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjExMTM6XHRcdHJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cTkzMSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODMtXHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2ODQ6XHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFx1MDAyNnJhcyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjg1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENvbm50cmFjayBIZWxwZXJzOiBBIFBsYW4qKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZ2FtZSBwbGFuLiBXZSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYGgyNDVfaGVscGAsIGBxOTMxX2hlbHBgLCBhbmQgYHJhc19oZWxwYC4gVGhlc2UgYXJlIGNvbm50cmFjayBoZWxwZXJzLCBhbmQgd2UgKmtub3cqIHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gbmV0d29yayB0cmFmZmljLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4KCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBkZWNvZGluZyBmdW5jdGlvbnM6IGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAuIExldCYjMzk7cyBzZWUgYWJvdXQgdGVzdGluZyBgaDI0NV9oZWxwYCwgYHE5MzFfaGVscGAsIGFuZCBgcmFzX2hlbHBgIHRvbywgYWx0aG91Z2ggdGhvc2UgYXJlIGhlbHBlciBmdW5jdGlvbnMgc28gdGhleSYjMzk7cmUgc2Vjb25kYXJ5LiAKCkFscmlnaHQsIHNvIGBoMjQ1X2hlbHBgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIGJ1bW1lciwgYnV0IGl0IG1ha2VzIHRoZSB0ZXN0aW5nIGVhc2llciB0byBjb250YWluLiBXZSYjMzk7bGwgbGVhdmUgdGhhdCBmb3Igbm93LiBUaGUgb3RoZXJzLCBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBhbmQgYERlY29kZVE5MzFgLCBhcmUgbm9uLXN0YXRpYy4gVGhlIGtleSB0aGluZyBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkmIzM5O3JlIGV4cG9ydGVkLiBUaGF0JiMzOTtsbCBiZSB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTU9Y29uc3Qgc3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3MgX19yY3UgKm5mY3RfaDMyM19uYXRfaG9vayBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTY6RVhQT1JUX1NZTUJPTF9HUEwobmZjdF9oMzIzX25hdF9ob29rKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU4Nj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjE1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxNjpFWFBPUlRfU1lNQk9MX0dQTChnZXRfaDIyNV9hZGRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHMsIGFuZCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZCwgYnV0IHRoZXkgYXJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLCBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gVGhhdCBtZWFucyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scywgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGlzIG1vZHVsZS4KCldhaXQgYSBzZWNvbmQuLi5JJiMzOTttIHJlbWVtYmVyaW5nIHNvbWV0aGluZyBhYm91dCB0aGUgYnVpbGQgcHJvY2Vzcy4gUmlnaHQsIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGlzIGFjdHVhbGx5ICppbmNsdWRlZCogaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyMy1vYmpzYC4gV2hpY2ggbWVhbnMgaXQmIzM5O3MgdWx0aW1hdGVseSBsaW5rZWQgaW50byB0aGUgc2FtZSBtb2R1bGUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZm9yIHRoZSBmdW5jdGlvbiBgRGVjb2RlUmFzTWVzc2FnZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODIxOmludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NwoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnVuY3Rpb24gVXNhZ2UgZm9yIEguMzIzIERlY29kaW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSC4zMjMgZGVjb2RpbmcsIGFuZCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYW5kIGBEZWNvZGVROTMxYCBhcmUgZGVmaW5pdGVseSBrZXkgZm9jdXMgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGJpZyBwbGF5ZXJzLCB0aGUgb25lcyBsaWtlbHkgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gcHJvY2Vzc2luZyB0aGUgdmFyaW91cyBILjMyMyBtZXNzYWdlcy4KCkJ1dCB0aGVuIHRoZXJlIGFyZSB0aG9zZSBoZWxwZXIgZnVuY3Rpb25zLCB0aGUgc3RhdGljIG9uZXMuIGBoMjQ1X2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGByYXNfaGVscGAuLi4gaG1tLCB0aGV5ICpjb3VsZCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIG1heWJlIG9wdGltaXplZCBhd2F5IGVudGlyZWx5LCBtYWtpbmcgdGhlaXIgc3ltYm9scyBsZXNzIGRpc3RpbmN0LiBIb3dldmVyLCB0aGV5JiMzOTtyZSB0aGUgYWN0dWFsIGhlbHBlcnMsIHRoZSBudXRzIGFuZCBib2x0cyB0aGF0IHRoZXNlIG1haW4gZnVuY3Rpb25zIGRlcGVuZCBvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHVzZWQuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoZXRoZXIgb3Igbm90IEkgc2hvdWxkIGtlZXAgdGhlc2Ugc3ltYm9scyBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZC4gSSB0aGluayBJJiMzOTtsbCBsb29rIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZXkgbWlnaHQgYmUgcGFzc2VkIGFyb3VuZCBhcyBmdW5jdGlvbiBwb2ludGVycyBzb21ld2hlcmUsIHdoaWNoIHdvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaW5kaWNhdGlvbiBvZiB0aGVpciBpbXBvcnRhbmNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2gyNDVfaGVscHxxOTMxX2hlbHB8cmFzX2hlbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz00OTQ9c3RhdGljIGludCBwcm9jZXNzX2gyNDUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTUyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjUyOTpzdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTUzMC1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEwMzE9c3RhdGljIGludCBwcm9jZXNzX3E5MzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEwODgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMDg5OnN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTA5MC1cdFx0ICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE2MjA9c3RhdGljIGludCBwcm9jZXNzX3JhcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY2My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2NjQ6c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2NjUtXHRcdCAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzE3Olx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzE4LVx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTktXHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzIwOlx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzIxLVx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyMzpcdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI0LVx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MjY6XHRcdFx0ICBcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyNy1cdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyOC1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTcyOTpcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBmb3IgRGVlcGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBgbmZfY3RfaGVscGVyX2luaXRgLCB3aGljaCBtZWFucyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBUaGF0IGNvbmZpcm1zIHdoYXQgSSB3YXMgdGhpbmtpbmcuIFRoZXJlZm9yZSwgYHJhc19oZWxwYCwgYGgyNDVfaGVscGAsIGFuZCBgcTkzMV9oZWxwYCBhcmUgYWxzbyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scywgYW5kIEkmIzM5O2xsIGtlZXAgdGhlbSBpbiBtaW5kLgoKSG93ZXZlciwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseSwgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYW5kIGBEZWNvZGVROTMxYCBhcHBlYXIgY2xvc2VyIHRvIHRoZSBjb2RlIEkmIzM5O3ZlIGJlZW4gd29ya2luZyB3aXRoLCBhbmQgZGlyZWN0bHkgcmVsYXRlIHRvIHRoZSBzcGVjaWZpYyBkZWNvZGluZyBvcGVyYXRpb25zLiBUaGVzZSBhcmUsIHRoZXJlZm9yZSwgYSBtb3JlIHByb2R1Y3RpdmUgYXZlbnVlIGZvciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBwcmlvcml0aXplIHVzaW5nIHRob3NlIHRocmVlIGZ1bmN0aW9uIG5hbWVzIGFzIGZvY3VzIHN5bWJvbHMgZHVyaW5nIHRoaXMgYW5hbHlzaXMuCgpCZWZvcmUgSSBwcm9jZWVkLCBpdCYjMzk7cyBhbHdheXMgd2lzZSB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBORl9DT05OVFJBQ0tfSDMyM2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGltZSB0byBtYWtlIHN1cmUgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgYWNjb3VudGVkIGZvciBpbiBteSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzEwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgU2VjcmV0cyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkVURklMVEVSX0FEVkFOQ0VEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgY2FuIHRyYWNlIGl0cyB1c2FnZSBlZmZlY3RpdmVseS4gSSYjMzk7bSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgd2l0aGluIE5ldGZpbHRlci4gS25vd2luZyBpdHMgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgdGhhdCBpbnNpZ2h0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxubmV0L0tjb25maWctMjE5LVxubmV0L0tjb25maWc6MjIwOmNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcbm5ldC9LY29uZmlnLTIyMS1cdGJvb2wgXCYjMzQ7QWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZy4gSSBzZWUgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgZGVmaW5lZCBpbiBgbmV0L0tjb25maWdgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIHByZXR0eSBjb3JlIG5ldHdvcmsgZmlsdGVyaW5nIG9wdGlvbi4gTm93LCB0aGUga2V5IGlzIHRoZSBkZXBlbmRlbmN5LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQgd2lsbCwgYWxtb3N0IGNlcnRhaW5seSwgZGVwZW5kIG9uIGBORVRGSUxURVJgIGJlaW5nIGVuYWJsZWQuIEdvdHRhIGNvbmZpcm0gdGhhdCwgY2FuJiMzOTt0IGp1c3QgYXNzdW1lLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gU28sIG5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYE5GX0NPTk5UUkFDS2Agc2luY2UgaXQgaXMgYWxzbyBpbiBgbmV0L0tjb25maWdgLCBhbmQgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGlzIGJyYW5jaCBvZiBmZWF0dXJlcyBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGludGVycmVsYXRpb25zaGlwcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXRmaWx0ZXIgb3B0aW9ucywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBORl9DT05OVFJBQ0tgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsLiBUaGVuLCBJJiMzOTttIHBvbmRlcmluZyBgTkZfQ09OTlRSQUNLX0gzMjNgLiBJdCBsb29rcyBsaWtlIGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIHdoaWNoIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gQWgsIHJpZ2h0LCBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBhIGJvb2xlYW4gY29uZmlnLCBzbyBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgLSBJIGNhbiBzaW1wbHkgZW5hYmxlIGl0IGlmIG5lZWRlZC4gTGV0IG1lIG1ha2UgYSBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzdGF0ZXM6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfQ09OTlRSQUNLX0gzMjNgLgoKSG9sZCBvbi4uLiBJIGp1c3QgcmVtZW1iZXJlZDogYE5GX0NPTk5UUkFDS19IMzIzYCBpcyAqY29uZGl0aW9uYWxseSogZW5hYmxlZCwgc3BlY2lmaWNhbGx5IGluc2lkZSBhbiBgaWYgTkZfQ09OTlRSQUNLYCBibG9jay4gVGhhdCYjMzk7cyBjcnVjaWFsLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBORl9DT05OVFJBQ0tgJiMzOTtzIHNldHRpbmdzIGFuZCBob3cgaXQgaW5mbHVlbmNlcyBgTkZfQ09OTlRSQUNLX0gzMjNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgaXMgaW4gcGxhY2UgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCB0aGUgSC4zMjMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgyOlx0Y29uZmlnIE5GX0NPTk5UUkFDS1xuICA4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuICA4NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDg1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbiAgODY6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBJUFY2ICE9IG5cbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWRcbiAgODk6XHRcdCAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWRcbiAgOTA6XHRcdCAgaW50byBjb25uZWN0aW9ucy5cbiAgOTE6XHRcbiAgOTI6XHRcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xuICA5MzpcdFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxuICA5NDpcdFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JiMzOTsgYmVsb3cpLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgOTc6XHRcbiAgOTg6XHRjb25maWcgTkZfTE9HX1NZU0xPR1xuICA5OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3lzbG9nIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4gMTAwOlx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAxMDE6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgc28gSSYjMzk7bSBzZXR0aW5nIHVwIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCBpdCYjMzk7cyBjbGVhciBJIG5lZWQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYC4gQnV0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhhdCYjMzk7cyAqYWxsKiBJIHJlcXVpcmUuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlLCBsZXNzIG9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4KCk15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGhlYWQgb3ZlciB0byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsaXZlLCBhbmQgaXQgc2hvdWxkIHJldmVhbCBhbnkgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMgZm9yIGBORl9DT05OVFJBQ0tfSDMyM2AgdGhhdCBJIG1pZ2h0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzk6XHRjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbiAyNDA6XHRcdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAyNDE6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjQyOlx0XHRoZWxwXG4gMjQzOlx0XHQgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdFxuIDI0NDpcdFx0ICBpbXBvcnRhbnQgVm9JUCBwcm90b2NvbHMsIGl0IGlzIHdpZGVseSB1c2VkIGJ5IHZvaWNlIGhhcmR3YXJlIGFuZFxuIDI0NTpcdFx0ICBzb2Z0d2FyZSBpbmNsdWRpbmcgdm9pY2UgZ2F0ZXdheXMsIElQIHBob25lcywgTmV0bWVldGluZywgT3BlblBob25lLFxuIDI0NjpcdFx0ICBHbm9tZW1lZXRpbmcsIGV0Yy5cbiAyNDc6XHRcbiAyNDg6XHRcdCAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4MgoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogSC4zMjMgQVNOLjEgRGVjb2RlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRGSUxURVJfQURWQU5DRURgLCB0aGF0JiMzOTtzIGdvb2QuIE15IGNvbmZpZyBlc3NlbnRpYWxzIGFyZTogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DT05OVFJBQ0tfSDMyM2AuCgpMZXQgbWUgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucy4gSXMgYERlY29kZVJhc01lc3NhZ2VgIGEgZ29vZCBzdGFydGluZyBwb2ludD8gWXVwLCBub24tc3RhdGljLCByaWdodCB3aGVyZSBJIHN1c3BlY3RlZCDigJMgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gYnkgYWxzbyBjaGVja2luZyBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCBhbmQgYERlY29kZVE5MzFgLiBZZXAsIGFsbCBub24tc3RhdGljLCBhbGwgaW4gdGhlIHNhbWUgZmlsZS4KClRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcGFyc2luZyBBU04uMSBlbmNvZGVkIG1lc3NhZ2VzLiBCaW5nbyEgVGhhdCYjMzk7cyBleGFjdGx5IHdoZXJlIHRoZSBidWcgbGllcy4gSXQmIzM5O3MgdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIEFTTi4xIGRlY29kZXIgdGhhdCYjMzk7cyB0aGUgY3VscHJpdC4gU28gZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2guCgpIZXJlJiMzOTtzIG15IGRpc3RpbGxlZCBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBkb3VibGUtYWR2YW5jZSBvbiBgYnMtJmd0O2N1cmAgZHVyaW5nIGludGVnZXIgZGVjb2RpbmcuIEl0JiMzOTtzIG5ldHdvcmstcmVhY2hhYmxlIGlmIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGBEZWNvZGVROTMxYC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX0gzMjNgLgoKUXVpY2sgc2FuaXR5IGNoZWNrIG9uIGRlcGVuZGVuY2llc+KApiBgTkZfQ09OTlRSQUNLX0gzMjNgIHJlcXVpcmVzIGBJUFY2YCBmb3IgSVB2NiBzdXBwb3J0LCBidXQgaXQmIzM5O3Mgbm90IHN0cmljdGx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBtb2R1bGUgaXRzZWxmLiBgTkZfQ09OTlRSQUNLYCByZXF1aXJlcyBgTkVURklMVEVSYC4gU28sIHRoZSBmb3VyIGNvbmZpZ3MgSSBsaXN0ZWQgYXJlIGRlZmluaXRlbHkgc3VmZmljaWVudC4gVGltZSB0byBleGVjdXRlLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBU04uMSBkZWNvZGVyIGZvciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIHdoZXJlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHdhcyBpbmNvcnJlY3RseSBhZHZhbmNlZCB0d2ljZSB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyB3aGVuIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBU04uMSBkZWNvZGVyIGZvciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIHdoZXJlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHdhcyBpbmNvcnJlY3RseSBhZHZhbmNlZCB0d2ljZSB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyB3aGVuIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBkZWNvZGVfaW50YCB3aGVyZSB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYGJzLVx1MDAzZWN1cmAgaXMgYWR2YW5jZWQgdHdpY2UgYnkgYGxlbmAgd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGggdGhlIGBERUNPREVgIGF0dHJpYnV0ZSAod2hpY2ggb25seSBhcHBsaWVzIHRvIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgaW4gdGhlIEguMzIzIEFTTi4xIHNjaGVtYSkuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpbWVUb0xpdmVgIGlzIGFsd2F5cyBhbiBleHRlbnNpb24gY29tcG9uZW50IGluIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLCB0aGUgY2FsbGVyIGBkZWNvZGVfc2VxYCBzYXZlcyB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYmVmb3JlIGRlY29kaW5nIHRoZSBjb21wb25lbnQgYW5kIHVuY29uZGl0aW9uYWxseSByZXN0b3JlcyBpdCB0byBgYmVnICYjNDM7IGxlbmAgKHRoZSBsZW5ndGggb2YgdGhlIGV4dGVuc2lvbiBjb21wb25lbnQpIGFmdGVyd2FyZHMuIEFzIGEgcmVzdWx0LCB0aGUgZG91YmxlIGFkdmFuY2UgaW4gYGRlY29kZV9pbnRgIGlzIGltbWVkaWF0ZWx5IHVuZG9uZSBieSB0aGUgY2FsbGVyIGFuZCBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gc3Vic2VxdWVudCBwYXJzaW5nLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGFjdHVhbCBtZW1vcnkgcmVhZCBpbiBgZ2V0X3VpbnRgIG9jY3VycyBiZWZvcmUgdGhlIGVycm9uZW91cyBzZWNvbmQgYWR2YW5jZSBhbmQgaXMgcHJvcGVybHkgYm91bmRzLWNoZWNrZWQgYnkgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGNhdXNlIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCwgbGVha2VkLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjY2RhNDVlYWQ3NmE1NGZlMTU2ZTc5Yjk3OGJlZTc4YTQ5NDJhYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzozMDo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTMzNiw4ICYjNDM7MzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIAkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CiAJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwogCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicy0mZ3Q7Y3VyICYjNDM7PSBsZW47CiAJCX0KLQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQlicmVhazsKIAljYXNlIFVOQ086CiAJCUJZVEVfQUxJR04oYnMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGJsb2NrIGxvb2tlZCBsaWtlIHRoaXMsIGFuZCBub3cgaXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBOb3cgaXQgbG9va3MgbGlrZSB0aGUgYGJzLSZndDtjdXJgIGluY3JlbWVudCBoYXMgYmVlbiAqbW92ZWQqIGJhc2VkIG9uIHRoaXMgY29uZGl0aW9uYWwgYGlmIChiYXNlICZhbXA7JmFtcDsgKGYtJmd0O2F0dHIgJmFtcDsgREVDT0RFKSlgLiBBbmQgYSBuZXcgYGVsc2VgIGhhcyBiZWVuIGFkZGVkIHdpdGgganVzdCB0aGUgYGJzLSZndDtjdXJgIGluY3JlbWVudC4gSG1tbS4uLgoKSG9sZCBvbiwgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSWYgdGhlIGNvbmRpdGlvbiBgYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSlgIGlzICp0cnVlKiwgdGhlbiB0aGUgY29kZSBhbHJlYWR5IGNhbGxzIGBnZXRfdWludChicywgbGVuKWAuIEJ1dCAqd2l0aGluKiBgZ2V0X3VpbnRgLCBkb2VzbiYjMzk7dCB0aGUgY3VycmVudCBiaXQgcG9pbnRlciAoYGJzLSZndDtjdXJgKSBnZXQgYWR2YW5jZWQgYnkgYGxlbmAgYml0cyBhbHJlYWR5PyBJZiBzbywgdGhlIG9yaWdpbmFsIGNvZGUgaGFkICpkb3VibGUqIGluY3JlbWVudHMgdG8gYGJzLSZndDtjdXJgLCBvbmNlIGluIGBnZXRfdWludGAgYW5kIG9uY2UgZGlyZWN0bHkuIFNvLCBpbiB0aGUgb3JpZ2luYWwgY29kZSB0aGUgYGJzLSZndDtjdXIgJiM0Mzs9IGxlbjtgIHdhcyByZWR1bmRhbnQgd2hlbiB0aGUgY29uZGl0aW9uIHdhcyB0cnVlIQoKQWxyaWdodCwgaXQgKmxvb2tzKiBsaWtlIHRoZSBwYXRjaCBpcyBjb3JyZWN0aW5nIHRoaXMgcmVkdW5kYW50IGluY3JlbWVudC4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGdldF91aW50YC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZnVuY3Rpb24gdG8gYmUgY2VydGFpbi4gSnVzdCB0byBjb25maXJtIEkgdW5kZXJzdGFuZCB0aGUgaW50ZW50LCBpdCBsb29rcyBsaWtlIGlmIHRoZSBjb25kaXRpb24gaXMgKmZhbHNlKiwgdGhlbiB3ZSBzaW1wbHkgYWR2YW5jZSB0aGUgYml0IHBvaW50ZXIgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgKGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW47YCkuIFRoaXMgbWFrZXMgc2Vuc2UuIEJ1dCBpZiBpdCYjMzk7cyB0cnVlLCB3ZSBhcmUgZ2V0dGluZyBgbGVuYCBiaXRzIGZyb20gdGhlIGJ1ZmZlciB2aWEgYGdldF91aW50YCwgd2hpY2ggKnNob3VsZCogYWxyZWFkeSBiZSBhZHZhbmNpbmcgb3VyIGJpdCBwb2ludGVyIGNvcnJlY3RseSwgdGhlcmVmb3JlIHRoZSBzZXBhcmF0ZSBpbmNyZW1lbnQgd2FzIHdyb25nLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1vdmluZyB0aGUgY29ycmVjdCBpbmNyZW1lbnQgaW50byB0aGUgYGVsc2VgIGNhc2Ugb2YgdGhlIGNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdWludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwND1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjExPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjUwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzUtXHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM3LVx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBnZXRfdWludGAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgYGdldF91aW50YCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbiAtIGhvdyBpdCBleHRyYWN0cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZyb20gd2hhdGV2ZXIgZGF0YSBzb3VyY2UgaXQmIzM5O3Mgd29ya2luZyB3aXRoLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGJpdHdpc2Ugb3BlcmF0aW9ucyBpdCB1c2VzLCBhbnkgZXJyb3IgaGFuZGxpbmcgaXQgaW1wbGVtZW50cyAob3IgZG9lc24mIzM5O3QhKSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlZGdlIGNhc2VzIGxpa2UgYXR0ZW1wdGluZyB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZWZmaWNpZW5jeTsgYXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLCBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucz8gSSYjMzk7bGwgYmUgY29tcGFyaW5nIGl0IHRvIGJlc3QgcHJhY3RpY2VzLCBhbmQgSSYjMzk7bGwgYmUgdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zIHRoYXQgbWlnaHQgb2ZmZXIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9yIGJldHRlciBzYWZldHkgZ3VhcmFudGVlcy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgZXZhbHVhdGlvbjogZG9lcyBpdCBkbyB3aGF0IGl0IHNob3VsZCwgYW5kIGNvdWxkIGl0IGRvIGl0IGJldHRlcj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0fVxuIDI0NjpcdFxuIDI0NzpcdC8qXG4gMjQ4Olx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcbiAyNDk6XHQgKi9cbiAyNTA6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbiAyNTE6XHR7XG4gMjUyOlx0XHR1bnNpZ25lZCBpbnQgdiA9IDA7XG4gMjUzOlx0XG4gMjU0Olx0XHRzd2l0Y2ggKGIpIHtcbiAyNTU6XHRcdGNhc2UgNDpcbiAyNTY6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNTc6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjU4Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1OTpcdFx0Y2FzZSAzOlxuIDI2MDpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2MTpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNjI6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjYzOlx0XHRjYXNlIDI6XG4gMjY0Olx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjY1Olx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2NjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjc6XHRcdGNhc2UgMTpcbiAyNjg6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjk6XHRcdFx0YnJlYWs7XG4gMjcwOlx0XHR9XG4gMjcxOlx0XHRyZXR1cm4gdjtcbiAyNzI6XHR9XG4gMjczOlx0XG4gMjc0Olx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3MAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIHRoaXMgY29kZToKCioqRGVjb2RpbmcgSW50ZWdlciBMb2dpYyoqCgpBbHJpZ2h0LCBzbyBgZ2V0X3VpbnRgIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGEgYml0c3RyZWFtLiBUaGUgY29tbWVudCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBhZHZhbmNpbmcgdGhlIGJpdHN0cmVhbSYjMzk7cyBjdXJyZW50IHBvc2l0aW9uIChgYnMtJmd0O2N1cmApIGJ5IGBiYCBieXRlcy4gQW5kIHRoZW4sIHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiB0byBgZGVjb2RlX2ludGAgc2luY2UgYGJgIGlzIGFzc2lnbmVkIGBsZW5gIHdpdGhpbiBgZGVjb2RlX2ludGAuIFRoYXQgbWVhbnMgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZWdlciBiZWluZyBkZWNvZGVkIHNvbWVob3cgZGljdGF0ZXMgdGhlIGJ5dGVzIGNvbnN1bWVkLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBOb3cgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiB0byBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBiaXQgb2YgY29kZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMjpcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMzEzOlx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzMTQ6XHR7XG4gMzE1Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDMxNjpcdFxuIDMxNzpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMzE4Olx0XG4gMzE5Olx0XHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbiAzMjA6XHRcdGNhc2UgQllURTpcdFx0LyogUmFuZ2UgPT0gMjU2ICovXG4gMzIxOlx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyMjpcdFx0XHRicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDMyMzpcdFx0XHRicmVhaztcbiAzMjQ6XHRcdGNhc2UgV09SRDpcdFx0LyogMjU3IFx1MDAzYz0gUmFuZ2UgXHUwMDNjPSA2NEsgKi9cbiAzMjU6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzI2Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gMjtcbiAzMjc6XHRcdFx0YnJlYWs7XG4gMzI4Olx0XHRjYXNlIENPTlM6XHRcdC8qIDY0SyBcdTAwM2MgUmFuZ2UgXHUwMDNjIDRHICovXG4gMzI5Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcbiAzMzA6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzE6XHRcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICYjNDM7IDE7XG4gMzMyOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuIDMzMzpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMzNDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMzU6XHRcdFx0aWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcdC8qIHRpbWVUb0xpdmUgKi9cbiAzMzY6XHRcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtXHUwMDNlbGI7XG4gMzM3Olx0XHRcdFx0UFJJTlQoXCYjMzQ7ID0gJXVcJiMzNDssIHYpO1xuIDMzODpcdFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0KSkgPSB2O1xuIDMzOTpcdFx0XHR9IGVsc2Uge1xuIDM0MDpcdFx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0MTpcdFx0XHR9XG4gMzQyOlx0XHRcdGJyZWFrO1xuIDM0MzpcdFx0Y2FzZSBVTkNPOlxuIDM0NDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzNDU6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM0NjpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM0NzpcdFx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbiAzNDg6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQ5Olx0XHRcdGJyZWFrO1xuIDM1MDpcdFx0ZGVmYXVsdDpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gMzUxOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiB0aGUgSC4zMjMgUGFyc2VyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGhvdyBgZ2V0X3VpbnRgIGludGVyYWN0cyB3aXRoIGBicy0mZ3Q7Y3VyYCB3aXRoaW4gdGhpcyBILjMyMyBwYXJzaW5nIGxvZ2ljLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZG91YmxlLWFkdmFuY2luZyB0aGUgYGJzLSZndDtjdXJgIHBvaW50ZXIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCB3aGVuIGBiYXNlICZhbXA7JmFtcDsgKGYtJmd0O2F0dHIgJmFtcDsgREVDT0RFKWAgaXMgdHJ1ZSwgYGdldF91aW50YCBpdHNlbGYgYWR2YW5jZXMgYGJzLSZndDtjdXJgIGJ5IGBsZW5gLCBhbmQgdGhlbiB0aGUgc3Vic2VxdWVudCBsaW5lIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW5gIGRvZXMgaXQgKmFnYWluKi4gVGhpcyBlZmZlY3RpdmVseSBtb3ZlcyB0aGUgcmVhZCBwb2ludGVyIHR3aWNlIGFzIGZhciBhcyBpbnRlbmRlZCwgYnkgYDIgKiBsZW5gIGluc3RlYWQgb2YgYGxlbmAuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBgYnMtJmd0O2N1cmAgaXMgYSBwb2ludGVyIGludG8gYW4gYHVuc2lnbmVkIGNoYXJgIGJ1ZmZlciDigJMgbGlrZWx5IHRoZSBwYWNrZXQgZGF0YS4gVGhpcyBkb3VibGUtYWR2YW5jZSBsZWFkcyB0byBza2lwcGluZyBhIHBvcnRpb24gb2YgdGhlIHBhY2tldCwgd2hpY2ggaXMgYmFkLCBidXQgbW9yZSBjcml0aWNhbGx5LCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gU2luY2UgdGhlIGJ1ZmZlciYjMzk7cyBhbGxvY2F0aW9uIGFuZCBkYXRhIGFyZSB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3aGljaCBpcyBmdWxseSBhbGxvY2F0ZWQgYW5kIGZpbGxlZCB3aXRoIHBhY2tldCBkYXRhLCB0aGlzIGJ1ZyBsZWFkcyB0byBhbiAqb3V0LW9mLWJvdW5kcyByZWFkKi4gSXQmIzM5O3Mgbm90IGFib3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyIHNlLiBJdCYjMzk7cyBhYm91dCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgKmFjdHVhbCogcGFja2V0IGRhdGEgd2l0aGluIHRoYXQgYWxsb2NhdGVkIGJ1ZmZlci4KCldlIG5lZWQgdG8gY29uc2lkZXIgS0FTQU4uIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgcmVhZHMuIFNvLCBiZWNhdXNlIGBicy0mZ3Q7Y3VyYCBhZHZhbmNlcyB0b28gZmFyLCBhbnkgc3Vic2VxdWVudCByZWFkIGZyb20gYGJzYCB3aWxsIGFjY2VzcyBtZW1vcnkgYmV5b25kIHRoZSBpbnRlbmRlZCBwYWNrZXQgYm91bmRhcmllcy4gVGhpcyBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4KCkhvd2V2ZXIsIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNoZWNrIHRvIHNlZSBpZiB0aGUgcGFyc2VyIGhhcyBhZHZhbmNlZCB0b28gZmFyLiBJbiB0aGUgZXhpc3RpbmcgY29kZSwgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGlzIGNhbGxlZCB0byB2ZXJpZnkgdGhhdCBgYnMtJmd0O2N1ciAmIzQzOyBsZW5gIGRvZXMgbm90IGV4Y2VlZCBgYnMtJmd0O2VuZGAuIEhvd2V2ZXIsIHRoZSBidWcgaGVyZSBpcyB0aGF0IGBicy0mZ3Q7Y3VyYCBpcyBub3cgYXQgYGJzLSZndDtjdXIgJiM0MzsgMiAqIGxlbmAuIFNvIHdoaWxlIGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBPT0IgcmVhZHMsIHRoZSBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgY2hlY2tzIG1pZ2h0IGJlIGJ5cGFzc2VkIGFmdGVyIHRoaXMgYWR2YW5jZW1lbnQgb2YgYGJzLSZndDtjdXJgLCBiZWNhdXNlIHRoZXkmIzM5O3JlIGJhc2VkIG9uIHRoZSB3cm9uZyBzdGFydGluZyBsb2NhdGlvbi4gVGhlIG5leHQgdGltZSBpdCByZWFkcywgaXQgbWlnaHQgYmUgb3V0IG9mIGJvdW5kcywgYW5kIHRoZW4gaXQmIzM5O3MgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkLgoKVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIHNlY29uZCBgYnMtJmd0O2N1ciAmIzQzOz0gbGVuYCB3aGljaCBhZGRyZXNzZXMgdGhlIHJvb3QgY2F1c2U6IFRoZSBkb3VibGUgaW5jcmVtZW50LgoKQnV0IGhlcmUgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSBgc2tiYCBjYW4gaGF2ZSB0YWlscm9vbSB3aGljaCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gUmVhZGluZyBpbnRvIHRoZSB0YWlscm9vbSB3b3VsZCBiZSBjYXVnaHQgYnkgS01TQU4sIGJlY2F1c2UgdGhlIHRhaWxyb29tIGlzIHVuaW5pdGlhbGl6ZWQsIGJ1dCBpdCBtYXkgbm90IGJlIGNhdWdodCBieSBLQVNBTi4gS0FTQU4gb25seSBrbm93cyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiBTbyBpZiB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWZmZXIsIGJ1dCAqcGFzdCogdGhlIGFjdHVhbCBwYWNrZXQmIzM5O3MgdmFsaWQgZGF0YSAoYHNrYi0mZ3Q7bGVuYCksIEtBU0FOIG1pZ2h0IG1pc3MgaXQgaWYgYGJzLSZndDtlbmRgIGlzIHNldCB0byB0aGUgYWxsb2NhdGVkIGJ1ZmZlciYjMzk7cyBlbmQuIFRoaXMgaXMgYSBwb2ludCB0byBkb3VibGUgY2hlY2s6IGlzIGBicy0mZ3Q7ZW5kYCBlcXVhbCB0byBgc2tiLSZndDtsZW5gIG9yIHRoZSBlbmQgb2YgdGhlIGBza2JgIGFsbG9jYXRpb24/IEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hldGhlciB3ZSYjMzk7cmUgcHVyZWx5IGluIHRoZSByZWFsbSBvZiBPT0IgcmVhZHMgb2YgdmFsaWQgcGFja2V0IGRhdGEsIG9yIGlmIHdlJiMzOTtyZSBhbHNvIHBvdGVudGlhbGx5IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBgc2tiYCYjMzk7cyB0YWlscm9vbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticy1cdTAwM2VlbmQgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIEluaXRpYXRpdmU6IEV4YW1pbmluZyBgYnMuZW5kYCBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiB0aGlzIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gaG93IGBicy5lbmRgIGlzIGJlaW5nIHVzZWQgYW5kLCBjcml0aWNhbGx5LCBob3cgYGJzYCBpdHNlbGYgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIE15IHllYXJzIG9mIGV4cGVyaWVuY2UgaGF2ZSB0YXVnaHQgbWUgdGhhdCB0aGVzZSBraW5kcyBvZiBpc3N1ZXMgb2Z0ZW4gc3RlbSBmcm9tIGFuIGltcHJvcGVyIGRlZmluaXRpb24gb3IgdW5leHBlY3RlZCB2YWx1ZSBhc3NpZ25tZW50IGVhcmx5IG9uLiBJJiMzOTttIHRoaW5raW5nLCBpcyBgYnMuZW5kYCBiZWluZyB1c2VkIGFzIGFuIGl0ZXJhdG9yPyBJcyBpdCBhbiBvZmZzZXQ/IElzIGl0IHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIGEgYnVmZmVyIG9yIHN0cmluZz8gVGhlIHByZWNpc2UgbWVhbmluZyB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBhbnkgYnVncy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIGh1bnQgZG93biB0aGUgZGVjbGFyYXRpb24gYW5kIGFzc2lnbm1lbnQgb2YgYGJzYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB1bmV4cGVjdGVkIHR5cGUgY29udmVyc2lvbnMgYXJvdW5kIHRoYXQgdmFyaWFibGUuIFRoYXQmIzM5O3MgbXkgaW1tZWRpYXRlIHN0cmF0ZWd5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZW5kID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjktXHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MzA6XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzEtXHRicy5iaXQgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg0Ni1cdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg0NzpcdGJzLmVuZCA9IGJlZyAmIzQzOyBzejtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg0OC1cdGJzLmJpdCA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODUzPWludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODYzLVx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODY0Olx0YnMuZW5kID0gYnVmICYjNDM7IHN6O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODY1LVx0YnMuYml0ID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYHN6YCBQYXJhbWV0ZXImIzM5O3MgVXNhZ2UqKgoKT2theSwgc28gdGhlIGBzemAgcGFyYW1ldGVyIGlzIG1ha2luZyB0aGUgcm91bmRzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyBvcmlnaW4gYW5kIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGludG8gd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2FsbCBzdGFjazsgaG93IGFuZCAqd2h5KiB0aGlzIGBzemAgdmFsdWUgaXMgYmVpbmcgc3VwcGxpZWQgd2lsbCBsaWtlbHkgcHJvdmlkZSBzaWduaWZpY2FudCBpbnNpZ2h0cyBpbnRvIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGNvbmNlcm4uIEdyYWJiaW5nIHRoZSBjYWxsIGdyYXBoIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbnxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDA9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzctXHRcdFx0XHQgICAgICBzaXplX3Qgc3osIEgzMjNfVXNlckluZm9ybWF0aW9uICp1dWllKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04NzE9aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKnE5MzEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTIyLVx0XHRcdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo5MjM6XHRcdFx0cmV0dXJuIERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKGJ1ZiwgcCwgbGVuLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTI0LVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZxOTMxLVx1MDAzZVVVSUUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTItXHRcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcdFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXHRcdFx0XHRcdFx0XHQgICBcdTAwMjZtc2NtKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4My1cdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgZGF0YWxlbmAgQ2FsY3VsYXRpb24gaW4gUmVsYXRlZCBDb2RlKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRhdGFsZW5gIHZhcmlhYmxlIGlzIGJlaW5nIGRldGVybWluZWQgd2l0aGluIHRoZSBgcmFzX2hlbHBgIGFuZCBgaDI0NV9oZWxwYCBtb2R1bGVzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkganVtcCBpbnRvIHRob3NlIGNvZGUgc2VjdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaGFuZGxlIHRoZSBjYWxjdWxhdGlvbiBvZiBkYXRhIGxlbmd0aCwgYXMgdGhpcyBoYXMgbGlrZWx5IGJlZW4gYSBzb3VyY2Ugb2YgdmFyaWFiaWxpdHkgb3IgYW4gYXJlYSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIgZm9yIHNvbWUgZGVidWdnaW5nIEkmIzM5O20gZG9pbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBsb2dpYyB1c2VkIGZvciBib3RoIHNjZW5hcmlvcy4gVGhlbiwgSSBjYW4gY29tcGFyZSB0aGUgdHdvLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgZG93biB0aGUgc291cmNlIG9mIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBgZGF0YWxlbmAgaWYgdGhleSBleGlzdC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY2NDpcdHN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4xNjY1Olx0XHRcdCAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuMTY2NjpcdHtcbjE2Njc6XHRcdHN0YXRpYyBSYXNNZXNzYWdlIHJhcztcbjE2Njg6XHRcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XG4xNjY5Olx0XHRpbnQgZGF0YWxlbiA9IDA7XG4xNjcwOlx0XHRpbnQgcmV0O1xuMTY3MTpcdFxuMTY3MjpcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfcmFzOiBza2JsZW4gPSAldVxcblwmIzM0Oywgc2tiLVx1MDAzZWxlbik7XG4xNjczOlx0XG4xNjc0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfaDMyM19sb2NrKTtcbjE2NzU6XHRcbjE2NzY6XHRcdC8qIEdldCBVRFAgZGF0YSAqL1xuMTY3NzpcdFx0ZGF0YSA9IGdldF91ZHBfZGF0YShza2IsIHByb3RvZmYsIFx1MDAyNmRhdGFsZW4pO1xuMTY3ODpcdFx0aWYgKGRhdGEgPT0gTlVMTClcbjE2Nzk6XHRcdFx0Z290byBhY2NlcHQ7XG4xNjgwOlx0XHRwcl9kZWJ1ZyhcJiMzNDtuZl9jdF9yYXM6IFJBUyBtZXNzYWdlIGxlbj0lZCBcJiMzNDssIGRhdGFsZW4pO1xuMTY4MTpcdFx0bmZfY3RfZHVtcF90dXBsZShcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbQ1RJTkZPMkRJUihjdGluZm8pXS50dXBsZSk7XG4xNjgyOlx0XG4xNjgzOlx0XHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cbjE2ODQ6XHRcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbjE2ODU6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjE2ODY6XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfcmFzOiBkZWNvZGluZyBlcnJvcjogJXNcXG5cJiMzNDssXG4xNjg3Olx0XHRcdFx0IHJldCA9PSBIMzIzX0VSUk9SX0JPVU5EID9cbjE2ODg6XHRcdFx0XHQgXCYjMzQ7b3V0IG9mIGJvdW5kXCYjMzQ7IDogXCYjMzQ7b3V0IG9mIHJhbmdlXCYjMzQ7KTtcbjE2ODk6XHRcdFx0Z290byBhY2NlcHQ7XG4xNjkwOlx0XHR9XG4xNjkxOlx0XG4xNjkyOlx0XHQvKiBQcm9jZXNzIFJBUyBtZXNzYWdlICovXG4xNjkzOlx0XHRpZiAocHJvY2Vzc19yYXMoc2tiLCBjdCwgY3RpbmZvLCBwcm90b2ZmLCBcdTAwMjZkYXRhLCBcdTAwMjZyYXMpIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njk2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyoqCgpPa2F5LCBzbyBgZ2V0X3VkcF9kYXRhYCBoYW5kcyBtZSBhIHBvaW50ZXIgdG8gdGhlIFVEUCBwYXlsb2FkLCBhbmQgYGRhdGFsZW5gIGdpdmVzIG1lIGl0cyBhY3R1YWwgc2l6ZS4gVGhpcyBtZWFucyBgc3pgIGlzIHRoZSByZWFsIHBheWxvYWQgbGVuZ3RoLCBnb3QgaXQuIElmIEkgYWR2YW5jZSBgYnMtJmd0O2N1cmAgYmV5b25kIGBicy0mZ3Q7ZW5kYCwgdGhhdCBzY3JlYW1zICYjMzQ7cmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIFVEUCBwYXlsb2FkISYjMzQ7LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCYjMzk7cyAqYWZ0ZXIqIHRoZSBwYXlsb2FkPyBJcyBpdCB1bmluaXRpYWxpemVkIG1lbW9yeT8KClR5cGljYWxseSwgdGhlIHBhY2tldCBkYXRhIGxpdmVzIGluIGBza2ItJmd0O2RhdGFgLCByaWdodD8gSWYgSSByZWFkIHBhc3QgdGhlIGRlc2lnbmF0ZWQgcGF5bG9hZCBsZW5ndGgsIEkgY291bGQgaGl0IHBhZGRpbmcsIGRhdGEgZnJvbSBvdGhlciBwYWNrZXRzLCBvciwgY3J1Y2lhbGx5LCB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiBJJiMzOTttIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSSBrbm93IEtBU0FOIGNhdGNoZXMgb3V0LW9mLWJvdW5kcyByZWFkcyAqYmV5b25kKiB0aGUgYnVmZmVyJiMzOTtzIGFsbG9jYXRpb24uIElmIEkgcmVhZCBiZXlvbmQgdGhlIGJ1ZmZlciwgS0FTQU4gZmxhZ3MgaXQuIElmIEkgcmVhZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZSBidXQgcGFzdCB0aGUgcGFja2V0IGxlbmd0aCAoYHNrYi0mZ3Q7bGVuYCksIGl0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LiBLQVNBTiBtaWdodCBtaXNzIGl0LCBidXQgS01TQU4gc2hvdWxkIGNhdGNoIGl0IGJlY2F1c2UgdGhhdCBwYXJ0IG9mIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCB1bmluaXRpYWxpemVkLgoKV2FpdCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXMgdGhlIG1lbW9yeSBwYXN0IGBza2ItJmd0O2xlbmAgKmFsd2F5cyogdW5pbml0aWFsaXplZD8gWWVzISBXaGVuIGFuIGBza2JgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCwgdGhlIGVudGlyZSBidWZmZXIgaXMgYWxsb2NhdGVkLCBidXQgb25seSB0aGUgcGFydHMgZmlsbGVkIHdpdGggdGhlIHBhY2tldCYjMzk7cyBkYXRhIGFyZSBhY3R1YWxseSBpbml0aWFsaXplZC4gVGhlIHJlc3QgaXMgbGVmdCBhcy1pcywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdW5pbml0aWFsaXplZC4gU28sIHJlYWRpbmcgcGFzdCB0aGUgcGF5bG9hZCBjb3VsZCB2ZXJ5IHdlbGwgbWVhbiBJJiMzOTttIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpDb3VsZCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICphY3R1YWxseSogYmUgcHJvYmxlbWF0aWMsIHRoZSB3YXkgS01TQU4gd291bGQgY29tcGxhaW4/IFllcywgYmVjYXVzZSBgZ2V0X3VpbnRgIHJlYWRzIGZyb20gaXQgaW50byBgdmAsIGFuZCBgdmAgY291bGQgdGhlbiBiZSB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjb3BpZWQgZWxzZXdoZXJlIQoKSG9sZCBvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIGBnZXRfdWludGAgYWN0dWFsbHkgcmVhZHMgZnJvbTogYGJzLSZndDtjdXJgLgoKYGBgYwoJc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpCgl7CgkJdW5zaWduZWQgaW50IHYgPSAwOwoJCXN3aXRjaCAoYikgewoJCWNhc2UgNDoKCQkJdiB8PSAqYnMtJmd0O2N1ciYjNDM7JiM0Mzs7CgkJCXYgJmx0OyZsdDs9IDg7CgkJCWZhbGx0aHJvdWdoOwoJCS8vIC4uLgpgYGAKCklmIGBicy0mZ3Q7Y3VyYCBpcyBwb2ludGluZyBwYXN0IHRoZSBpbml0aWFsaXplZCBwYWNrZXQgZGF0YSwgdGhlbiBgKmJzLSZndDtjdXJgIGlzIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQmluZ28hIEtNU0FOICpzaG91bGQqIGRldGVjdCB0aGlzIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkhCgpXYWl0IGEgc2Vjb25kLCBkb2VzIEtBU0FOIGV2ZW4gY2FyZSBhYm91dCB0aGlzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBLQVNBTiBvbmx5IGZsYWdzIHJlYWRzIHRoYXQgZ28gYmV5b25kIHRoZSAqYWxsb2NhdGVkKiBidWZmZXIsIG5vdCBqdXN0IHRoZSBsb2dpY2FsIHBhY2tldCBwYXlsb2FkLiBTa2IgZGF0YSBidWZmZXJzIGdlbmVyYWxseSBoYXZlIHNvbWUgdGFpbHJvb20sIHRoYXQmIzM5O3Mgd2hhdCBgc2tiLSZndDt0YWlsYCBhbmQgYHNrYi0mZ3Q7ZW5kYCBhcmUgZm9yLCB0byBhZGQgaGVhZGVycy90cmFpbGVycyBsYXRlci4gU28sIHRoZXJlIGlzIG9mdGVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJldHdlZW4gYHNrYi0mZ3Q7dGFpbGAgYW5kIGBza2ItJmd0O2VuZGAuCgpUaGVyZWZvcmUsIHJlYWRpbmcgcGFzdCB0aGUgcGFja2V0IHBheWxvYWQgYnV0IHN0YXlpbmcgd2l0aGluIHRoZSBgc2tiYCBkYXRhIGJ1ZmZlciBpcyBvdXQtb2YtYm91bmRzICpmcm9tIHRoZSBwYWNrZXQmIzM5O3MgcGVyc3BlY3RpdmUqLCBidXQgTk9UIGZyb20gdGhlIG1lbW9yeSBhbGxvY2F0b3ImIzM5O3MgcGVyc3BlY3RpdmUuIFNvLCBLQVNBTiB3aWxsIE5PVCBjYXRjaCBpdCBiZWNhdXNlIGl0JiMzOTtzIHN0aWxsIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4gQnV0IEtNU0FOIFdJTEwgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgdGFpbHJvb20gaXMgKnVuaW5pdGlhbGl6ZWQqISBUaGlzIGlzIGEgZ29vZCBkaXNjb3ZlcnkhCgpJIHNob3VsZCBhbHNvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGdldF91ZHBfZGF0YWAgbGluZWFyaXplcyB0aGUgYHNrYmAgb3IganVzdCByZXR1cm5zIGEgcG9pbnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3VkcF9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHE5MzFfZXhwX3BvbGljeSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTQyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTE0MzpzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3VkcF9kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTE0NC1cdFx0XHRcdCAgIGludCAqZGF0YWxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY3Ni1cdC8qIEdldCBVRFAgZGF0YSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY3NzpcdGRhdGEgPSBnZXRfdWRwX2RhdGEoc2tiLCBwcm90b2ZmLCBcdTAwMjZkYXRhbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2NzgtXHRpZiAoZGF0YSA9PSBOVUxMKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGdldF91ZHBfZGF0YWAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGdldF91ZHBfZGF0YWAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIG91ciBVRFAgZGF0YSBpbmdlc3Rpb24gcGlwZWxpbmUuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgZ2l2ZW4gVURQJiMzOTtzIGluaGVyZW50IGNoYXJhY3RlcmlzdGljcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHBhY2tldCBsb3NzLCByZW9yZGVyaW5nLCBhbmQgYW55IGJ1ZmZlcmluZyBzdHJhdGVnaWVzIGltcGxlbWVudGVkLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaWYgaXQgaW50ZWdyYXRlcyB3ZWxsIHdpdGggb3VyIGV4aXN0aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIHN5c3RlbXMuIERvZXMgaXQgdXNlIG5vbi1ibG9ja2luZyBJL08/IEhvdyBlZmZpY2llbnQgaXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50PyBEb2VzIGl0IGFjY291bnQgZm9yIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGxhcmdlIGRhdGFncmFtcz8gVGhpcyBpcyBsaWtlbHkgYSBidWlsZGluZyBibG9jayBmb3Igc29tZSBhcHBsaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDM6XHRzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3VkcF9kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuMTE0NDpcdFx0XHRcdFx0ICAgaW50ICpkYXRhbGVuKVxuMTE0NTpcdHtcbjExNDY6XHRcdGNvbnN0IHN0cnVjdCB1ZHBoZHIgKnVoO1xuMTE0NzpcdFx0c3RydWN0IHVkcGhkciBfdWg7XG4xMTQ4Olx0XHRpbnQgZGF0YW9mZjtcbjExNDk6XHRcbjExNTA6XHRcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF91aCksIFx1MDAyNl91aCk7XG4xMTUxOlx0XHRpZiAodWggPT0gTlVMTClcbjExNTI6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTUzOlx0XHRkYXRhb2ZmID0gcHJvdG9mZiAmIzQzOyBzaXplb2YoX3VoKTtcbjExNTQ6XHRcdGlmIChkYXRhb2ZmIFx1MDAzZT0gc2tiLVx1MDAzZWxlbilcbjExNTU6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTU2Olx0XHQqZGF0YWxlbiA9IHNrYi1cdTAwM2VsZW4gLSBkYXRhb2ZmO1xuMTE1NzpcdFx0aWYgKCpkYXRhbGVuIFx1MDAzZSBIMzIzX01BWF9TSVpFKVxuMTE1ODpcdFx0XHQqZGF0YWxlbiA9IEgzMjNfTUFYX1NJWkU7XG4xMTU5Olx0XG4xMTYwOlx0XHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgKmRhdGFsZW4sIGgzMjNfYnVmZmVyKTtcbjExNjE6XHR9XG4xMTYyOlx0XG4xMTYzOlx0c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpmaW5kX2V4cGVjdChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4xMTY0Olx0XHRcdFx0XHRcdCAgICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXG4xMTY1Olx0XHRcdFx0XHRcdCAgICAgICBfX2JlMTYgcG9ydClcbjExNjY6XHR7XG4xMTY3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBBY3F1aXNpdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBnZXRfdWRwX2RhdGFgIHdvcmtzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgVURQIGRhdGEgd2l0aGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgaW4gY29uanVuY3Rpb24gd2l0aCBgaDMyM19idWZmZXJgLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIFRoZSBsb2dpYyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpZiB0aGUgZGF0YSBpcyBhbHJlYWR5IGNvbnRpZ3VvdXMsICYjMzQ7bGluZWFyJiMzNDsgaW4gdGhlIGBza2JgLCBpdCBkaXJlY3RseSBoYW5kcyBiYWNrIGEgcG9pbnRlciBpbnRvIHRoZSBgc2tiYCYjMzk7cyBkYXRhIHNlY3Rpb24uIFRoYXQmIzM5O3MgZWZmaWNpZW50LiBIb3dldmVyLCBpZiB0aGUgZGF0YSBpcyBmcmFnbWVudGVkLCBpLmUuLCAmIzM0O25vbi1saW5lYXIsJiMzNDsgYGdldF91ZHBfZGF0YWAgY2xldmVybHkgY29waWVzIGl0IGFsbCBpbnRvIHRoaXMgYGgzMjNfYnVmZmVyYCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gKnRoYXQqLiBNYWtlcyBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhlIGFjY2VzcyB0byB0aGUgZGF0YSBpbiBlaXRoZXIgY2FzZS4KCk5vdyB0aGUgcmVhbCBxdWVzdGlvbiBiZWNvbWVzOiBXaGF0IGtpbmQgb2YgYnVmZmVyIGlzIGBoMzIzX2J1ZmZlcmA/IElzIGl0IGEgc3RhdGljIGJ1ZmZlciwgZ2xvYmFsbHkgZGVmaW5lZCwgYWNjZXNzaWJsZSBldmVyeXdoZXJlPyBPciwgaXMgaXQgcGVyaGFwcyBhIHBlci1DUFUgYnVmZmVyLCBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSBieSByZWR1Y2luZyBjb250ZW50aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZGVmaW5pdGlvbiBvZiB0aGF0IHRvIGJlIHN1cmUuIEl0IGNvdWxkIG1ha2UgYSBodWdlIGRpZmZlcmVuY2UgaW4gcGVyZm9ybWFuY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2gzMjNfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTg9c3RhdGljIERFRklORV9TUElOTE9DSyhuZl9oMzIzX2xvY2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTk6c3RhdGljIGNoYXIgKmgzMjNfYnVmZmVyO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjAtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NjU9c3RhdGljIGludCBnZXRfdHBrdF9kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEwMC1cdFx0dHBrdCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHRjcGRhdGFvZmYsIHRjcGRhdGFsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMDE6XHRcdFx0XHRcdCAgaDMyM19idWZmZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTAyLVx0XHRpZiAoIXRwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTE0Mz1zdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3VkcF9kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExNTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTYwOlx0cmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsICpkYXRhbGVuLCBoMzIzX2J1ZmZlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTYxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzY0PXN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaDMyM19maW5pKHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2Ni1cdGgzMjNfaGVscGVyX2V4aXQoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3Njc6XHRrZnJlZShoMzIzX2J1ZmZlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzY4LVx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfaDMyMzogZmluaVxcblwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTc3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaDMyM19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3Nzc6XHRoMzIzX2J1ZmZlciA9IGttYWxsb2MoSDMyM19NQVhfU0laRSAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3Nzg6XHRpZiAoIWgzMjNfYnVmZmVyKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3OS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc4NS1lcnIxOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc4NjpcdGtmcmVlKGgzMjNfYnVmZmVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3ODctXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVnVsbmVyYWJpbGl0eSBBbmFseXNpcyBvZiB0aGUgSC4zMjMgUGFyc2VyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgSC4zMjMgcGFyc2VyLCBhbmQgSSB0aGluayBJJiMzOTt2ZSBmb3VuZCBzb21ldGhpbmcuIFRoZSBgaDMyM19idWZmZXJgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2AsIHdpdGggYSBzaXplIG9mIGBIMzIzX01BWF9TSVpFICYjNDM7IDFgLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzICpub3QqIHplcm9lZC4gVGhhdCBhbG9uZSByYWlzZXMgYW4gZXllYnJvdy4gVGhlbiwgdGhlIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uIGNvbWVzIGludG8gcGxheS4gSXQgY29waWVzIGRhdGEgaW50byBgaDMyM19idWZmZXJgIGJhc2VkIG9uIGBkYXRhbGVuYCwgYnV0IGl0IG9ubHkgY29waWVzIGEgcG9ydGlvbi4gVGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBpcyBsZWZ0IHVudG91Y2hlZCwgZmlsbGVkIHdpdGggd2hhdGV2ZXIgZ2FyYmFnZSB3YXMgdGhlcmUgYmVmb3JlLgoKSSBzdGFydGVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSwgbGlrZSBpZiB0aGUgcGFyc2VyIHNvbWVob3cgcmVhZCBwYXN0IHRoZSB2YWxpZCBkYXRhLiBBbmQgdGhlbiBJIHJlY2FsbGVkIGhvdyBgc2tiX2hlYWRlcl9wb2ludGVyYCBoYW5kbGVzIGRhdGEuIElmIHRoZSBkYXRhIGlzIG5vbi1saW5lYXIsIGl0IGNvcGllcyBpdCBpbnRvIHRoZSBidWZmZXIuIEJ1dCwgd2hlbiBpdCBpcyBsaW5lYXIgaXQgcmV0dXJucyBhIHBvaW50ZXIgaW50byB0aGUgc2tiIGRhdGEgaXRzZWxmLiBFaXRoZXIgd2F5IHRoZSBkYXRhIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2Agb3Igc2ltaWxhciBhbmQgdGhlIHBvcnRpb24gcGFzdCB0aGUgc2tiJiMzOTtzIHRhaWwgY2FuIGJlIHVuaW5pdGlhbGl6ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LiBTcGVjaWZpY2FsbHksIGxvb2sgYXQgdGhpcyBwaWVjZSBvZiBjb2RlOgoKYGBgYwoJCWNhc2UgQ09OUzoJCS8qIDY0SyAmbHQ7IFJhbmdlICZsdDsgNEcgKi8KCQkJaWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKQoJCQkJcmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7CgkJCWxlbiA9IGdldF9iaXRzKGJzLCAyKSAmIzQzOyAxOwoJCQlpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSkKCQkJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwoJCQlCWVRFX0FMSUdOKGJzKTsKCQkJaWYgKGJhc2UgJmFtcDsmYW1wOyAoZi0mZ3Q7YXR0ciAmYW1wOyBERUNPREUpKSB7CS8qIHRpbWVUb0xpdmUgKi8KCQkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CgkJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwoJCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwoJCQl9IGVsc2UgewoJCQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwoJCQl9CgkJCWJyZWFrOwpgYGAKCkJlZm9yZSBhIHNwZWNpZmljIHBhdGNoLCB0aGVyZSB3YXMgYSBkb3VibGUgYWR2YW5jZSBvZiBgYnMtJmd0O2N1cmAuIElmIGBiYXNlICZhbXA7JmFtcDsgKGYtJmd0O2F0dHIgJmFtcDsgREVDT0RFKWAgaXMgdHJ1ZSwgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gd291bGQgcmVhZCBgbGVuYCBieXRlcyBhbmQgYWR2YW5jZSBgYnMtJmd0O2N1cmAgYnkgYGxlbmAuIEJ1dCB0aGVuIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW5gIHdhcyBleGVjdXRlZCwgYWR2YW5jaW5nIGl0ICphZ2FpbiouIE5vdywgdGhlIGluaXRpYWwgYm91bmRhcnkgY2hlY2sgb25seSBjaGVja2VkIGZvciBgbGVuYCBieXRlcywgYW5kIHRoZSBzZWNvbmQgYWR2YW5jZSBjYXVzZWQgYGJzLSZndDtjdXJgIHRvIGJlIGFkdmFuY2VkIHBhc3QgYGJzLSZndDtlbmRgIGJ5IHVwIHRvIGBsZW5gIGJ5dGVzLiBTcGVjaWZpY2FsbHksIGBsZW5gIGNhbiBiZSBiZXR3ZWVuIDEgYW5kIDQuIFRoaXMgbWVhbnMgYGJzLSZndDtjdXJgIGNvdWxkIGp1bXAgcGFzdCBgYnMtJmd0O2VuZGAgYnkgdXAgdG8gNCBieXRlcy4gVGhpcyBieXBhc3NlcyB0aGUgYm91bmRhcnkgY2hlY2suCgpTbywgd2hhdCBoYXBwZW5zIG5leHQ/IFRoZSBmb2xsb3dpbmcgZmllbGRzIGdldCBkZWNvZGVkLiBUaGUgY29kZSBpcyBzdXBwb3NlZCB0byBjaGVjayB3aXRoIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhhdCBmdW5jdGlvbiBpczoKCmBgYGMKaW50IG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoc3RydWN0IGJpdHN0ciAqYnMsIHNpemVfdCBieXRlcywgc2l6ZV90IGJpdHMpCnsKCWJpdHMgJiM0Mzs9IGJzLSZndDtiaXQ7CglieXRlcyAmIzQzOz0gYml0cyAvIDg7CglpZiAoYnMtJmd0O2N1ciAmIzQzOyBieXRlcyAmZ3Q7IGJzLSZndDtlbmQpCgkJcmV0dXJuIDE7CglyZXR1cm4gMDsKfQpgYGAKClRoZSB0aGluZyBpcywgaWYgYGJzLSZndDtjdXJgIGlzIGFscmVhZHkgZ3JlYXRlciB0aGFuIGBicy0mZ3Q7ZW5kYCwgdGhlIGJvdW5kYXJ5IGNoZWNrICp3aWxsKiBmYWlsLCBhbmQgdGhlIGRlY29kZXIgd2lsbCByZXR1cm4gYEgzMjNfRVJST1JfQk9VTkRgLiBTbywgd2hpbGUgaXQmIzM5O3MgbmljZSB0aGF0IHRoZXJlIGlzIGEgY2hlY2ssIGRvZXMgdGhpcyBtZWFuIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZD8gSSBoYWQgdG8gdHJhY2UgaXQgYmFjaywgYW5kIGl0IGxvb2tzIGxpa2Ugbm8sIHRoZSBib3VuZHMgYXJlIGNoZWNrZWQgcmlnaHQgKmJlZm9yZSogYGdldF91aW50YCB3aGljaCBoYXMgdGhlIHBvdGVudGlhbCB0byByZWFkIGJleW9uZCB0aGUgYm91bmRhcmllcy4KClNvLCB3aXRoIHRoZSBmaXgsIHRoaXMgY29kZToKCmBgYGMKCQkJaWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpCgkJCQlyZXR1cm4gSDMyM19FUlJPUl9CT1VORDsKCQkJQllURV9BTElHTihicyk7CgkJCWlmIChiYXNlICZhbXA7JmFtcDsgKGYtJmd0O2F0dHIgJmFtcDsgREVDT0RFKSkgewkvKiB0aW1lVG9MaXZlICovCgkJCQl1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtJmd0O2xiOwpgYGAKCkNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdCBgYnMtJmd0O2N1cmAgaXMgd2l0aGluIGJvdW5kcyAqYmVmb3JlKiBgZ2V0X3VpbnRgIHJlYWRzIHRoZSBkYXRhLiBTbywgd2hpbGUgd2UgYXJlIGdvaW5nIHBhc3QgdGhlIGJvdW5kcyBjaGVjayB3ZSBzaG91bGRuJiMzOTt0IGJlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZW4gd2UgcmV0dXJuLiBUaGUgbmV4dCBmaWVsZCB0aGVuIHN0YXJ0cyBkZWNvZGluZyBhbmQgdGhlIHByb2Nlc3MgbG9vcHMgYWdhaW4uCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgcGxhY2VzCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVjb2RlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwNT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA3LS8qIERlY29kZXIgRnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDg6c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwOTpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMDpzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTExOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTM6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNDpzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE1OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTY6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNzpzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE4OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExOTpzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEyMz1zdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjQ6XHRkZWNvZGVfbnVsLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI1Olx0ZGVjb2RlX2Jvb2wsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjY6XHRkZWNvZGVfb2lkLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI3Olx0ZGVjb2RlX2ludCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyODpcdGRlY29kZV9lbnVtLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI5Olx0ZGVjb2RlX2JpdHN0cixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEzMDpcdGRlY29kZV9udW1zdHIsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzE6XHRkZWNvZGVfb2N0c3RyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTMyOlx0ZGVjb2RlX2JtcHN0cixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEzMzpcdGRlY29kZV9zZXEsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzQ6XHRkZWNvZGVfc2Vxb2YsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzU6XHRkZWNvZGVfY2hvaWNlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTM2LX07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI3My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI3NDpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjc1LSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjgxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjgyOnN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjgzLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI5Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI5MzpzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjk0LSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzExLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzEyOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTMtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNjI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzc3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mzc4OnN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzktICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MTQ6c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxNS0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQzNDpzdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDM1LSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDgxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDgyOnN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODMtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MTE6c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY0NDpzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NDUtICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTczOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc0MDpzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQxLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODIxPWludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODMyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODMzOlx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNnJhc19tZXNzYWdlLCAoY2hhciAqKSByYXMsIDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM0LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NDktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NTA6XHRyZXR1cm4gZGVjb2RlX3NlcShcdTAwMjZicywgXHUwMDI2aDMyM191c2VyaW5mb3JtYXRpb24sIChjaGFyICopIHV1aWUsIDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04NTM9aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4Njc6XHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcdTAwMjZicywgXHUwMDI2bXVsdGltZWRpYXN5c3RlbWNvbnRyb2xtZXNzYWdlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODY4LVx0XHRcdCAgICAgKGNoYXIgKikgbXNjbSwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjAxCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRGVjb2RpbmcgUHJvY2VkdXJlcyBmb3IgUG90ZW50aWFsIEJvdW5kYXJ5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgYGRlY29kZV9zZXFgIGFuZCBgZGVjb2RlX2Nob2ljZWAgZnVuY3Rpb25zLCBhcmUgaGFuZGxpbmcgYm91bmRhcnkgY29uZGl0aW9ucyBjb3JyZWN0bHkuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBwb3RlbnRpYWxseSByZWFkaW5nIGRhdGEgKmJlZm9yZSogdGhleSYjMzk7dmUgdmVyaWZpZWQgdGhhdCB0aGUgcmVhZCBpcyBzYWZlLiBJZiB0aGVyZSYjMzk7cyBhbnkgY2hhbmNlIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2ssIHRoYXQmIzM5O3MgYSB2dWxuZXJhYmlsaXR5IEkgbmVlZCB0byBhZGRyZXNzIHJpZ2h0IG5vdy4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50OyBvZmYtYnktb25lIGVycm9ycyBhbmQgdW5jaGVja2VkIGluZGV4IGFjY2VzcyBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgYnVncyB0aGF0IGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IHByb2JsZW1zLiBJIHdhbnQgdG8gcnVsZSBvdXQgdGhvc2UgcG9zc2liaWxpdGllcyB3aXRoIGEgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTE6XHRzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDUxMjpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNTEzOlx0e1xuIDUxNDpcdFx0dW5zaWduZWQgaW50IGV4dCwgYm1wLCBpLCBvcHQsIGxlbiA9IDAsIGJtcDIsIGJtcDJfbGVuO1xuIDUxNTpcdFx0aW50IGVycjtcbiA1MTY6XHRcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XG4gNTE3Olx0XHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xuIDUxODpcdFxuIDUxOTpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gNTIwOlx0XG4gNTIxOlx0XHQvKiBEZWNvZGU/ICovXG4gNTIyOlx0XHRiYXNlID0gKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpID8gYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCA6IE5VTEw7XG4gNTIzOlx0XG4gNTI0Olx0XHQvKiBFeHRlbnNpYmxlPyAqL1xuIDUyNTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxuIDUyNjpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1Mjc6XHRcdGV4dCA9IChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgPyBnZXRfYml0KGJzKSA6IDA7XG4gNTI4Olx0XG4gNTI5Olx0XHQvKiBHZXQgZmllbGRzIGJpdG1hcCAqL1xuIDUzMDpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxuIDUzMTpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1MzI6XHRcdGlmIChmLVx1MDAzZXN6IFx1MDAzZSAzMilcbiA1MzM6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XG4gNTM0Olx0XHRibXAgPSBnZXRfYml0bWFwKGJzLCBmLVx1MDAzZXN6KTtcbiA1MzU6XHRcdGlmIChiYXNlKVxuIDUzNjpcdFx0XHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSBibXA7XG4gNTM3Olx0XG4gNTM4Olx0XHQvKiBEZWNvZGUgdGhlIHJvb3QgY29tcG9uZW50cyAqL1xuIDUzOTpcdFx0Zm9yIChpID0gb3B0ID0gMCwgc29uID0gZi1cdTAwM2VmaWVsZHM7IGkgXHUwMDNjIGYtXHUwMDNlbGI7IGkmIzQzOyYjNDM7LCBzb24mIzQzOyYjNDM7KSB7XG4gNTQwOlx0XHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgU1RPUCkge1xuIDU0MTpcdFx0XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCAobGV2ZWwgJiM0MzsgMSkgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OyxcbiA1NDI6XHRcdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG4gNTQzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcbiA1NDQ6XHRcdFx0fVxuIDU0NTpcdFxuIDU0NjpcdFx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IE9QVCkge1x0LyogT3B0aW9uYWwgY29tcG9uZW50ICovXG4gNTQ3Olx0XHRcdFx0aWYgKCEoKDB4ODAwMDAwMDBVIFx1MDAzZVx1MDAzZSAob3B0JiM0MzsmIzQzOykpIFx1MDAyNiBibXApKVx0LyogTm90IGV4aXN0ICovXG4gNTQ4Olx0XHRcdFx0XHRjb250aW51ZTtcbiA1NDk6XHRcdFx0fVxuIDU1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUxMAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyBTZXF1ZW5jZSBDb25jZXJucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVjb2RlX3NlcWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNhbGxpbmcgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIHR3aWNlLiBUaGUgZmlyc3QgY2FsbCBjaGVja3MgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoZSBzZWNvbmQgb25lIGNoZWNrcyB0aGUgd2hvbGUgZnJhbWUgc2l6ZS4gVGhpcyBpcyBwb3RlbnRpYWxseSBhbiBpc3N1ZS4gU3BlY2lmaWNhbGx5LCB0aGUgYml0c3RyZWFtIGBic2AgY291bGQgYmUgaW52YWxpZCBhbmQgaGF2ZSBgYnMtJmd0O2N1cmAgYmUgZ3JlYXRlciB0aGFuIGBicy0mZ3Q7ZW5kYC4KClRoZSBsb2dpYyBpbiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBjYWxjdWxhdGVzIGhvdyBtYW55IGJ5dGVzIGl0ICp3b3VsZCogbmVlZCB0byByZWFkIChiYXNlZCBvbiB0aGUgYGJ5dGVzYCBhbmQgYGJpdHNgIHBhcmFtZXRlcnMpLCBhZGRzIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGBicy0mZ3Q7Y3VyYCwgYW5kIGNoZWNrcyBpZiBpdCBvdmVycnVucyB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGBicy0mZ3Q7ZW5kYC4KCklmIGBicy0mZ3Q7Y3VyICZndDsgYnMtJmd0O2VuZGAgYXQgdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBjYWxsLCB0aGVuIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIFNpbmNlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCByZXR1cm5zIGBIMzIzX0VSUk9SX0JPVU5EYCBpZiBpdCByZXR1cm5zIDEsIHRoYXQgbWVhbnMgdGhlIGRlY29kZXIgZXhpdHMgd2l0aG91dCBkb2luZyBhbnl0aGluZyBpZiB0aGUgYml0c3RyZWFtIHBvaW50ZXIgaXMgZ2FyYmFnZS4gVGhhdCYjMzk7cyBub3QgaWRlYWwuIEl0JiMzOTtzIGxpa2VseSBhbiBpc3N1ZSBiZWNhdXNlIGFueSBhdHRlbXB0cyB0byBkZWNvZGUgdmFsaWQgZGF0YSB3b3VsZCBhbHNvIGJlIHNraXBwZWQuCgpJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRlY29kZV9jaG9pY2VgIG5leHQgdG8gc2VlIGlmIHRoZSBpc3N1ZSBpcyBwcm9wYWdhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDA6XHRzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDc0MTpcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNzQyOlx0e1xuIDc0MzpcdFx0dW5zaWduZWQgaW50IHR5cGUsIGV4dCwgbGVuID0gMDtcbiA3NDQ6XHRcdGludCBlcnI7XG4gNzQ1Olx0XHRjb25zdCBzdHJ1Y3QgZmllbGRfdCAqc29uO1xuIDc0NjpcdFx0dW5zaWduZWQgY2hhciAqYmVnID0gTlVMTDtcbiA3NDc6XHRcbiA3NDg6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDc0OTpcdFxuIDc1MDpcdFx0LyogRGVjb2RlPyAqL1xuIDc1MTpcdFx0YmFzZSA9IChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSA/IGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQgOiBOVUxMO1xuIDc1MjpcdFxuIDc1MzpcdFx0LyogRGVjb2RlIHRoZSBjaG9pY2UgaW5kZXggbnVtYmVyICovXG4gNzU0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4gNzU1Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDc1NjpcdFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gNzU3Olx0XHRcdGV4dCA9IDE7XG4gNzU4Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCA3KSlcbiA3NTk6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA3NjA6XHRcdFx0dHlwZSA9IGdldF9iaXRzKGJzLCA3KSAmIzQzOyBmLVx1MDAzZWxiO1xuIDc2MTpcdFx0fSBlbHNlIHtcbiA3NjI6XHRcdFx0ZXh0ID0gMDtcbiA3NjM6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxuIDc2NDpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDc2NTpcdFx0XHR0eXBlID0gZ2V0X2JpdHMoYnMsIGYtXHUwMDNlc3opO1xuIDc2NjpcdFx0XHRpZiAodHlwZSBcdTAwM2U9IGYtXHUwMDNlbGIpXG4gNzY3Olx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XG4gNzY4Olx0XHR9XG4gNzY5Olx0XG4gNzcwOlx0XHQvKiBXcml0ZSBUeXBlICovXG4gNzcxOlx0XHRpZiAoYmFzZSlcbiA3NzI6XHRcdFx0Kih1bnNpZ25lZCBpbnQgKiliYXNlID0gdHlwZTtcbiA3NzM6XHRcbiA3NzQ6XHRcdC8qIENoZWNrIFJhbmdlICovXG4gNzc1Olx0XHRpZiAodHlwZSBcdTAwM2U9IGYtXHUwMDNldWIpIHtcdC8qIE5ld2VyIHZlcnNpb24/ICovXG4gNzc2Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDc3NzpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG4gNzc4Olx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNzc5Olx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1NQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGRlY29kZV9jaG9pY2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBkZWNvZGVfY2hvaWNlYCBpcyBjYWxsaW5nIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCAqYmVmb3JlKiBpdCBzdGFydHMgcmVhZGluZy4gVGhhdCYjMzk7cyBnb29kLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBpZiBgYnMtJmd0O2N1cmAgZ2V0cyBtZXNzZWQgdXAg4oCTIG1heWJlIGFkdmFuY2VkIHBhc3QgYGJzLSZndDtlbmRgIGJ5LCBzYXksIGBkZWNvZGVfaW50YCDigJMgdGhlIHZlcnkgbmV4dCBmaWVsZCBzaG91bGQgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgYm91bmRhcnkgY2hlY2sgYW5kIHJldHVybiBgSDMyM19FUlJPUl9CT1VORGAuIFNvLCB0aGF0ICpzaG91bGQqIGNhdGNoIGFueSBvdmVycnVuIGlzc3Vlcy4KCkJ1dCB3YWl0IGEgbWludXRl4oCmIHdoYXQgaWYgdGhlICpuZXh0KiBmaWVsZCAqaXMqIGFub3RoZXIgYGRlY29kZV9pbnRgIGNhbGw/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMgY2FzZS4gTGV0JiMzOTtzIHNlZS4uLiBgZGVjb2RlX2ludGAgaXRzZWxmOgoKYGBgYwoJY2FzZSBDT05TOgkJLyogNjRLICZsdDsgUmFuZ2UgJmx0OyA0RyAqLwoJCWlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSkKCQkJcmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7CmBgYAoKUmlnaHQhIEl0ICphbHNvKiBkb2VzIGEgYm91bmRhcnkgY2hlY2sgYmVmb3JlIHJlYWRpbmchIFRoYXQmIzM5O3MgY2xldmVyLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHJvYnVzdCBvbiBpdHMgb3duLiBJdCBhcHBlYXJzIHRoYXQgaXQgcHJvdGVjdHMgaXRzZWxmIGV2ZW4gaWYgdGhlIHByZWNlZWRpbmcgY29kZSBtYWRlIGEgYmx1bmRlci4KCkhtbS4uLiBPa2F5LCBzbywgYGRlY29kZV9pbnRgIGlzIHNhZmUgYmVjYXVzZSBpdCBjaGVja3MgYm91bmRhcnkuIE5vdyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCBvdGhlciBwb3RlbnRpYWwgcHJvYmxlbWF0aWMgZmllbGQgY2FsbHMuIFdoYXQgYWJvdXQgYGRlY29kZV9udWxgPyBEb2VzIHRoYXQgaGF2ZSBhbnkgYm91bmRhcnkgY2hlY2tpbmc/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NDpcdHN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMjc1Olx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAyNzY6XHR7XG4gMjc3Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAyNzg6XHRcbiAyNzk6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gMjgwOlx0fVxuIDI4MTpcdFxuIDI4MjpcdHN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDI4MzpcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDI4NDpcdHtcbiAyODU6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDI4NjpcdFxuIDI4NzpcdFx0SU5DX0JJVChicyk7XG4gMjg4Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMjg5Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDI5MDpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAyOTE6XHR9XG4gMjkyOlx0XG4gMjkzOlx0c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb2RpbmcgQm9vbGVhbiBWYWx1ZXMgYW5kIE5hdmlnYXRpbmcgdGhlIEJpdHN0cmVhbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVjb2RlX2Jvb2xgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBJdCBraWNrcyB0aGluZ3Mgb2ZmIHdpdGggYSBjYWxsIHRvIGBJTkNfQklUKGJzKWAuIFRoYXQgbWFjcm8gbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGluY3JlbWVudGluZyB0aGUgYml0IHBvc2l0aW9uIHdpdGhpbiBhIGJpdHN0cmVhbSBzdHJ1Y3R1cmUsIGBic2AuIFNwZWNpZmljYWxseSwgaXQgaW5jcmVtZW50cyBgYnMtJmd0O2JpdGAuIElmIGBicy0mZ3Q7Yml0YCBnb2VzIHBhc3QgNywgaXQgcmVzZXRzIGl0IHRvIDAgYW5kIGFkdmFuY2VzIHRoZSBjdXJyZW50IGJ5dGUgcG9pbnRlciBgYnMtJmd0O2N1cmAuIFNpbXBsZSBlbm91Z2gg4oCTIGl0JiMzOTtzIGp1c3QgYSB3YXkgdG8gc3RlcCB0aHJvdWdoIHRoZSBiaXRzIGluIGEgYnl0ZSBhcnJheS4KClRoZW4gY29tZXMgdGhlIGNhbGwgdG8gYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApYC4gSSBzdXNwZWN0IHRoaXMgaXMgc29tZSBraW5kIG9mIGJvdW5kYXJ5IGNoZWNrIG9yIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoZSBILjMyMyBwcm90b2NvbCwgd2hpY2ggSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGlmIGBicy0mZ3Q7Y3VyYCBleGNlZWRzIGBicy0mZ3Q7ZW5kYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgSDMyM19FUlJPUl9CT1VORGAsIHdoaWNoIG1lYW5zIGl04oCZcyBoaXQgdGhlIGVuZCBvZiB0aGUgYml0c3RyZWFtIGJlZm9yZSBpdCYjMzk7cyBmaW5pc2hlZCBwYXJzaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBhIGNoZWNrIG9uIHRoZSBiaXRzdHJlYW0gYm91bmRhcmllcyBtdXN0IGJlIGhhcHBlbmluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuCgpXYWl0IGEgc2Vjb25k4oCmIGBJTkNfQklUYCBkb2VzbiYjMzk7dCBhY3R1YWxseSByZWFkIGFueSBkYXRhIGZyb20gdGhlIGJpdHN0cmVhbSwgaXQmIzM5O3MganVzdCAqcG9zaXRpb25pbmcqIHRoZSBwb2ludGVyLiBTbywgYWxsIGl0JiMzOTtzIGRvaW5nIGlzIGFkdmFuY2luZyBvdXIgcmVhZCBwb2ludGVyLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkZWx2ZSBmdXJ0aGVyLiBPa2F5LCBsZXQmIzM5O3MgY29uc2lkZXIgYGRlY29kZV9vaWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTM6XHRzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDI5NDpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMjk1Olx0e1xuIDI5NjpcdFx0aW50IGxlbjtcbiAyOTc6XHRcbiAyOTg6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDI5OTpcdFxuIDMwMDpcdFx0QllURV9BTElHTihicyk7XG4gMzAxOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXG4gMzAyOlx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMwMzpcdFxuIDMwNDpcdFx0bGVuID0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMzA1Olx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzMDY6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzMDc6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzA4Olx0XG4gMzA5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDMxMDpcdH1cbiAzMTE6XHRcbiAzMTI6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ2NAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyBPSURzIGFuZCBCb3VuZGFyeSBDaGVja3MqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGBkZWNvZGVfb2lkYCBmdW5jdGlvbiwgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc3RhcnRzIHdpdGggYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuIFRoZW4sIGl0IGNoZWNrcyBmb3IgYSBib3VuZGFyeSBlcnJvciB1c2luZyBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuICBUaGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgcmVhZCB0aGUgbGVuZ3RoLCBhbmQgdGhlbiBhZHZhbmNlIHRoZSBjdXJyZW50IHBvaW50ZXIuICBOb3csIHRoZSBpbml0aWFsIGNhbGwgdG8gYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGlzIHRoZSBrZXkuCgpIZXJlJiMzOTtzIHRoZSBwcm9ibGVtOiBpZiwgc2F5LCBhIHByaW9yIGZ1bmN0aW9uIGxpa2UgYGRlY29kZV9pbnRgIGhhcyBhZHZhbmNlZCBgYnMtJmd0O2N1cmAgKmJleW9uZCogYGJzLSZndDtlbmRgLCB0aGVuIHRoYXQgZmlyc3QgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGNoZWNrIGlzIGdvaW5nIHRvIHRyaWdnZXIgYSBib3VuZGFyeSBlcnJvciBhbmQgcmV0dXJuIGBIMzIzX0VSUk9SX0JPVU5EYC4gIEFuZCBpdCYjMzk7cyBkb2luZyB0aGlzIGJlY2F1c2UgaWYgdGhlIHBvaW50ZXIgaXMgYWxyZWFkeSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgdGhlIGJvdW5kYXJ5IGNoZWNrIHdpbGwgY2F0Y2ggaXQuICBTcGVjaWZpY2FsbHksIGBicy0mZ3Q7Y3VyICYjNDM7IDEgJmd0OyBicy0mZ3Q7ZW5kYCBpcyB0cnVlIHdoZW4gYGJzLSZndDtjdXIgJmd0OyBicy0mZ3Q7ZW5kYC4gU28gdGhpcyBwcmV2ZW50cyBhIHJlYWQgb2YgdGhlIGJ1ZmZlci4gU28sIHRoZSBjb2RlICp3b24mIzM5O3QqIHRyeSB0byBkZXJlZmVyZW5jZSBgKmJzLSZndDtjdXJgIGlmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBoYXMgYmVlbiByZWFjaGVkLgoKQnV0Li4uIGhhbmcgb24uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgYnMtJmd0O2N1cmAgZ2V0cyByZWFkICpiZWZvcmUqIHRoaXMgYm91bmRhcnkgY2hlY2sgaGFwcGVucz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgZGVjb2RlciBmdW5jdGlvbnMgaGFuZGxlIGJ1ZmZlciBvdmVycnVucyBjb3JyZWN0bHkgKmJlZm9yZSogYXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSB0aGUgY3VycmVudCBwb2ludGVyLiBMZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRlY29kZV9lbnVtYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjI6XHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNjM6XHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzNjQ6XHR7XG4gMzY1Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuIDM2ODpcdFx0XHRJTkNfQklUUyhicywgNyk7XG4gMzY5Olx0XHR9IGVsc2Uge1xuIDM3MDpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzc0Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM3NTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNzY6XHR9XG4gMzc3Olx0XG4gMzc4Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNzk6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM4MDpcdHtcbiAzODE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDA4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk91dC1vZi1Cb3VuZHMgUmVhZCBpbiBgZ2V0X2JpdGAhKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZWNvZGVfZW51bWAgZnVuY3Rpb24sIGFuZCBpdCBjYWxscyBgZ2V0X2JpdChicylgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLi4uIGhvdyBkb2VzIGBnZXRfYml0YCBoYW5kbGUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGJpdHN0cmVhbT8mIzM0OyBJIHJlbWVtYmVyIHRoZSBjb2RlIGZvciBgZ2V0X2JpdGAsIHdoaWNoIGRvZXMgdGhpczoKCmBgYGMKc3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0KHN0cnVjdCBiaXRzdHIgKmJzKQp7Cgl1bnNpZ25lZCBpbnQgYiA9ICgqYnMtJmd0O2N1cikgJmFtcDsgKDB4ODAgJmd0OyZndDsgYnMtJmd0O2JpdCk7CgoJSU5DX0JJVChicyk7CgoJcmV0dXJuIGIgPyAxIDogMDsKfQpgYGAKCkFuZCBpdCBoaXRzIG1lIOKAkyAqdGhhdCogYCpicy0mZ3Q7Y3VyYCBkZXJlZmVyZW5jZSBoYXBwZW5zICpiZWZvcmUqIGFueSBib3VuZGFyeSBjaGVja3MhIFRoaXMgaXMgYmFkLiBSZWFsbHkgYmFkLiBJZiBgZGVjb2RlX2VudW1gIGdldHMgY2FsbGVkIHdoZW4gYGJzLSZndDtjdXJgIGlzIGFscmVhZHkgcGFzdCBgYnMtJmd0O2VuZGAsIGBnZXRfYml0YCBpcyBnb2luZyB0byBoYXBwaWx5IHJlYWQgd2hhdGV2ZXIgZ2FyYmFnZSBpcyBhdCB0aGF0IG1lbW9yeSBsb2NhdGlvbi4gSSYjMzk7bSB0YWxraW5nIGFib3V0IGEgZGlyZWN0IG91dC1vZi1ib3VuZHMgcmVhZC4gQW5kIGRlcGVuZGluZyBvbiBob3cgYGJzLSZndDtjdXJgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBoMzIzX2J1ZmZlcmAgb3IgdGhlIHNrYiB0YWlscm9vbSwgaXQgY291bGQgYmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmVjaXBlIGZvciBhIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcmVhbCBraWNrZXI/IGBkZWNvZGVfZW51bWAgaXRzZWxmIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhbnkgZXhwbGljaXQgYm91bmRhcnkgY2hlY2tzIGJlZm9yZSBpdCBjYWxscyBgZ2V0X2JpdGAuIEl0IGp1c3QgdHJ1c3RzIHRoYXQgdGhlIGJpdHN0cmVhbSBpcyB3ZWxsLWZvcm1lZC4gU28sIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgdGhpcyBgZGVjb2RlX2VudW1gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgbWlnaHQgY2FsbCBgZ2V0X2JpdGAgd2l0aG91dCBjaGVja2luZyB0aGUgYm91bmRhcnkuIElzIGBkZWNvZGVfYml0c3RyYCBhbHNvIHZ1bG5lcmFibGUgdG8gdGhpcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc4Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNzk6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM4MDpcdHtcbiAzODE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gMzgyOlx0XG4gMzgzOlx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzODQ6XHRcbiAzODU6XHRcdEJZVEVfQUxJR04oYnMpO1xuIDM4NjpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzg3Olx0XHRjYXNlIEZJWEQ6XHRcdC8qIGZpeGVkIGxlbmd0aCBcdTAwM2UgMTYgKi9cbiAzODg6XHRcdFx0bGVuID0gZi1cdTAwM2VsYjtcbiAzODk6XHRcdFx0YnJlYWs7XG4gMzkwOlx0XHRjYXNlIFdPUkQ6XHRcdC8qIDItYnl0ZSBsZW5ndGggKi9cbiAzOTE6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM5MjpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM5MzpcdFx0XHRsZW4gPSAoKmJzLVx1MDAzZWN1ciYjNDM7JiM0MzspIFx1MDAzY1x1MDAzYyA4O1xuIDM5NDpcdFx0XHRsZW4gJiM0Mzs9ICgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgJiM0MzsgZi1cdTAwM2VsYjtcbiAzOTU6XHRcdFx0YnJlYWs7XG4gMzk2Olx0XHRjYXNlIFNFTUk6XG4gMzk3Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzOTg6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzOTk6XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gNDAwOlx0XHRcdGJyZWFrO1xuIDQwMTpcdFx0ZGVmYXVsdDpcbiA0MDI6XHRcdFx0bGVuID0gMDtcbiA0MDM6XHRcdFx0YnJlYWs7XG4gNDA0Olx0XHR9XG4gNDA1Olx0XG4gNDA2Olx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbiBcdTAwM2VcdTAwM2UgMztcbiA0MDc6XHRcdGJzLVx1MDAzZWJpdCA9IGxlbiBcdTAwMjYgNztcbiA0MDg6XHRcbiA0MDk6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiA0MTA6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNDExOlx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDQxMjpcdH1cbiA0MTM6XHRcbiA0MTQ6XHRzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDQxNTpcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNDE2Olx0e1xuIDQxNzpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NDIKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb2RpbmcgRml4ZWQgTGVuZ3RoIEZpZWxkcyBhbmQgUG90ZW50aWFsIE92ZXJzaWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRlY29kZV9iaXRzdHJgIGZ1bmN0aW9uIGFuZCBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZyB0aGF0IHNlZW1zIGEgbGl0dGxl4oCmIGluY29uc2lzdGVudC4gV2hlbiBkZWFsaW5nIHdpdGggYFdPUkRgIGFuZCBgU0VNSWAgZmllbGQgdHlwZXMsIHRoZSBjb2RlIGV4cGxpY2l0bHkgY2hlY2tzIHRoZSBib3VuZGFyaWVzIGJlZm9yZSBkZXRlcm1pbmluZyB0aGUgbGVuZ3RoIGFuZCBtb3ZpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IuIEJ1dCwgZm9yIGBGSVhEYCwgaXQgYXBwZWFycyB0byBza2lwIHRoYXQgaW5pdGlhbCBib3VuZGFyeSBjaGVjayBlbnRpcmVseS4gSXQganVzdCBnb2VzIHN0cmFpZ2h0IHRvIHJldHJpZXZpbmcgdGhlIGxlbmd0aCAoYGYtJmd0O2xiYCksIHRoZW4gaW5jcmVtZW50cyB0aGUgYml0c3RyZWFtIGN1cnNvciAoYGJzLSZndDtjdXJgKSBhbmQgYml0IG9mZnNldCAoYGJzLSZndDtiaXRgKSBiYXNlZCBvbiB0aGF0IGxlbmd0aCwgYW5kICp0aGVuKiBkb2VzIHRoZSBib3VuZGFyeSBjaGVjay4KClRoYXQgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBXb3VsZG4mIzM5O3Qgc2tpcHBpbmcgdGhlIGluaXRpYWwgYm91bmRhcnkgY2hlY2sgZm9yIGBGSVhEYCBjcmVhdGUgYSBwb3NzaWJsZSBvcHBvcnR1bml0eSBmb3IgcmVhZGluZyBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyPyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJdCBzZWVtcyB0byBhc3N1bWUgdGhlIGxlbmd0aCBzcGVjaWZpZWQgaW4gYGYtJmd0O2xiYCBpcyBhbHdheXMgdmFsaWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgYGRlY29kZV9udW1zdHJgIGhhbmRsZXMgdGhpcy4gSXMgaXQgZW1wbG95aW5nIGEgc2ltaWxhciBhcHByb2FjaCwgcG90ZW50aWFsbHkgd2l0aCB0aGUgc2FtZSB2dWxuZXJhYmlsaXR5PyBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiB0b28gdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgcGF0dGVybiBoZXJlLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0IGlmIGl0IGxlYWRzIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnV0IHNlcmlvdXMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTQ6XHRzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDQxNTpcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNDE2Olx0e1xuIDQxNzpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiA0MTg6XHRcbiA0MTk6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDQyMDpcdFxuIDQyMTpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gNDIyOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG4gNDIzOlx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDQyNDpcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIGYtXHUwMDNlc3opICYjNDM7IGYtXHUwMDNlbGI7XG4gNDI1Olx0XG4gNDI2Olx0XHRCWVRFX0FMSUdOKGJzKTtcbiA0Mjc6XHRcdElOQ19CSVRTKGJzLCAobGVuIFx1MDAzY1x1MDAzYyAyKSk7XG4gNDI4Olx0XG4gNDI5Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gNDMwOlx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDQzMTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiA0MzI6XHR9XG4gNDMzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDEyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTU0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWdWxuZXJhYmlsaXR5IERlZXAgRGl2ZTogVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gSC4zMjMgUGFyc2luZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEguMzIzIHBhcnNpbmcgY29kZSwgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZm91bmQgYSBwcmV0dHkgbmFzdHkgdnVsbmVyYWJpbGl0eS4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFRoZSBtYWluIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBib3VuZGFyeSBjaGVja3MgaW4gcmVsYXRpb24gdG8gYml0c3RyZWFtIHBhcnNpbmcgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpJbml0aWFsbHksIEkgbm90aWNlZCB0aGF0IHNldmVyYWwgZnVuY3Rpb25zLCBsaWtlIGBkZWNvZGVfbnVtc3RyYCwgYGRlY29kZV9zZXFgLCBhbmQgYGRlY29kZV9jaG9pY2VgLCBjb25zaXN0ZW50bHkgcGVyZm9ybSBib3VuZGFyeSBjaGVja3MgKmJlZm9yZSogY2FsbGluZyBgZ2V0X2JpdChicylgLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UuIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4KCkhvd2V2ZXIsIGBkZWNvZGVfZW51bWAgYXBwZWFycyB0byBiZSB0aGUgb3V0bGllci4gSXQgY2FsbHMgYGdldF9iaXQoYnMpYCAqd2l0aG91dCogYSBwcmlvciBib3VuZGFyeSBjaGVjay4gVGhpcyBsb29rcyBsaWtlIGEgcHJvYmxlbSEgTGV0JiMzOTtzIHJldmlzaXQgaXQuCmBgYGMKc3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKQp7CglQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssIGYtJmd0O25hbWUpOwoKCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKCQlJTkNfQklUUyhicywgNyk7Cgl9IGVsc2UgewoJCUlOQ19CSVRTKGJzLCBmLSZndDtzeik7Cgl9CgoJaWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKQoJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwoJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKfQpgYGAKCk5vdywgZGlnZ2luZyBmdXJ0aGVyLCBgZ2V0X2JpdChicylgIGlzIHRoZSBjdWxwcml0LgpgYGBjCnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicykKewoJdW5zaWduZWQgaW50IGIgPSAoKmJzLSZndDtjdXIpICZhbXA7ICgweDgwICZndDsmZ3Q7IGJzLSZndDtiaXQpOwoKCUlOQ19CSVQoYnMpOwoKCXJldHVybiBiID8gMSA6IDA7Cn0KYGBgCgpUaGlzIHJlYWRzIGAqYnMtJmd0O2N1cmAuIElmIGBicy0mZ3Q7Y3VyYCBoYXMgYmVlbiBhZHZhbmNlZCBwYXN0IHRoZSB2YWxpZCBkYXRhLCBzYXkgYnkgYSBwcmV2aW91cyBgZGVjb2RlX2ludGAsIHRoaXMgY2FuIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkISBUaGlzIHJlYWQgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIGBicy0mZ3Q7Y3VyYCBwb2ludGVyIGlzIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciwgYnV0IHBvaW50cyBwYXN0IHRoZSBlbmQgb2YgdGhlICphY3R1YWwqIHBhY2tldCBkYXRhIChgc2tiLSZndDtsZW5gIG9yIGBkYXRhbGVuYCkuIEFuZCBpZiB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmZmVjdHMgY29udHJvbCBmbG93LCB3ZSBoYXZlIGEgc2VyaW91cyBpc3N1ZSEKClNwZWNpZmljYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZ2V0X2JpdChicylgIGlzIHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggd2l0aGluIGBkZWNvZGVfZW51bWAuCmBgYGMKCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKCQlJTkNfQklUUyhicywgNyk7Cgl9IGVsc2UgewoJCUlOQ19CSVRTKGJzLCBmLSZndDtzeik7Cgl9CmBgYApUaGlzIGlzIGEgY3JpdGljYWwgY29uZGl0aW9uYWwgYnJhbmNoISBUaGUgZXhlY3V0aW9uIHBhdGggZGVwZW5kcyBvbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB2YWx1ZS4gS0FTQU4gKm1pZ2h0KiBtaXNzIHRoaXMsIGJ1dCBLTVNBTiAqc2hvdWxkKiBkZWZpbml0ZWx5IGNhdGNoIGl0LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBtZW1vcnkgcGFzdCBgc2tiLSZndDtsZW5gIG9yIGBkYXRhbGVuYCBpbiBgaDMyM19idWZmZXJgIGlzIHVuaW5pdGlhbGl6ZWQuCgpBbmQgc2luY2UgYGttYWxsb2NgIGRvZXMgbm90IHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnksIGBoMzIzX2J1ZmZlcmAgaXMgdW5pbml0aWFsaXplZCBwYXN0IGBkYXRhbGVuYC4gSWYgYGJzLSZndDtjdXJgIHJlYWRzIHBhc3QgYGRhdGFsZW5gLCBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd2lsbCByZXBvcnQgYSB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSEKCkxldCBtZSB2ZXJpZnkgdGhpcy4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIGBkZWNvZGVfaW50YCwgYW5kIHdoaWxlIGl0IGNoZWNrcyB0aGUgYm91bmRhcnkgYmVmb3JlICpyZWFkaW5nKiBkYXRhIHdpdGggYGdldF91aW50YCwgaXQgc3RpbGwgYWR2YW5jZXMgYGJzLSZndDtjdXJgIGJ5IGBsZW5gIGJ5dGVzLiBJZiB0aGlzIGlzIGZvbGxvd2VkIGJ5IGEgYGRlY29kZV9lbnVtYCwgaXQmIzM5O2xsIHJlYWQgZnJvbSBiZXlvbmQgdGhlIGJvdW5kYXJ5LCBhbHNvIHJlc3VsdGluZyBpbiB0aGUgc2FtZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyB0aGF0IGBkZWNvZGVfZW51bWAgaXMgdGhlIHByaW1hcnkgY3VscHJpdCwgYnV0IHRoZSB3YXkgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRlY29kZV9pbnRgIGludGVyYWN0IHdpdGggc3Vic2VxdWVudCBwYXJzaW5nIHN0ZXBzIGNhbiBleGFjZXJiYXRlIHRoZSBpc3N1ZS4gS01TQU4gaXMgdGhlIGtleSBoZXJlLiBJdCBzaG91bGQgdHJpZ2dlciBhbmQgZ2l2ZSB1cyBhIHJlbGlhYmxlIHJlcG9ydCBvbiBhbnkgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTE6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxuIDIxMjpcdHtcbiAyMTM6XHRcdHVuc2lnbmVkIGludCB2LCBsLCBzaGlmdCwgYnl0ZXM7XG4gMjE0Olx0XG4gMjE1Olx0XHRpZiAoIWIpXG4gMjE2Olx0XHRcdHJldHVybiAwO1xuIDIxNzpcdFxuIDIxODpcdFx0bCA9IGJzLVx1MDAzZWJpdCAmIzQzOyBiO1xuIDIxOTpcdFxuIDIyMDpcdFx0aWYgKGwgXHUwMDNjIDgpIHtcbiAyMjE6XHRcdFx0diA9ICh1bnNpZ25lZCBpbnQpKCpicy1cdTAwM2VjdXIpIFx1MDAzY1x1MDAzYyAoYnMtXHUwMDNlYml0ICYjNDM7IDI0KTtcbiAyMjI6XHRcdFx0YnMtXHUwMDNlYml0ID0gbDtcbiAyMjM6XHRcdH0gZWxzZSBpZiAobCA9PSA4KSB7XG4gMjI0Olx0XHRcdHYgPSAodW5zaWduZWQgaW50KSgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgXHUwMDNjXHUwMDNjIChicy1cdTAwM2ViaXQgJiM0MzsgMjQpO1xuIDIyNTpcdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xuIDIyNjpcdFx0fSBlbHNlIHtcbiAyMjc6XHRcdFx0Zm9yIChieXRlcyA9IGwgXHUwMDNlXHUwMDNlIDMsIHNoaWZ0ID0gMjQsIHYgPSAwOyBieXRlcztcbiAyMjg6XHRcdFx0ICAgICBieXRlcy0tLCBzaGlmdCAtPSA4KVxuIDIyOTpcdFx0XHRcdHYgfD0gKHVuc2lnbmVkIGludCkoKmJzLVx1MDAzZWN1ciYjNDM7JiM0MzspIFx1MDAzY1x1MDAzYyBzaGlmdDtcbiAyMzA6XHRcbiAyMzE6XHRcdFx0aWYgKGwgXHUwMDNjIDMyKSB7XG4gMjMyOlx0XHRcdFx0diB8PSAodW5zaWduZWQgaW50KSgqYnMtXHUwMDNlY3VyKSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4gMjMzOlx0XHRcdFx0diBcdTAwM2NcdTAwM2M9IGJzLVx1MDAzZWJpdDtcbiAyMzQ6XHRcdFx0fSBlbHNlIGlmIChsIFx1MDAzZSAzMikge1xuIDIzNTpcdFx0XHRcdHYgXHUwMDNjXHUwMDNjPSBicy1cdTAwM2ViaXQ7XG4gMjM2Olx0XHRcdFx0diB8PSAoKmJzLVx1MDAzZWN1cikgXHUwMDNlXHUwMDNlICg4IC0gYnMtXHUwMDNlYml0KTtcbiAyMzc6XHRcdFx0fVxuIDIzODpcdFxuIDIzOTpcdFx0XHRicy1cdTAwM2ViaXQgPSBsIFx1MDAyNiAweDc7XG4gMjQwOlx0XHR9XG4gMjQxOlx0XG4gMjQyOlx0XHR2IFx1MDAyNj0gMHhmZmZmZmZmZiBcdTAwM2NcdTAwM2MgKDMyIC0gYik7XG4gMjQzOlx0XG4gMjQ0Olx0XHRyZXR1cm4gdjtcbiAyNDU6XHR9XG4gMjQ2Olx0XG4gMjQ3Olx0LypcbiAyNDg6XHQgKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBhbmQgc2l6ZW9mKHVuc2lnbmVkIGludCkgPT0gNFxuIDI0OTpcdCAqL1xuIDI1MDpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQml0bWFwIGFuZCBCaXQgUmV0cmlldmFsIGluIEguMzIzIERlY29kaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgY29kZSBzbmlwcGV0LiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBiaXRtYXBzIGFuZCBiaXRmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBILjMyMyBkZWNvZGluZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJIG5lZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBvY2N1ciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBgZ2V0X2JpdG1hcGAgZnVuY3Rpb24gY2FsbC4mIzM0OwoKRmlyc3QsIGBnZXRfYml0bWFwYCBpcyByZWFkaW5nIGRhdGEgcG9pbnRlZCB0byBieSBgKmJzLSZndDtjdXJgLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBhcmlzZXMgaXMgd2hldGhlciBgZ2V0X2JpdG1hcGAgaXRzZWxmIGluY29ycG9yYXRlcyBwcm9wZXIgYm91bmRhcnkgY2hlY2tpbmcuIElzIGl0IHJvYnVzdCBhZ2FpbnN0IGFjY2Vzc2luZyBkYXRhIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBib3VuZGFyaWVzPwoKTG9va2luZyBhdCB0aGUgYGRlY29kZV9zZXFgIGZ1bmN0aW9uLCB0aGVyZSYjMzk7cyBhIHNhZmV0eSBjaGVjayBiZWluZyBwZXJmb3JtZWQgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGdldF9iaXRtYXBgLiBUaGUgY29kZSBjYWxscyBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi0mZ3Q7c3opYCwgd2hpY2ggc2VlbXMgdG8gcHJlLXZhbGlkYXRlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHJlbGF0aXZlIHRvIHRoZSBidWZmZXIuIElmIGl0IGZhaWxzLCBgSDMyM19FUlJPUl9CT1VORGAgaXMgcmV0dXJuZWQuIEEgc2Vjb25kIGNoZWNrIGlzIGFsc28gcGVyZm9ybWVkIHRvIGVuc3VyZSBgZi0mZ3Q7c3pgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gVGhpcyBwcmV2ZW50cyBhbiBpbnRlZ2VyIG92ZXJmbG93IGZyb20gcG90ZW50aWFsbHkgY29ycnVwdGluZyBhIGJpdG1hcC4KClNvLCBpbiB0aGUgY29udGV4dCBvZiBgZGVjb2RlX3NlcWAsIHRoaXMgbG9va3MgcmVhc29uYWJseSBzYWZlOiBgZ2V0X2JpdG1hcGAgaXMgYmVpbmcgY2FsbGVkICphZnRlciogYSBib3VuZGFyeSBjaGVjayBhbmQgc2l6ZSB2YWxpZGF0aW9uLgoKSG93ZXZlciwgdGhlIHJlYWwgcHV6emxlIGlzOiB3aGF0IGFib3V0IG90aGVyIHBvdGVudGlhbCBjYWxscyB0byBgZ2V0X2JpdG1hcGAgdGhyb3VnaG91dCB0aGUgY29kZWJhc2U/IEFyZSAqdGhleSogYWxsIHNpbWlsYXJseSBwcm90ZWN0ZWQ/IEkgbmVlZCB0byBrbm93IHdoZXJlIGVsc2UgaXQmIzM5O3MgdXNlZC4KClRoaXMgbGVhZHMgbWUgdG8gdGhpbmsgYWJvdXQgYGdldF9iaXRzYC4gSXMgYGdldF9iaXRzYCB1c2VkIHdpdGhvdXQgc2ltaWxhciBib3VuZGFyeSBjaGVja3M/IFRoYXQmIzM5O3MgdGhlIG5leHQga2V5IGFyZWEgdG8gaW52ZXN0aWdhdGUsIGFzIHBvdGVudGlhbGx5IHVuY2hlY2tlZCBiaXQgcmV0cmlldmFsIGNhbiBiZSBqdXN0IGFzIHByb2JsZW1hdGljIGFzIHVuY2hlY2tlZCBiaXRtYXAgcmV0cmlldmFsLiBUaGlzIHdvdWxkIGJlIGEgY3J1Y2lhbCBhcmVhIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfYml0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwMj1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTAzOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNC1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xNzY9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0KHN0cnVjdCBiaXRzdHIgKmJzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4NS0vKiBBc3N1bWUgYiBcdTAwM2M9IDggKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE4NjpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4Ny17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzEyPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMwLVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzMxOlx0XHRsZW4gPSBnZXRfYml0cyhicywgMikgJiM0MzsgMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzMi1cdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDE0PXN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDIzLVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQyNDpcdGxlbiA9IGdldF9iaXRzKGJzLCBmLVx1MDAzZXN6KSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDI1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTQzND1zdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2Ny1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ2ODpcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIGYtXHUwMDNlc3opICYjNDM7IGYtXHUwMDNlbGI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00NjktXHRcdEJZVEVfQUxJR04oYnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTQ4Mj1zdGF0aWMgaW50IGRlY29kZV9ibXBzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5OC1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ5OTpcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIGYtXHUwMDNlc3opICYjNDM7IGYtXHUwMDNlbGI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MDAtXHRcdEJZVEVfQUxJR04oYnMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMT1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU4Ni1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1ODc6XHRibXAyX2xlbiA9IGdldF9iaXRzKGJzLCA3KSAmIzQzOyAxO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGJtcDJfbGVuKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDQ9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4MS1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY4MjpcdFx0Y291bnQgPSBnZXRfYml0cyhicywgZi1cdTAwM2Vzeik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02ODMtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTc1OS1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc2MDpcdFx0dHlwZSA9IGdldF9iaXRzKGJzLCA3KSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzYxLVx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjQtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3NjU6XHRcdHR5cGUgPSBnZXRfYml0cyhicywgZi1cdTAwM2Vzeik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjYtXHRcdGlmICh0eXBlIFx1MDAzZT0gZi1cdTAwM2VsYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1OTUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEguMzIzIFBhcnNpbmcgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBILjMyMyBwYXJzZXIgaGFuZGxlcyBiaXRzdHJlYW0gYm91bmRhcmllcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBsaWVzIGluIHRoZSBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN0YXRlIG9mIHRoZSBiaXRzdHJlYW0gYGJzLSZndDtjdXJgLgoKVGhlIHBhcnNlciBjaGVja3MgYm91bmRhcmllcyBiZWZvcmUgY2FsbGluZyBgZ2V0X2JpdHNgIGluIG1vc3QgY2FzZXMgYWNyb3NzIGBkZWNvZGVfaW50YCwgYGRlY29kZV9udW1zdHJgLCBgZGVjb2RlX29jdHN0cmAsIGBkZWNvZGVfYm1wc3RyYCwgYGRlY29kZV9zZXFgLCBgZGVjb2RlX3NlcW9mYCwgYW5kIGBkZWNvZGVfY2hvaWNlYC4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCAqZG9lc24mIzM5O3QqIGRvIHRoaXMgYmVmb3JlIHRoZSBpbml0aWFsIGBnZXRfYml0KGJzKWAgY2FsbCAqd2l0aGluKiBgZGVjb2RlX2VudW1gIGlmIGFuIGBFWFRgIGF0dHJpYnV0ZSBpcyBzZXQuICBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgY2hlY2tlZCBiZWZvcmUgdGhlIG5lc3RlZCBgZ2V0X2JpdGAgY2FsbHMgaW5zaWRlIGBkZWNvZGVfY2hvaWNlYCBhbmQgYGRlY29kZV9zZXFgLgoKVGhpcyBtZWFucyB0aGF0IGlmIGEgcHJlY2VkaW5nIGNhbGwsIGxpa2UgYSBgZGVjb2RlX2ludGAgd2l0aCBhICYjMzQ7Q09OUyYjMzQ7IHNpemUgc3BlY2lmaWVyLCBhZHZhbmNlcyBgYnMtJmd0O2N1cmAgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIgKGBicy0mZ3Q7ZW5kYCksIGFuZCB0aGUgKm5leHQqIGZpZWxkIGlzIGEgYGRlY29kZV9lbnVtYCB3aXRoIGFuIGBFWFRgIGF0dHJpYnV0ZSwgYGRlY29kZV9lbnVtYCB3aWxsIGRpcmVjdGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgY291bGQgYmUgaW4gdGhlIHRhaWxyb29tIG9mIGFuIFNLQiBvciBiZXlvbmQgYGRhdGFsZW5gIGluIGBoMzIzX2J1ZmZlcmAuCgpDcnVjaWFsbHksIGBnZXRfYml0YCByZXR1cm5zIGEgMCBvciAxLCBhbmQgdGhlIGNvZGUgYnJhbmNoZXMgYmFzZWQgb24gdGhpcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29kZSBmbG93IGlzIGFmZmVjdGVkLiBLTVNBTiBpcyB0aGUgdG9vbCB0aGF0JiMzOTtzIHJlYWxseSBnb2luZyB0byBjYXRjaCB0aGlzIGFzIGl0IGlzIGRlc2lnbmVkIHRvIGNhdGNoIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZhbHVlcyBhbmQgc3Vic2VxdWVudCB1c2FnZS4gS0FTQU4gd29uJiMzOTt0IGNhdGNoIGl0IGJlY2F1c2UgdGhlIHJlYWQgaXMgKndpdGhpbiogdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtNU0FOIGhhcyB0aGUgZWRnZSBoZXJlLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24uIGBoMzIzX2J1ZmZlcmAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCB3aXRob3V0IGBfX0dGUF9aRVJPYCwgbWVhbmluZyBpdCYjMzk7cyBub3QgemVyb2VkIG9uIGFsbG9jYXRpb24uIFRodXMsIGFueSBieXRlcyBiZXlvbmQgdGhlIGNvcGllZCBgZGF0YWxlbmAgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBgc2tiX2hlYWRlcl9wb2ludGVyYCBjb3BpZXMgdGhlIG5ldHdvcmsgZGF0YSwgc28gZGF0YSBpbiB0aGUgdGFpbHJvb20gb2YgYSBsaW5lYXIgU0tCIHdpbGwgYWxzbyBiZSB1bmluaXRpYWxpemVkLgoKVGhlIHNjZW5hcmlvIGlzIHRoaXM6IGEgY3JhZnRlZCBILjMyMyBtZXNzYWdlIGNhdXNlcyBhIGBkZWNvZGVfaW50YCB0byBvdmVycnVuIHRoZSBpbnB1dC4gU3Vic2VxdWVudGx5LCBgZGVjb2RlX2VudW1gIGlzIGVuY291bnRlcmVkLCBhbmQgYmVjYXVzZSB0aGUgYm91bmRhcnkgY2hlY2sgaXMgc2tpcHBlZCB3aXRoIHRoZSBFWFQgYXR0cmlidXRlLCBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyByZWFkIHRoZW4gaW5mbHVlbmNlcyBwcm9ncmFtIGZsb3cuCgpJZiB0aGUgb3ZlcnJ1biBnb2VzIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIsIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIFRoYXQgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YWxlbiwgYXMgaWYgaXQgYXBwcm9hY2hlcyBgSDMyM19NQVhfU0laRSAmIzQzOyAxYCwgdGhlIG92ZXJydW4gZnJvbSBgZGVjb2RlX2ludGAgd2lsbCBsaWtlbHkgZXhjZWVkIHRoZSBhbGxvY2F0aW9uIHNpemUuIEhvd2V2ZXIsIEtNU0FOIGlzIG1vcmUgcm9idXN0IGhlcmUgYmVjYXVzZSBpdCBjYW4gY2F0Y2ggdGhpcyBidWcgZXZlbiBpZiBgYnMtJmd0O2N1cmAgbGFuZHMgKndpdGhpbiogdGhlIGFsbG9jYXRlZCBidWZmZXIgYnV0IHBhc3QgdGhlIGluaXRpYWxpemVkIGRhdGEuCgpJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgYElOQ19CSVRTYCBhbmQgb3RoZXIgYml0ZmllbGQgcmVhZHMgYW5kIGl0IGRvZXMgbm90IGRpcmVjdGx5IHJlYWQgYCpicy0mZ3Q7Y3VyYC4gVGhlcmVmb3JlLCBvbmx5IGBnZXRfYml0KGJzKWAgaXMgdnVsbmVyYWJsZS4gSXQgaXMgdW5saWtlbHkgdGhhdCBhbm90aGVyIGZpZWxkIHdpbGwgYmUgYWZmZWN0ZWQsIGJ1dCBhIG1hbGljaW91c2x5IGNyYWZ0ZWQgbWVzc2FnZSB3b3VsZCBiZSBhYmxlIHRvIGNhdXNlIGEgYGRlY29kZV9pbnRgIGZvbGxvd2VkIGJ5IGFuIGBkZWNvZGVfZW51bWAsIGVuYWJsaW5nIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYnJhbmNoLgoKVGhlIGNvcmUgY29uY2x1c2lvbiBoZXJlIGlzOiBLTVNBTiBpcyBnb2luZyB0byByZWxpYWJseSBmaW5kIHRoaXMgYnVnIGJlY2F1c2UgaXQgdGFyZ2V0cyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg2Olx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4gMTg3Olx0e1xuIDE4ODpcdFx0dW5zaWduZWQgaW50IHYsIGw7XG4gMTg5Olx0XG4gMTkwOlx0XHR2ID0gKCpicy1cdTAwM2VjdXIpIFx1MDAyNiAoMHhmZlUgXHUwMDNlXHUwMDNlIGJzLVx1MDAzZWJpdCk7XG4gMTkxOlx0XHRsID0gYiAmIzQzOyBicy1cdTAwM2ViaXQ7XG4gMTkyOlx0XG4gMTkzOlx0XHRpZiAobCBcdTAwM2MgOCkge1xuIDE5NDpcdFx0XHR2IFx1MDAzZVx1MDAzZT0gOCAtIGw7XG4gMTk1Olx0XHRcdGJzLVx1MDAzZWJpdCA9IGw7XG4gMTk2Olx0XHR9IGVsc2UgaWYgKGwgPT0gOCkge1xuIDE5NzpcdFx0XHRicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDE5ODpcdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xuIDE5OTpcdFx0fSBlbHNlIHtcdFx0LyogbCBcdTAwM2UgOCAqL1xuIDIwMDpcdFxuIDIwMTpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyMDI6XHRcdFx0diAmIzQzOz0gKigmIzQzOyYjNDM7YnMtXHUwMDNlY3VyKTtcbiAyMDM6XHRcdFx0diBcdTAwM2VcdTAwM2U9IDE2IC0gbDtcbiAyMDQ6XHRcdFx0YnMtXHUwMDNlYml0ID0gbCAtIDg7XG4gMjA1Olx0XHR9XG4gMjA2Olx0XG4gMjA3Olx0XHRyZXR1cm4gdjtcbiAyMDg6XHR9XG4gMjA5Olx0XG4gMjEwOlx0LyogQXNzdW1lIGIgXHUwMDNjPSAzMiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQzNAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGdldF9iaXRzYCBmdW5jdGlvbiBhbmQgc2VlaW5nIHRoYXQgaXQgcmVhZHMgYCpicy0mZ3Q7Y3VyYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGxpZXMg4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSByZW1lbWJlciB0aGF0IGBnZXRfYml0c2AgaXMgdXNlZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMsIHNvIEkgbmVlZGVkIHRvIHZlcmlmeSB0aGUgc2FmZXR5IGluIGVhY2ggcGxhY2UgaXQgaXMgY2FsbGVkLgoKTXkgcHJldmlvdXMgYW5hbHlzaXMgc2hvd3MgdGhhdCBhbGwgb2YgdGhvc2UgbG9jYXRpb25zIGNhbGwgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgICpiZWZvcmUqIGNhbGxpbmcgYGdldF9iaXRzYC4gVGhpcyBpcyBnb29kLiBUaGUgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGZ1bmN0aW9uIGNoZWNrcyBpZiBgYnMtJmd0O2N1ciAmIzQzOyBieXRlcyAmZ3Q7IGJzLSZndDtlbmRgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS4gSWYgYGJzLSZndDtjdXJgIGlzIGFscmVhZHkgZ3JlYXRlciB0aGFuIGBicy0mZ3Q7ZW5kYCwgdGhlbiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgd2lsbCByZXR1cm4gMSwgYW5kIGNydWNpYWxseSwgYGdldF9iaXRzYCAqd29uJiMzOTt0KiBiZSBjYWxsZWQuIFNvLCBpbiB0aGVzZSBjYXNlcywgYGdldF9iaXRzYCB3aWxsIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ISBHb29kLgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgYGRlY29kZV9jaG9pY2VgPyBBZnRlciBhIGNsb3NlciBsb29rLCBgZGVjb2RlX2Nob2ljZWAgYWxzbyBjaGVja3MgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGJlZm9yZSBjYWxsaW5nIGBnZXRfYml0KGJzKWAuIFRoYXQgaXMgZ3JlYXQhIElmIGBicy0mZ3Q7Y3VyICZndDsgYnMtJmd0O2VuZGAsIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCByZXR1cm5zIDEsIGFuZCBzbyBpdCByZXR1cm5zIGBIMzIzX0VSUk9SX0JPVU5EYC4gVGhlcmVmb3JlLCBgZ2V0X2JpdChicylgIGlzIG5vdCBjYWxsZWQuIEdvb2QuCgpOb3cgSSYjMzk7bSBkaWdnaW5nIGludG8gYGRlY29kZV9lbnVtYC4gSGVyZSB3ZSBoYXZlIGEgcHJvYmxlbS4gYGRlY29kZV9lbnVtYCBET0VTIE5PVCBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgKmJlZm9yZSogY2FsbGluZyBgZ2V0X2JpdChicylgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGJzLSZndDtjdXIgJmd0OyBicy0mZ3Q7ZW5kYCwgaXQgV0lMTCBjYWxsIGBnZXRfYml0KGJzKWAuIEFuZCBndWVzcyB3aGF0PyBgZ2V0X2JpdChicylgICphbHNvKiByZWFkcyBgKmJzLSZndDtjdXJgLiBTbywgYGRlY29kZV9lbnVtYCBXSUxMIHBvdGVudGlhbGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkhIFRoaXMgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLgoKTm93IGxldCBtZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucy4uLkxldCYjMzk7cyBsb29rIGF0IGBnZXRfbGVuYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ0Olx0ICogRnVuY3Rpb25zXG4gMTQ1Olx0ICovXG4gMTQ2Olx0XG4gMTQ3Olx0LyogQXNzdW1lIGJzIGlzIGFsaWduZWQgXHUwMDI2XHUwMDI2IHYgXHUwMDNjIDE2Mzg0ICovXG4gMTQ4Olx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGVuKHN0cnVjdCBiaXRzdHIgKmJzKVxuIDE0OTpcdHtcbiAxNTA6XHRcdHVuc2lnbmVkIGludCB2O1xuIDE1MTpcdFxuIDE1MjpcdFx0diA9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKHYgXHUwMDI2IDB4ODApIHtcbiAxNTU6XHRcdFx0diBcdTAwMjY9IDB4M2Y7XG4gMTU2Olx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDE1NzpcdFx0XHR2ICYjNDM7PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAxNTg6XHRcdH1cbiAxNTk6XHRcbiAxNjA6XHRcdHJldHVybiB2O1xuIDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHRzdGF0aWMgaW50IG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoc3RydWN0IGJpdHN0ciAqYnMsIHNpemVfdCBieXRlcywgc2l6ZV90IGJpdHMpXG4gMTY0Olx0e1xuIDE2NTpcdFx0Yml0cyAmIzQzOz0gYnMtXHUwMDNlYml0O1xuIDE2NjpcdFx0Ynl0ZXMgJiM0Mzs9IGJpdHMgLyBCSVRTX1BFUl9CWVRFO1xuIDE2NzpcdFx0aWYgKGJpdHMgJSBCSVRTX1BFUl9CWVRFIFx1MDAzZSAwKVxuIDE2ODpcdFx0XHRieXRlcyYjNDM7JiM0Mzs7XG4gMTY5Olx0XG4gMTcwOlx0XHRpZiAoYnMtXHUwMDNlY3VyICYjNDM7IGJ5dGVzIFx1MDAzZSBicy1cdTAwM2VlbmQpXG4gMTcxOlx0XHRcdHJldHVybiAxO1xuIDE3MjpcdFxuIDE3MzpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTMxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTY4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIEguMjI1IFBhcnNlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcGlucG9pbnRpbmcgd2hlcmUgdGhlIGNvZGUgKmNvdWxkKiBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoaXMgSC4yMjUgcGFyc2luZyBjb250ZXh0LgoKSW5pdGlhbGx5LCBJJiMzOTttIHRyYWNpbmcgYGdldF9sZW5gLCBhbmQgdGhlIGNhbGxzIHRvIGl0IHdpdGhpbiB0aGUgdmFyaW91cyBgZGVjb2RlXypgIGZ1bmN0aW9ucyAoYGRlY29kZV9pbnRgLCBgZGVjb2RlX2JpdHN0cmAsIGBkZWNvZGVfb2N0c3RyYCwgZXRjLikuIEl0JiMzOTtzIHByZXR0eSBjb25zaXN0ZW50OiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgY2FsbGVkICpiZWZvcmUqIGBnZXRfbGVuYCBpbiBhbGwgb2YgdGhvc2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgZ2V0X2xlbmAgaXRzZWxmIGlzbiYjMzk7dCBhIGxpa2VseSBzb3VyY2Ugb2Ygb3V0LW9mLWJvdW5kcyByZWFkcyBpbiAqdGhvc2UqIGNvbnRleHRzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqb25lKiBub3RhYmxlIGV4Y2VwdGlvbjogdGhlIGBkZWNvZGVfb2lkYCBjYXNlIHJlYWRzIGAqYnMtJmd0O2N1ciYjNDM7JiM0MztgIHdpdGhvdXQgYW55IHByaW9yIGJvdW5kYXJ5IGNoZWNrLiBPa2F5LCB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZiwgaG93ZXZlciBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgKmlzKiB1c2VkIGJlZm9yZSB0aGUgcmVhZC4KClRoZW4gdGhlcmUmIzM5O3MgYGRlY29kZV9iaXRzdHJgLiBUaGUgYFdPUkRgIGNhc2UgKmRvZXMqIGhhdmUgYSBib3VuZGFyeSBjaGVjaywgYnV0IGl0JiMzOTtzIHVzZWQgYmVmb3JlIHJlYWRpbmcgYGxlbiA9ICgqYnMtJmd0O2N1ciYjNDM7JiM0MzspICZsdDsmbHQ7IDhgLiBUaGlzIG1lYW5zIGl0ICphcHBlYXJzKiB0byBoYXZlIHRoZSBzYW1lIHByb3RlY3Rpb25zLgoKU28sIEkmIzM5O20gaG9uaW5nIGluIG9uIGBkZWNvZGVfZW51bWAuIFRoaXMgaXMgd2hlcmUgYGdldF9iaXQoYnMpYCBpcyB1c2VkLCBhbmQgKnRoaXMqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGJpdC1sZXZlbCByZWFkIGZyb20gYCpicy0mZ3Q7Y3VyYC4gTm93LCBpZiBgZGVjb2RlX2VudW1gIGlzIGNhbGxlZCB3aGVuIGBicy0mZ3Q7Y3VyICZndDsgYnMtJmd0O2VuZGAsICp0aGF0JiMzOTtzKiBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kLCBjcml0aWNhbGx5LCBpdCBjb3VsZCBiZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoYXQgS01TQU4gc2hvdWxkIGNhdGNoLgoKVGhlIGtleSBpcyB0aGF0IGlmIGBkZWNvZGVfZW51bWAgcmVhZHMgcGFzdCB0aGUgdmFsaWQgcGFja2V0IGRhdGEsIGl0JiMzOTtzIHJlYWRpbmcgZ2FyYmFnZSwgd2hpY2ggS01TQU4gY2FuIGRldGVjdC4gS0FTQU4gaXMgdW5saWtlbHkgdG8gY2F0Y2ggdGhpcyB1bmxlc3MgYGJzLSZndDtjdXJgIGdvZXMgcGFzdCB0aGUgKmFsbG9jYXRlZCogYnVmZmVyLCB3aGljaCBpcyBsZXNzIGxpa2VseSBpZiB0aGUgcGFja2V0IGlzIHNtYWxsLiBUaGlzIGltcGxpZXMgYSBzaWduaWZpY2FudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgY2F1Z2h0IGJ5IEtNU0FOLCB3aGljaCBpcyBpbXBvcnRhbnQuCgpJIHRoZW4gZ28gb24gdG8gZXZhbHVhdGUgdGhlIGVmZmVjdCBvZiB0aGUgYnVnIG9uIGBkZWNvZGVfaW50YCwgbW9yZSBzcGVjaWZpY2FsbHkgd2hlbiBgYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSlgIGlzIGZhbHNlLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIHBhdGNoLgoKSW5pdGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgYGRlY29kZV9pbnRgICpjb3VsZCogc2tpcCBkYXRhIHdoZW4gYGJhc2UgJmFtcDsmYW1wOyAoZi0mZ3Q7YXR0ciAmYW1wOyBERUNPREUpYCBpcyBmYWxzZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0JiMzOTtzIGFwcGFyZW50IHRoYXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIHRoZSBjYXNlIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyAqdHJ1ZSosIGNvcnJlY3RpbmcgYSBkb3VibGUtaW5jcmVtZW50IG9mIGBicy0mZ3Q7Y3VyYC4gVGh1cywgYGRlY29kZV9pbnRgIGFkdmFuY2VzIGBicy0mZ3Q7Y3VyYCBieSBgbGVuYCBPTkNFIHdoZW4gYGJhc2UgJmFtcDsmYW1wOyAoZi0mZ3Q7YXR0ciAmYW1wOyBERUNPREUpYCBpcyBmYWxzZS4gTm93LCB3aGVuIHRoZSBjb25kaXRpb24gKmlzKiB0cnVlLCBpdCBhZHZhbmNlcyBgYnMtJmd0O2N1cmAgVFdJQ0UuIFRoZSBwYXRjaCBjb3JyZWN0bHkgZW5zdXJlcyBgYnMtJmd0O2N1cmAgaXMgYWR2YW5jZWQgYnkgYGxlbmAgKm9uY2UqIGluIGFsbCBjYXNlcy4gVGhpcyBjb3JyZWN0cyBkYXRhIHBhcnNpbmcgaXNzdWVzIChidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5ISkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQ09ERSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1RyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjg6XHR7Rk5BTUUoXCYjMzQ7aXBcJiMzNDspIE9DVFNUUiwgRklYRCwgNCwgMCwgREVDT0RFLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTktXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MsIGlwKSwgTlVMTH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjM4Olx0e0ZOQU1FKFwmIzM0O2lwXCYjMzQ7KSBPQ1RTVFIsIEZJWEQsIDE2LCAwLCBERUNPREUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMzktXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzLCBpcCksIE5VTEx9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz02MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1RyYW5zcG9ydEFkZHJlc3NbXSA9IHtcdC8qIENIT0lDRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjYyOlx0e0ZOQU1FKFwmIzM0O2lwQWRkcmVzc1wmIzM0OykgU0VRLCAwLCAyLCAyLCBERUNPREUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNjMtXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzcywgaXBBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNjctXHQgX1RyYW5zcG9ydEFkZHJlc3NfaXB4QWRkcmVzc30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6Njg6XHR7Rk5BTUUoXCYjMzQ7aXA2QWRkcmVzc1wmIzM0OykgU0VRLCAwLCAyLCAyLCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNjktXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzcywgaXA2QWRkcmVzcyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTQ4ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25bXSA9IHtcdC8qIENIT0lDRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy00ODYtXHQgX0gyNDVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjQ4NzpcdHtGTkFNRShcJiMzNDt0MTIwXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDE0LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNDg4LVx0IG9mZnNldG9mKERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb24sIHQxMjApLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz01MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9EYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjUxMjpcdHtGTkFNRShcJiMzNDthcHBsaWNhdGlvblwmIzM0OykgQ0hPSUNFLCA0LCAxMCwgMTQsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy01MTMtXHQgb2Zmc2V0b2YoRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eSwgYXBwbGljYXRpb24pLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz01MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9EYXRhVHlwZVtdID0ge1x0LyogQ0hPSUNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTUzMC1cdCBfQXVkaW9DYXBhYmlsaXR5fSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo1MzE6XHR7Rk5BTUUoXCYjMzQ7ZGF0YVwmIzM0OykgU0VRLCAwLCAyLCAyLCBERUNPREUgfCBFWFQsIG9mZnNldG9mKERhdGFUeXBlLCBkYXRhKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy01MzItXHQgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHl9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz02Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9VbmljYXN0QWRkcmVzc19pUEFkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NjI5Olx0e0ZOQU1FKFwmIzM0O25ldHdvcmtcJiMzNDspIE9DVFNUUiwgRklYRCwgNCwgMCwgREVDT0RFLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTYzMC1cdCBvZmZzZXRvZihVbmljYXN0QWRkcmVzc19pUEFkZHJlc3MsIG5ldHdvcmspLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzc1tdID0ge1x0LyogU0VRVUVOQ0UgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo2NDE6XHR7Rk5BTUUoXCYjMzQ7bmV0d29ya1wmIzM0OykgT0NUU1RSLCBGSVhELCAxNiwgMCwgREVDT0RFLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTY0Mi1cdCBvZmZzZXRvZihVbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzLCBuZXR3b3JrKSwgTlVMTH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTY2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1VuaWNhc3RBZGRyZXNzW10gPSB7XHQvKiBDSE9JQ0UgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo2NjU6XHR7Rk5BTUUoXCYjMzQ7aVBBZGRyZXNzXCYjMzQ7KSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02NjYtXHQgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQQWRkcmVzcyksIF9VbmljYXN0QWRkcmVzc19pUEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02NjgtXHQgX1VuaWNhc3RBZGRyZXNzX2lQWEFkZHJlc3N9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjY2OTpcdHtGTkFNRShcJiMzNDtpUDZBZGRyZXNzXCYjMzQ7KSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02NzAtXHQgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQNkFkZHJlc3MpLCBfVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzc30sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTY5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gyNDVfVHJhbnNwb3J0QWRkcmVzc1tdID0ge1x0LyogQ0hPSUNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6Njk4Olx0e0ZOQU1FKFwmIzM0O3VuaWNhc3RBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDUsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02OTktXHQgb2Zmc2V0b2YoSDI0NV9UcmFuc3BvcnRBZGRyZXNzLCB1bmljYXN0QWRkcmVzcyksIF9VbmljYXN0QWRkcmVzc30sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTcwND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03MDgtXHR7Rk5BTUUoXCYjMzQ7YXNzb2NpYXRlZFNlc3Npb25JRFwmIzM0OykgSU5ULCA4LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3MDk6XHR7Rk5BTUUoXCYjMzQ7bWVkaWFDaGFubmVsXCYjMzQ7KSBDSE9JQ0UsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03MTAtXHQgb2Zmc2V0b2YoSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsIG1lZGlhQ2hhbm5lbCksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTcxMy1cdCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3MTQ6XHR7Rk5BTUUoXCYjMzQ7bWVkaWFDb250cm9sQ2hhbm5lbFwmIzM0OykgQ0hPSUNFLCAxLCAyLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNzE1LVx0IG9mZnNldG9mKEgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLCBtZWRpYUNvbnRyb2xDaGFubmVsKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NzMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc1tdID0ge1x0LyogQ0hPSUNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTczNi1cdCBfVjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3Mzc6XHR7Rk5BTUUoXCYjMzQ7aDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNcJiMzNDspIFNFUSwgMTAsIDExLCAxNCwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTczOC1cdCBvZmZzZXRvZlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz03NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1tdID0ge1x0LyogU0VRVUVOQ0UgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NDUtXHR7Rk5BTUUoXCYjMzQ7cG9ydE51bWJlclwmIzM0OykgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3NDY6XHR7Rk5BTUUoXCYjMzQ7ZGF0YVR5cGVcJiMzNDspIENIT0lDRSwgMywgNiwgOSwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc0Ny1cdCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NDgtXHRcdCAgZGF0YVR5cGUpLCBfRGF0YVR5cGV9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjc0OTpcdHtGTkFNRShcJiMzNDttdWx0aXBsZXhQYXJhbWV0ZXJzXCYjMzQ7KSBDSE9JQ0UsIDIsIDMsIDUsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NTAtXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTc1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNbXSA9IHtcdC8qIENIT0lDRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NjItXHQgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NzYzOlx0e0ZOQU1FKFwmIzM0O2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXCYjMzQ7KSBTRVEsIDEwLCAxMSwgMTQsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NjQtXHQgb2Zmc2V0b2Zcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NzY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHtcdC8qIFNFUVVFTkNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNzcwLVx0e0ZOQU1FKFwmIzM0O2RhdGFUeXBlXCYjMzQ7KSBDSE9JQ0UsIDMsIDYsIDksIFNLSVAgfCBFWFQsIDAsIF9EYXRhVHlwZX0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NzcxOlx0e0ZOQU1FKFwmIzM0O211bHRpcGxleFBhcmFtZXRlcnNcJiMzNDspIENIT0lDRSwgMSwgMiwgMywgREVDT0RFIHwgRVhUIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc3Mi1cdCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9Nzk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfbmV0d29ya0FkZHJlc3NbXSA9IHtcdC8qIENIT0lDRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03OTgtXHR7Rk5BTUUoXCYjMzQ7ZTE2NEFkZHJlc3NcJiMzNDspIE5VTURHVCwgNywgMSwgMCwgU0tJUCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6Nzk5Olx0e0ZOQU1FKFwmIzM0O2xvY2FsQXJlYUFkZHJlc3NcJiMzNDspIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgwMC1cdCBvZmZzZXRvZihOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzcywgbG9jYWxBcmVhQWRkcmVzcyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTgwND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX05ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MDYtXHQgX05ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX2Rpc3RyaWJ1dGlvbn0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODA3Olx0e0ZOQU1FKFwmIzM0O25ldHdvcmtBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDIsIDMsIDMsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MDgtXHQgb2Zmc2V0b2YoTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnMsIG5ldHdvcmtBZGRyZXNzKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9ODE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgxNy1cdHtGTkFNRShcJiMzNDtmb3J3YXJkTG9naWNhbENoYW5uZWxOdW1iZXJcJiMzNDspIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODE4Olx0e0ZOQU1FKFwmIzM0O2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNcJiMzNDspIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgxOS1cdCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWwsIGZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjEtXHR7Rk5BTUUoXCYjMzQ7cmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1wmIzM0OykgU0VRLCAxLCAyLCA0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjgyMjpcdCBERUNPREUgfCBFWFQgfCBPUFQsIG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjMtXHRcdFx0XHQgICAgICByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjQtXHQgX09wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4MjU6XHR7Rk5BTUUoXCYjMzQ7c2VwYXJhdGVTdGFja1wmIzM0OykgU0VRLCAyLCA0LCA1LCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODI2LVx0IG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCwgc2VwYXJhdGVTdGFjayksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTgzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1NldHVwX1VVSUVfZmFzdFN0YXJ0W10gPSB7XHQvKiBTRVFVRU5DRSBPRiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjgzMjpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODMzLVx0IHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz04Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9TZXR1cF9VVUlFW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgzOC1cdHtGTkFNRShcJiMzNDtwcm90b2NvbElkZW50aWZpZXJcJiMzNDspIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODM5Olx0e0ZOQU1FKFwmIzM0O2gyNDVBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04NDAtXHQgb2Zmc2V0b2YoU2V0dXBfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg0NS1cdCBfU2V0dXBfVVVJRV9kZXN0aW5hdGlvbkFkZHJlc3N9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjg0NjpcdHtGTkFNRShcJiMzNDtkZXN0Q2FsbFNpZ25hbEFkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg0Ny1cdCBvZmZzZXRvZihTZXR1cF9VVUlFLCBkZXN0Q2FsbFNpZ25hbEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg1OC1cdHtGTkFNRShcJiMzNDtjYWxsVHlwZVwmIzM0OykgQ0hPSUNFLCAyLCA0LCA0LCBTS0lQIHwgRVhULCAwLCBfQ2FsbFR5cGV9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjg1OTpcdHtGTkFNRShcJiMzNDtzb3VyY2VDYWxsU2lnbmFsQWRkcmVzc1wmIzM0OykgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODYwLVx0IG9mZnNldG9mKFNldHVwX1VVSUUsIHNvdXJjZUNhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04NjctXHR7Rk5BTUUoXCYjMzQ7Y3J5cHRvVG9rZW5zXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODY4Olx0e0ZOQU1FKFwmIzM0O2Zhc3RTdGFydFwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDMwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODY5LVx0IG9mZnNldG9mKFNldHVwX1VVSUUsIGZhc3RTdGFydCksIF9TZXR1cF9VVUlFX2Zhc3RTdGFydH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTg5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0NhbGxQcm9jZWVkaW5nX1VVSUVfZmFzdFN0YXJ0W10gPSB7XHQvKiBTRVFVRU5DRSBPRiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjg5NzpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODk4LVx0IHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz05MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9DYWxsUHJvY2VlZGluZ19VVUlFW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MDUtXHQgX0VuZHBvaW50VHlwZX0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTA2Olx0e0ZOQU1FKFwmIzM0O2gyNDVBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MDctXHQgb2Zmc2V0b2YoQ2FsbFByb2NlZWRpbmdfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTkxMi1cdHtGTkFNRShcJiMzNDtjcnlwdG9Ub2tlbnNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo5MTM6XHR7Rk5BTUUoXCYjMzQ7ZmFzdFN0YXJ0XCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MTQtXHQgb2Zmc2V0b2YoQ2FsbFByb2NlZWRpbmdfVVVJRSwgZmFzdFN0YXJ0KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQ29ubmVjdF9VVUlFX2Zhc3RTdGFydFtdID0ge1x0LyogU0VRVUVOQ0UgT0YgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo5MjM6XHR7Rk5BTUUoXCYjMzQ7aXRlbVwmIzM0OykgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTkyNC1cdCBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQ29ubmVjdF9VVUlFW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTkyOS1cdHtGTkFNRShcJiMzNDtwcm90b2NvbElkZW50aWZpZXJcJiMzNDspIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTMwOlx0e0ZOQU1FKFwmIzM0O2gyNDVBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MzEtXHQgb2Zmc2V0b2YoQ29ubmVjdF9VVUlFLCBoMjQ1QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTM5LVx0e0ZOQU1FKFwmIzM0O2NyeXB0b1Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjk0MDpcdHtGTkFNRShcJiMzNDtmYXN0U3RhcnRcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk0MS1cdCBvZmZzZXRvZihDb25uZWN0X1VVSUUsIGZhc3RTdGFydCksIF9Db25uZWN0X1VVSUVfZmFzdFN0YXJ0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnRbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTU3Olx0e0ZOQU1FKFwmIzM0O2l0ZW1cJiMzNDspIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05NTgtXHQgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0FsZXJ0aW5nX1VVSUVbXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk2NS1cdCBfRW5kcG9pbnRUeXBlfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo5NjY6XHR7Rk5BTUUoXCYjMzQ7aDI0NUFkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk2Ny1cdCBvZmZzZXRvZihBbGVydGluZ19VVUlFLCBoMjQ1QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTcyLVx0e0ZOQU1FKFwmIzM0O2NyeXB0b1Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjk3MzpcdHtGTkFNRShcJiMzNDtmYXN0U3RhcnRcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk3NC1cdCBvZmZzZXRvZihBbGVydGluZ19VVUlFLCBmYXN0U3RhcnQpLCBfQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnR9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xMDU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfRmFjaWxpdHlfVVVJRV9mYXN0U3RhcnRbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTA2MDpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTA2MS1cdCBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTA2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0ZhY2lsaXR5X1VVSUVbXSA9IHtcdC8qIFNFUVVFTkNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTA2Ni1cdHtGTkFNRShcJiMzNDtwcm90b2NvbElkZW50aWZpZXJcJiMzNDspIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTA2NzpcdHtGTkFNRShcJiMzNDthbHRlcm5hdGl2ZUFkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEwNjgtXHQgb2Zmc2V0b2YoRmFjaWxpdHlfVVVJRSwgYWx0ZXJuYXRpdmVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDcxLVx0e0ZOQU1FKFwmIzM0O2NvbmZlcmVuY2VJRFwmIzM0OykgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTA3MjpcdHtGTkFNRShcJiMzNDtyZWFzb25cJiMzNDspIENIT0lDRSwgMiwgNCwgMTEsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDczLVx0IG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIHJlYXNvbiksIF9GYWNpbGl0eVJlYXNvbn0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEwODAtXHR7Rk5BTUUoXCYjMzQ7Y29uZmVyZW5jZXNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMDgxOlx0e0ZOQU1FKFwmIzM0O2gyNDVBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDgyLVx0IG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIGgyNDVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEwODM6XHR7Rk5BTUUoXCYjMzQ7ZmFzdFN0YXJ0XCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDg0LVx0IG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIGZhc3RTdGFydCksIF9GYWNpbGl0eV9VVUlFX2Zhc3RTdGFydH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9Qcm9ncmVzc19VVUlFX2Zhc3RTdGFydFtdID0ge1x0LyogU0VRVUVOQ0UgT0YgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzA0Olx0e0ZOQU1FKFwmIzM0O2l0ZW1cJiMzNDspIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzA1LVx0IHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUHJvZ3Jlc3NfVVVJRVtdID0ge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMxMi1cdCBfRW5kcG9pbnRUeXBlfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzEzOlx0e0ZOQU1FKFwmIzM0O2gyNDVBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzE0LVx0IG9mZnNldG9mKFByb2dyZXNzX1VVSUUsIGgyNDVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzIyLVx0IF9Qcm9ncmVzc19VVUlFX2NyeXB0b1Rva2Vuc30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTMyMzpcdHtGTkFNRShcJiMzNDtmYXN0U3RhcnRcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzMjQtXHQgb2Zmc2V0b2YoUHJvZ3Jlc3NfVVVJRSwgZmFzdFN0YXJ0KSwgX1Byb2dyZXNzX1VVSUVfZmFzdFN0YXJ0fSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTMzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5W10gPSB7XHQvKiBDSE9JQ0UgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzMxOlx0e0ZOQU1FKFwmIzM0O3NldHVwXCYjMzQ7KSBTRVEsIDcsIDEzLCAzOSwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzMzItXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIHNldHVwKSwgX1NldHVwX1VVSUV9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzMzM6XHR7Rk5BTUUoXCYjMzQ7Y2FsbFByb2NlZWRpbmdcJiMzNDspIFNFUSwgMSwgMywgMTIsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzM0LVx0IG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBjYWxsUHJvY2VlZGluZyksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMzNS1cdCBfQ2FsbFByb2NlZWRpbmdfVVVJRX0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTMzNjpcdHtGTkFNRShcJiMzNDtjb25uZWN0XCYjMzQ7KSBTRVEsIDEsIDQsIDE5LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMzNy1cdCBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgY29ubmVjdCksIF9Db25uZWN0X1VVSUV9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzMzg6XHR7Rk5BTUUoXCYjMzQ7YWxlcnRpbmdcJiMzNDspIFNFUSwgMSwgMywgMTcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzM5LVx0IG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBhbGVydGluZyksIF9BbGVydGluZ19VVUlFfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM0Mi1cdCBfUmVsZWFzZUNvbXBsZXRlX1VVSUV9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzNDM6XHR7Rk5BTUUoXCYjMzQ7ZmFjaWxpdHlcJiMzNDspIFNFUSwgMywgNSwgMjEsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzQ0LVx0IG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBmYWNpbGl0eSksIF9GYWNpbGl0eV9VVUlFfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzQ1Olx0e0ZOQU1FKFwmIzM0O3Byb2dyZXNzXCYjMzQ7KSBTRVEsIDUsIDgsIDExLCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM0Ni1cdCBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgcHJvZ3Jlc3MpLCBfUHJvZ3Jlc3NfVVVJRX0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZXF1ZXN0TWVzc2FnZVtdID0ge1x0LyogQ0hPSUNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzNTctXHR7Rk5BTUUoXCYjMzQ7dGVybWluYWxDYXBhYmlsaXR5U2V0XCYjMzQ7KSBTRVEsIDMsIDUsIDUsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzNTg6XHR7Rk5BTUUoXCYjMzQ7b3BlbkxvZ2ljYWxDaGFubmVsXCYjMzQ7KSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzU5LVx0IG9mZnNldG9mKFJlcXVlc3RNZXNzYWdlLCBvcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTM3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNbXSA9IHtcdC8qIENIT0lDRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzc2LVx0IF9IMjIyTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzc3Olx0e0ZOQU1FKFwmIzM0O2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXCYjMzQ7KSBTRVEsIDEwLCAxMSwgMTQsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzc4LVx0IG9mZnNldG9mXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzODM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1tdID0ge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM4NS1cdHtGTkFNRShcJiMzNDtwb3J0TnVtYmVyXCYjMzQ7KSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzODY6XHR7Rk5BTUUoXCYjMzQ7bXVsdGlwbGV4UGFyYW1ldGVyc1wmIzM0OykgQ0hPSUNFLCAwLCAxLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM4Ny1cdCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTM5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDAwLVx0e0ZOQU1FKFwmIzM0O3Nlc3Npb25JRFwmIzM0OykgSU5ULCA4LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDAxOlx0e0ZOQU1FKFwmIzM0O21lZGlhQ2hhbm5lbFwmIzM0OykgQ0hPSUNFLCAxLCAyLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQwMi1cdCBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycywgbWVkaWFDaGFubmVsKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDAzLVx0IF9IMjQ1X1RyYW5zcG9ydEFkZHJlc3N9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0MDQ6XHR7Rk5BTUUoXCYjMzQ7bWVkaWFDb250cm9sQ2hhbm5lbFwmIzM0OykgQ0hPSUNFLCAxLCAyLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQwNS1cdCBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycywgbWVkaWFDb250cm9sQ2hhbm5lbCksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE0MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxBY2tfZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnNbXSA9IHtcdC8qIENIT0lDRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0MTM6XHR7Rk5BTUUoXCYjMzQ7aDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnNcJiMzNDspIFNFUSwgNSwgNSwgNywgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MTQtXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNDE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDIxLVx0e0ZOQU1FKFwmIzM0O3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNcJiMzNDspIFNFUSwgMiwgMywgNCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDIyOlx0IERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MjMtXHRcdFx0XHQgICAgICByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDI0LVx0IF9PcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQyNTpcdHtGTkFNRShcJiMzNDtzZXBhcmF0ZVN0YWNrXCYjMzQ7KSBTRVEsIDIsIDQsIDUsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDI2LVx0IG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbEFjaywgc2VwYXJhdGVTdGFjayksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MjgtXHR7Rk5BTUUoXCYjMzQ7Zm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnNcJiMzNDspIENIT0lDRSwgMCwgMSwgMSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDI5Olx0IERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MzAtXHRcdFx0XHQgICAgICBmb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE0MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZXNwb25zZU1lc3NhZ2VbXSA9IHtcdC8qIENIT0lDRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDQzLVx0IE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0NDQ6XHR7Rk5BTUUoXCYjMzQ7b3BlbkxvZ2ljYWxDaGFubmVsQWNrXCYjMzQ7KSBTRVEsIDEsIDIsIDUsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDQ1LVx0IG9mZnNldG9mKFJlc3BvbnNlTWVzc2FnZSwgb3BlbkxvZ2ljYWxDaGFubmVsQWNrKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTQ3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX011bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVtdID0ge1x0LyogQ0hPSUNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQ3MjpcdHtGTkFNRShcJiMzNDtyZXF1ZXN0XCYjMzQ7KSBDSE9JQ0UsIDQsIDExLCAxNSwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0NzMtXHQgb2Zmc2V0b2YoTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlLCByZXF1ZXN0KSwgX1JlcXVlc3RNZXNzYWdlfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDc0Olx0e0ZOQU1FKFwmIzM0O3Jlc3BvbnNlXCYjMzQ7KSBDSE9JQ0UsIDUsIDE5LCAyNCwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0NzUtXHQgb2Zmc2V0b2YoTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlLCByZXNwb25zZSksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE0ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9IMzIzX1VVX1BEVV9oMjQ1Q29udHJvbFtdID0ge1x0LyogU0VRVUVOQ0UgT0YgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDgyOlx0e0ZOQU1FKFwmIzM0O2l0ZW1cJiMzNDspIENIT0lDRSwgMiwgNCwgNCwgREVDT0RFIHwgT1BFTiB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDgzLVx0IHNpemVvZihNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNDg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfSDMyM19VVV9QRFVbXSA9IHtcdC8qIFNFUVVFTkNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQ4OTpcdHtGTkFNRShcJiMzNDtoMzIzLW1lc3NhZ2UtYm9keVwmIzM0OykgQ0hPSUNFLCAzLCA3LCAxMywgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0OTAtXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFUsIGgzMjNfbWVzc2FnZV9ib2R5KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQ5Ni1cdHtGTkFNRShcJiMzNDtoMjQ1VHVubmVsaW5nXCYjMzQ7KSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDk3Olx0e0ZOQU1FKFwmIzM0O2gyNDVDb250cm9sXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgNCwgREVDT0RFIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0OTgtXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFUsIGgyNDVDb250cm9sKSwgX0gzMjNfVVVfUERVX2gyNDVDb250cm9sfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTUwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gzMjNfVXNlckluZm9ybWF0aW9uW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1MTA6XHR7Rk5BTUUoXCYjMzQ7aDMyMy11dS1wZHVcJiMzNDspIFNFUSwgMSwgMiwgMTEsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTExLVx0IG9mZnNldG9mKEgzMjNfVXNlckluZm9ybWF0aW9uLCBoMzIzX3V1X3BkdSksIF9IMzIzX1VVX1BEVX0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9HYXRla2VlcGVyUmVxdWVzdFtdID0ge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTUxOS1cdCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1MjA6XHR7Rk5BTUUoXCYjMzQ7cmFzQWRkcmVzc1wmIzM0OykgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTUyMS1cdCBvZmZzZXRvZihHYXRla2VlcGVyUmVxdWVzdCwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0dhdGVrZWVwZXJDb25maXJtW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTQ0LVx0e0ZOQU1FKFwmIzM0O2dhdGVrZWVwZXJJZGVudGlmaWVyXCYjMzQ7KSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1NDU6XHR7Rk5BTUUoXCYjMzQ7cmFzQWRkcmVzc1wmIzM0OykgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU0Ni1cdCBvZmZzZXRvZihHYXRla2VlcGVyQ29uZmlybSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTU1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU2MDpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTYxLVx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0X3Jhc0FkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU2NjpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTY3LVx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTgwLVx0e0ZOQU1FKFwmIzM0O2Rpc2NvdmVyeUNvbXBsZXRlXCYjMzQ7KSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTgxOlx0e0ZOQU1FKFwmIzM0O2NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTgyLVx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIGNhbGxTaWduYWxBZGRyZXNzKSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTgzLVx0IF9SZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTg0Olx0e0ZOQU1FKFwmIzM0O3Jhc0FkZHJlc3NcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1ODUtXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uUmVxdWVzdCwgcmFzQWRkcmVzcyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTMtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlRW5kcG9pbnRzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NDpcdHtGTkFNRShcJiMzNDt0aW1lVG9MaXZlXCYjMzQ7KSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTk1LVx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHRpbWVUb0xpdmUpLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1fY2FsbFNpZ25hbEFkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTYyNDpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjI1LVx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE2MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25Db25maXJtW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjM3LVx0IF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTYzODpcdHtGTkFNRShcJiMzNDtjYWxsU2lnbmFsQWRkcmVzc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDEwLCBERUNPREUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTYzOS1cdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCBjYWxsU2lnbmFsQWRkcmVzcyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlR2F0ZWtlZXBlclwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0Ny1cdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE2Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9VbnJlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY3MDpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjcxLVx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE2NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9VbnJlZ2lzdHJhdGlvblJlcXVlc3RbXSA9IHtcdC8qIFNFUVVFTkNFICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY3Ni1cdHtGTkFNRShcJiMzNDtyZXF1ZXN0U2VxTnVtXCYjMzQ7KSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2Nzc6XHR7Rk5BTUUoXCYjMzQ7Y2FsbFNpZ25hbEFkZHJlc3NcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NzgtXHQgb2Zmc2V0b2YoVW5yZWdpc3RyYXRpb25SZXF1ZXN0LCBjYWxsU2lnbmFsQWRkcmVzcyksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE3MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9BZG1pc3Npb25SZXF1ZXN0W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNzE5LVx0IF9BZG1pc3Npb25SZXF1ZXN0X2Rlc3RpbmF0aW9uSW5mb30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTcyMDpcdHtGTkFNRShcJiMzNDtkZXN0Q2FsbFNpZ25hbEFkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE3MjEtXHQgb2Zmc2V0b2YoQWRtaXNzaW9uUmVxdWVzdCwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTcyNi1cdCBfQWRtaXNzaW9uUmVxdWVzdF9zcmNJbmZvfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNzI3Olx0e0ZOQU1FKFwmIzM0O3NyY0NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNzI4LVx0IG9mZnNldG9mKEFkbWlzc2lvblJlcXVlc3QsIHNyY0NhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNzU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQWRtaXNzaW9uQ29uZmlybVtdID0ge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTc2MC1cdHtGTkFNRShcJiMzNDtjYWxsTW9kZWxcJiMzNDspIENIT0lDRSwgMSwgMiwgMiwgU0tJUCB8IEVYVCwgMCwgX0NhbGxNb2RlbH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTc2MTpcdHtGTkFNRShcJiMzNDtkZXN0Q2FsbFNpZ25hbEFkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE3NjItXHQgb2Zmc2V0b2YoQWRtaXNzaW9uQ29uZmlybSwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTc5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0xvY2F0aW9uUmVxdWVzdFtdID0ge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTgwMi1cdCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4MDM6XHR7Rk5BTUUoXCYjMzQ7cmVwbHlBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODA0LVx0IG9mZnNldG9mKExvY2F0aW9uUmVxdWVzdCwgcmVwbHlBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xODIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfTG9jYXRpb25Db25maXJtW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4MjEtXHR7Rk5BTUUoXCYjMzQ7cmVxdWVzdFNlcU51bVwmIzM0OykgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODIyOlx0e0ZOQU1FKFwmIzM0O2NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODIzLVx0IG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgY2FsbFNpZ25hbEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTgyNDpcdHtGTkFNRShcJiMzNDtyYXNBZGRyZXNzXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODI1LVx0IG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTg0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0luZm9SZXF1ZXN0UmVzcG9uc2VfY2FsbFNpZ25hbEFkZHJlc3NbXSA9IHtcdC8qIFNFUVVFTkNFIE9GICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTg0NzpcdHtGTkFNRShcJiMzNDtpdGVtXCYjMzQ7KSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODQ4LVx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9JbmZvUmVxdWVzdFJlc3BvbnNlW10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODU3LVx0e0ZOQU1FKFwmIzM0O2VuZHBvaW50SWRlbnRpZmllclwmIzM0OykgQk1QU1RSLCA3LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODU4Olx0e0ZOQU1FKFwmIzM0O3Jhc0FkZHJlc3NcJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4NTktXHQgb2Zmc2V0b2YoSW5mb1JlcXVlc3RSZXNwb25zZSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODYwOlx0e0ZOQU1FKFwmIzM0O2NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODYxLVx0IG9mZnNldG9mKEluZm9SZXF1ZXN0UmVzcG9uc2UsIGNhbGxTaWduYWxBZGRyZXNzKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTg3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1Jhc01lc3NhZ2VbXSA9IHtcdC8qIENIT0lDRSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4NzY6XHR7Rk5BTUUoXCYjMzQ7Z2F0ZWtlZXBlclJlcXVlc3RcJiMzNDspIFNFUSwgNCwgOCwgMTgsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODc3LVx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGdhdGVrZWVwZXJSZXF1ZXN0KSwgX0dhdGVrZWVwZXJSZXF1ZXN0fSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODc4Olx0e0ZOQU1FKFwmIzM0O2dhdGVrZWVwZXJDb25maXJtXCYjMzQ7KSBTRVEsIDIsIDUsIDE0LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg3OS1cdCBvZmZzZXRvZihSYXNNZXNzYWdlLCBnYXRla2VlcGVyQ29uZmlybSksIF9HYXRla2VlcGVyQ29uZmlybX0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg4MC1cdHtGTkFNRShcJiMzNDtnYXRla2VlcGVyUmVqZWN0XCYjMzQ7KSBTRVEsIDIsIDUsIDExLCBTVE9QIHwgRVhULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODgxOlx0e0ZOQU1FKFwmIzM0O3JlZ2lzdHJhdGlvblJlcXVlc3RcJiMzNDspIFNFUSwgMywgMTAsIDMxLCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg4Mi1cdCBvZmZzZXRvZihSYXNNZXNzYWdlLCByZWdpc3RyYXRpb25SZXF1ZXN0KSwgX1JlZ2lzdHJhdGlvblJlcXVlc3R9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4ODM6XHR7Rk5BTUUoXCYjMzQ7cmVnaXN0cmF0aW9uQ29uZmlybVwmIzM0OykgU0VRLCAzLCA3LCAyNCwgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4ODQtXHQgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgcmVnaXN0cmF0aW9uQ29uZmlybSksIF9SZWdpc3RyYXRpb25Db25maXJtfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODg1LVx0e0ZOQU1FKFwmIzM0O3JlZ2lzdHJhdGlvblJlamVjdFwmIzM0OykgU0VRLCAyLCA1LCAxMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTg4NjpcdHtGTkFNRShcJiMzNDt1bnJlZ2lzdHJhdGlvblJlcXVlc3RcJiMzNDspIFNFUSwgMywgNSwgMTUsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODg3LVx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIHVucmVnaXN0cmF0aW9uUmVxdWVzdCksIF9VbnJlZ2lzdHJhdGlvblJlcXVlc3R9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODg5LVx0e0ZOQU1FKFwmIzM0O3VucmVnaXN0cmF0aW9uUmVqZWN0XCYjMzQ7KSBTRVEsIDEsIDMsIDgsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4OTA6XHR7Rk5BTUUoXCYjMzQ7YWRtaXNzaW9uUmVxdWVzdFwmIzM0OykgU0VRLCA3LCAxNiwgMzQsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODkxLVx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGFkbWlzc2lvblJlcXVlc3QpLCBfQWRtaXNzaW9uUmVxdWVzdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTg5MjpcdHtGTkFNRShcJiMzNDthZG1pc3Npb25Db25maXJtXCYjMzQ7KSBTRVEsIDIsIDYsIDI3LCBERUNPREUgfCBFWFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg5My1cdCBvZmZzZXRvZihSYXNNZXNzYWdlLCBhZG1pc3Npb25Db25maXJtKSwgX0FkbWlzc2lvbkNvbmZpcm19LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTAwLVx0e0ZOQU1FKFwmIzM0O2Rpc2VuZ2FnZVJlamVjdFwmIzM0OykgU0VRLCAxLCAzLCA4LCBTVE9QIHwgRVhULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxOTAxOlx0e0ZOQU1FKFwmIzM0O2xvY2F0aW9uUmVxdWVzdFwmIzM0OykgU0VRLCAyLCA1LCAxNywgREVDT0RFIHwgRVhULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE5MDItXHQgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgbG9jYXRpb25SZXF1ZXN0KSwgX0xvY2F0aW9uUmVxdWVzdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTkwMzpcdHtGTkFNRShcJiMzNDtsb2NhdGlvbkNvbmZpcm1cJiMzNDspIFNFUSwgMSwgNCwgMTksIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTA0LVx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGxvY2F0aW9uQ29uZmlybSksIF9Mb2NhdGlvbkNvbmZpcm19LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTA2LVx0e0ZOQU1FKFwmIzM0O2luZm9SZXF1ZXN0XCYjMzQ7KSBTRVEsIDIsIDQsIDE1LCBTVE9QIHwgRVhULCAwLCBOVUxMfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxOTA3Olx0e0ZOQU1FKFwmIzM0O2luZm9SZXF1ZXN0UmVzcG9uc2VcJiMzNDspIFNFUSwgMywgOCwgMTYsIERFQ09ERSB8IEVYVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTA4LVx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGluZm9SZXF1ZXN0UmVzcG9uc2UpLCBfSW5mb1JlcXVlc3RSZXNwb25zZX0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTE4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29kaW5nIHRoZSBgdGltZVRvTGl2ZWAgRmllbGQqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdGltZVRvTGl2ZWAgaXMgZGVmaW5lZCBhcyBhbiBgSU5UYCB3aXRoIGEgYERFQ09ERWAgYXR0cmlidXRlLiBHb3QgaXQsIGFuZCBpdCYjMzk7cyBsb2NhdGVkIHdpdGhpbiB0aGUgYFJlZ2lzdHJhdGlvblJlcXVlc3RgIHN0cnVjdC4gTXkgcXVpY2sgZ2xhbmNlIHRlbGxzIG1lIHRoYXQgaXQgaXMgYWxzbyBwcmVzZW50IGluIGBSZWdpc3RyYXRpb25Db25maXJtYC4KCkxldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZGVmaW5pdGlvbiBpbiBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgbWF0Y2hlcyB3aGF0IEkgZXhwZWN0LiBBaCB5ZXMsIHRoZXJlIGl0IGlzOiBgdGltZVRvTGl2ZWAgZGVmaW5lZCBhcyBhbiBgSU5UYCB3aXRoIGBERUNPREUgfCBPUFRgLCBhbmQgdGhlIGBvZmZzZXRvZmAgaXMgYXMgZXhwZWN0ZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlIHN0cnVjdHVyZS4gSSBrbm93IHRoZSBmaWVsZCBpdHNlbGYsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgZmllbGRzIGluIHRoZSBzdHJ1Y3QuIEkgbmVlZCB0byBrbm93IHdoYXQgY29tZXMgKmFmdGVyKiBgdGltZVRvTGl2ZWAgaW4gYFJlZ2lzdHJhdGlvblJlcXVlc3RgLiBHb3R0YSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuMTU3NjpcdFx0e0ZOQU1FKFwmIzM0O3JlcXVlc3RTZXFOdW1cJiMzNDspIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sXG4xNTc3Olx0XHR7Rk5BTUUoXCYjMzQ7cHJvdG9jb2xJZGVudGlmaWVyXCYjMzQ7KSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxuMTU3ODpcdFx0e0ZOQU1FKFwmIzM0O25vblN0YW5kYXJkRGF0YVwmIzM0OykgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLFxuMTU3OTpcdFx0IF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sXG4xNTgwOlx0XHR7Rk5BTUUoXCYjMzQ7ZGlzY292ZXJ5Q29tcGxldGVcJiMzNDspIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxuMTU4MTpcdFx0e0ZOQU1FKFwmIzM0O2NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcbjE1ODI6XHRcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCBjYWxsU2lnbmFsQWRkcmVzcyksXG4xNTgzOlx0XHQgX1JlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3N9LFxuMTU4NDpcdFx0e0ZOQU1FKFwmIzM0O3Jhc0FkZHJlc3NcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLFxuMTU4NTpcdFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHJhc0FkZHJlc3MpLFxuMTU4NjpcdFx0IF9SZWdpc3RyYXRpb25SZXF1ZXN0X3Jhc0FkZHJlc3N9LFxuMTU4NzpcdFx0e0ZOQU1FKFwmIzM0O3Rlcm1pbmFsVHlwZVwmIzM0OykgU0VRLCA2LCA4LCAxMCwgU0tJUCB8IEVYVCwgMCwgX0VuZHBvaW50VHlwZX0sXG4xNTg4Olx0XHR7Rk5BTUUoXCYjMzQ7dGVybWluYWxBbGlhc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsXG4xNTg5Olx0XHQgX1JlZ2lzdHJhdGlvblJlcXVlc3RfdGVybWluYWxBbGlhc30sXG4xNTkwOlx0XHR7Rk5BTUUoXCYjMzQ7Z2F0ZWtlZXBlcklkZW50aWZpZXJcJiMzNDspIEJNUFNUUiwgNywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG4xNTkxOlx0XHR7Rk5BTUUoXCYjMzQ7ZW5kcG9pbnRWZW5kb3JcJiMzNDspIFNFUSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCxcbjE1OTI6XHRcdCBfVmVuZG9ySWRlbnRpZmllcn0sXG4xNTkzOlx0XHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlRW5kcG9pbnRzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG4xNTk0Olx0XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG4xNTk1Olx0XHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uUmVxdWVzdCwgdGltZVRvTGl2ZSksIE5VTEx9LFxuMTU5NjpcdFx0e0ZOQU1FKFwmIzM0O3Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTU5NzpcdFx0e0ZOQU1FKFwmIzM0O2NyeXB0b1Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTU5ODpcdFx0e0ZOQU1FKFwmIzM0O2ludGVncml0eUNoZWNrVmFsdWVcJiMzNDspIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXG4xNTk5Olx0XHR7Rk5BTUUoXCYjMzQ7a2VlcEFsaXZlXCYjMzQ7KSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSxcbjE2MDA6XHRcdHtGTkFNRShcJiMzNDtlbmRwb2ludElkZW50aWZpZXJcJiMzNDspIEJNUFNUUiwgNywgMSwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXG4xNjAxOlx0XHR7Rk5BTUUoXCYjMzQ7d2lsbFN1cHBseVVVSUVzXCYjMzQ7KSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSxcbjE2MDI6XHRcdHtGTkFNRShcJiMzNDttYWludGFpbkNvbm5lY3Rpb25cJiMzNDspIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LFxuMTYwMzpcdFx0e0ZOQU1FKFwmIzM0O2FsdGVybmF0ZVRyYW5zcG9ydEFkZHJlc3Nlc1wmIzM0OykgU0VRLCAxLCAxLCAxLCBTVE9QIHwgRVhUIHwgT1BULFxuMTYwNDpcdFx0IDAsIE5VTEx9LFxuMTYwNTpcdFx0e0ZOQU1FKFwmIzM0O2FkZGl0aXZlUmVnaXN0cmF0aW9uXCYjMzQ7KSBOVUwsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTYwNjpcdFx0e0ZOQU1FKFwmIzM0O3Rlcm1pbmFsQWxpYXNQYXR0ZXJuXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCxcbjE2MDc6XHRcdCBOVUxMfSxcbjE2MDg6XHRcdHtGTkFNRShcJiMzNDtzdXBwb3J0c0FsdEdLXCYjMzQ7KSBOVUwsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTYwOTpcdFx0e0ZOQU1FKFwmIzM0O3VzYWdlUmVwb3J0aW5nQ2FwYWJpbGl0eVwmIzM0OykgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLFxuMTYxMDpcdFx0IE5VTEx9LFxuMTYxMTpcdFx0e0ZOQU1FKFwmIzM0O211bHRpcGxlQ2FsbHNcJiMzNDspIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTYxMjpcdFx0e0ZOQU1FKFwmIzM0O3N1cHBvcnRlZEgyNDhQYWNrYWdlc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsXG4xNjEzOlx0XHQgTlVMTH0sXG4xNjE0Olx0XHR7Rk5BTUUoXCYjMzQ7Y2FsbENyZWRpdENhcGFiaWxpdHlcJiMzNDspIFNFUSwgMiwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MjcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIERlZHVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2UgZmllbGRzIGFmdGVyIGB0aW1lVG9MaXZlYCwgYW5kIEkgc2VlIHRoZSBgU1RPUGAgYXR0cmlidXRlIGFwcGxpZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGUgaGVyZToKCmBgYGMKCXtGTkFNRSgmIzM0O3Rva2VucyYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCmBgYAoKUmlnaHQsIGlmIGEgZmllbGQgaGFzIHRoYXQgYFNUT1BgIGZsYWcgc2V0LCBgZGVjb2RlX3NlcWAgaGFuZGxlcyBpdCBsaWtlIHRoaXM6CgpgYGBjCgkJaWYgKHNvbi0mZ3Q7YXR0ciAmYW1wOyBTVE9QKSB7CgkJCVBSSU5UKCYjMzQ7JSpzJXNcbiYjMzQ7LCAobGV2ZWwgJiM0MzsgMSkgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssCgkJCSAgICAgIHNvbi0mZ3Q7bmFtZSk7CgkJCXJldHVybiBIMzIzX0VSUk9SX1NUT1A7CgkJfQpgYGAKClNvLCBlc3NlbnRpYWxseSwgaXQgc3RvcHMgcGFyc2luZyB0aGUgbW9tZW50IGl0IGhpdHMgYSBmaWVsZCB3aXRoIHRoYXQgYFNUT1BgIGF0dHJpYnV0ZS4gVGhlIGNvZGUgcHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBhbmQgcmV0dXJucyBgSDMyM19FUlJPUl9TVE9QYC4gV2hpY2ggbWVhbnMsIGlmIGBTVE9QYCBpcyBzZXQgYWZ0ZXIgdGhlIGB0aW1lVG9MaXZlYCBmaWVsZCwgd2UmIzM5O3JlIGN1dHRpbmcgb2ZmIHRoZSBwYXJzaW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoYXQhCgpXYWl0IGEgbWludXRlLi4uIElmIGl0JiMzOTtzIHN0b3BwaW5nICppbW1lZGlhdGVseSosIHRoYXQgbWVhbnMgYGRlY29kZV9lbnVtYCBhbmQgd2hhdGV2ZXIgaXMgc3VwcG9zZWQgdG8gaGFwcGVuIGFmdGVyIGB0aW1lVG9MaXZlYCB3b3VsZCAqbmV2ZXIqIGdldCBjYWxsZWQuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGBSZWdpc3RyYXRpb25Db25maXJtYCBtZXNzYWdlIHN0cnVjdHVyZSB0byBzZWUgd2hhdCBjb21lcyBhZnRlciB0aW1lIHRvIGxpdmUgdG8gdW5kZXJzdGFuZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYzMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uQ29uZmlybVtdID0ge1x0LyogU0VRVUVOQ0UgKi9cbjE2MzQ6XHRcdHtGTkFNRShcJiMzNDtyZXF1ZXN0U2VxTnVtXCYjMzQ7KSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxuMTYzNTpcdFx0e0ZOQU1FKFwmIzM0O3Byb3RvY29sSWRlbnRpZmllclwmIzM0OykgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSxcbjE2MzY6XHRcdHtGTkFNRShcJiMzNDtub25TdGFuZGFyZERhdGFcJiMzNDspIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCxcbjE2Mzc6XHRcdCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxuMTYzODpcdFx0e0ZOQU1FKFwmIzM0O2NhbGxTaWduYWxBZGRyZXNzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcbjE2Mzk6XHRcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCBjYWxsU2lnbmFsQWRkcmVzcyksXG4xNjQwOlx0XHQgX1JlZ2lzdHJhdGlvbkNvbmZpcm1fY2FsbFNpZ25hbEFkZHJlc3N9LFxuMTY0MTpcdFx0e0ZOQU1FKFwmIzM0O3Rlcm1pbmFsQWxpYXNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLFxuMTY0MjpcdFx0IF9SZWdpc3RyYXRpb25Db25maXJtX3Rlcm1pbmFsQWxpYXN9LFxuMTY0MzpcdFx0e0ZOQU1FKFwmIzM0O2dhdGVrZWVwZXJJZGVudGlmaWVyXCYjMzQ7KSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxuMTY0NDpcdFx0e0ZOQU1FKFwmIzM0O2VuZHBvaW50SWRlbnRpZmllclwmIzM0OykgQk1QU1RSLCA3LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSxcbjE2NDU6XHRcdHtGTkFNRShcJiMzNDthbHRlcm5hdGVHYXRla2VlcGVyXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG4xNjQ2Olx0XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG4xNjQ3Olx0XHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uQ29uZmlybSwgdGltZVRvTGl2ZSksIE5VTEx9LFxuMTY0ODpcdFx0e0ZOQU1FKFwmIzM0O3Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTY0OTpcdFx0e0ZOQU1FKFwmIzM0O2NyeXB0b1Rva2Vuc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTY1MDpcdFx0e0ZOQU1FKFwmIzM0O2ludGVncml0eUNoZWNrVmFsdWVcJiMzNDspIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXG4xNjUxOlx0XHR7Rk5BTUUoXCYjMzQ7d2lsbFJlc3BvbmRUb0lSUlwmIzM0OykgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sXG4xNjUyOlx0XHR7Rk5BTUUoXCYjMzQ7cHJlR3JhbnRlZEFSUVwmIzM0OykgU0VRLCAwLCA0LCA4LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSxcbjE2NTM6XHRcdHtGTkFNRShcJiMzNDttYWludGFpbkNvbm5lY3Rpb25cJiMzNDspIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LFxuMTY1NDpcdFx0e0ZOQU1FKFwmIzM0O3NlcnZpY2VDb250cm9sXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXG4xNjU1Olx0XHR7Rk5BTUUoXCYjMzQ7c3VwcG9ydHNBZGRpdGl2ZVJlZ2lzdHJhdGlvblwmIzM0OykgTlVMLCBGSVhELCAwLCAwLCBTVE9QIHwgT1BULCAwLFxuMTY1NjpcdFx0IE5VTEx9LFxuMTY1NzpcdFx0e0ZOQU1FKFwmIzM0O3Rlcm1pbmFsQWxpYXNQYXR0ZXJuXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCxcbjE2NTg6XHRcdCBOVUxMfSxcbjE2NTk6XHRcdHtGTkFNRShcJiMzNDtzdXBwb3J0ZWRQcmVmaXhlc1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTY2MDpcdFx0e0ZOQU1FKFwmIzM0O3VzYWdlU3BlY1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuMTY2MTpcdFx0e0ZOQU1FKFwmIzM0O2ZlYXR1cmVTZXJ2ZXJBbGlhc1wmIzM0OykgQ0hPSUNFLCAxLCAyLCA3LCBTVE9QIHwgRVhUIHwgT1BULCAwLFxuMTY2MjpcdFx0IE5VTEx9LFxuMTY2MzpcdFx0e0ZOQU1FKFwmIzM0O2NhcGFjaXR5UmVwb3J0aW5nU3BlY1wmIzM0OykgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhUIHwgT1BULCAwLFxuMTY2NDpcdFx0IE5VTEx9LFxuMTY2NTpcdFx0e0ZOQU1FKFwmIzM0O2ZlYXR1cmVTZXRcJiMzNDspIFNFUSwgMywgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sXG4xNjY2Olx0XHR7Rk5BTUUoXCYjMzQ7Z2VuZXJpY0RhdGFcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcbjE2Njc6XHR9O1xuMTY2ODpcdFxuMTY2OTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzW10gPSB7XHQvKiBTRVFVRU5DRSBPRiAqL1xuMTY3MDpcdFx0e0ZOQU1FKFwmIzM0O2l0ZW1cJiMzNDspIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxuMTY3MTpcdFx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XG4xNjcyOlx0XHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb2RpbmcgRGlsZW1tYSBpbiBSZWdpc3RyYXRpb25Db25maXJtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBSZWdpc3RyYXRpb25Db25maXJtYCBzdHJ1Y3R1cmUsIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gSW4gdGhlIGRlZmluaXRpb24sIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYHRva2Vuc2Agd2hpY2ggaGFzIHRoZSBgU1RPUGAgYXR0cmlidXRlLiBUaGF0IG1lYW5zIHRoZSBwYXJzaW5nIGp1c3QgKnN0b3BzKiByaWdodCB0aGVyZSEgSSBtZWFuLCBpdCBsaXRlcmFsbHkgYmFpbHMgb3V0IGFmdGVyIHByb2Nlc3NpbmcgYHRpbWVUb0xpdmVgLiBUaGF0IGFsc28gbWVhbnMgdGhhdCBgZGVjb2RlX2VudW1gIG5ldmVyIGdldHMgY2FsbGVkIGFmdGVyIGB0aW1lVG9MaXZlYC4gSWYgdGhlIHBhcnNlciBiYWlscyB0aGVyZSwgdGhlbiB0aGUgc3Vic2VxdWVudCBmaWVsZHMgd29uJiMzOTt0IGV2ZW4gKmJlKiBkZWNvZGVkISAKCkhhbmcgb24gYSBtaW51dGUuLi4gYXJlIHRoZXJlICphbnkqIG90aGVyIGZpZWxkcyBpbiB0aGlzIHRoaW5nIHRoYXQgaGF2ZSB0aGlzIGNvbWJpbmF0aW9uIG9mIGBJTlRgIGFuZCBgREVDT0RFYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgcHJvYmxlbSBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYElOVGAgYW5kIGBERUNPREVgIHRvIHNlZSB3aGF0IG90aGVyIHN0cnVjdHVyZXMgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgdGhpcyBkZXNpZ24gcGF0dGVybi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBhIHdpZGVyIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTlQuKkRFQ09ERSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RbXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTMtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlRW5kcG9pbnRzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NDpcdHtGTkFNRShcJiMzNDt0aW1lVG9MaXZlXCYjMzQ7KSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTk1LVx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHRpbWVUb0xpdmUpLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlR2F0ZWtlZXBlclwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0Ny1cdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk4MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgUmVnaXN0cmF0aW9uUmVxdWVzdDogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gIHN0cnVjdHVyZXMsIGFuZCBpdCYjMzk7cyBzdHJpa2luZyBtZSB0aGF0IGB0aW1lVG9MaXZlYCBpcyB0aGUgT05MWSBpbnRlZ2VyIGZpZWxkIChgSU5UYCkgd2l0aGluIGJvdGggdGhhdCBoYXMgdGhlIGBERUNPREVgIGF0dHJpYnV0ZS4gQW5kIGdldCB0aGlzLCBpdCYjMzk7cyAqaW1tZWRpYXRlbHkqIGZvbGxvd2VkIGJ5IGEgZmllbGQgd2l0aCB0aGUgYFNUT1BgIGF0dHJpYnV0ZS4gIFRoYXQgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCBidWcmIzM0OyB0byBtZS4KCk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhlIGNvZGUuICBgZGVjb2RlX2ludGAgd2lsbCBhZHZhbmNlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIGBicy0mZ3Q7Y3VyYCBieSBgMiAqIGxlbmAgKGFzc3VtaW5nIGEgMi1ieXRlIGludGVnZXIpLiBUaGVuLCB0aGUgYGRlY29kZV9zZXFgIGxvb3Aga2lja3MgaW4sIG1vdmluZyB0byB0aGUgbmV4dCBmaWVsZC4gIFRoYXQgbmV4dCBmaWVsZCBpcyBgdG9rZW5zYC4KCmBgYGMKe0ZOQU1FKCYjMzQ7dG9rZW5zJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKYGBgCgpOb3csIHRoZSBgU1RPUGAgYXR0cmlidXRlIGluIGB0b2tlbnNgIGlzIHRoZSBjbHVlISBJbiBgZGVjb2RlX3NlcWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYEgzMjNfRVJST1JfU1RPUGAgaWYgaXQgZW5jb3VudGVycyBhIGZpZWxkIG1hcmtlZCB3aXRoIGBTVE9QYC4KCmBgYGMKCQlmb3IgKGkgPSBvcHQgPSAwLCBzb24gPSBmLSZndDtmaWVsZHM7IGkgJmx0OyBmLSZndDtsYjsgaSYjNDM7JiM0MzssIHNvbiYjNDM7JiM0MzspIHsKCQkJaWYgKHNvbi0mZ3Q7YXR0ciAmYW1wOyBTVE9QKSB7CgkJCQlQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgKGxldmVsICYjNDM7IDEpICogVEFCX1NJWkUsICYjMzQ7ICYjMzQ7LAoJCQkJICAgICAgc29uLSZndDtuYW1lKTsKCQkJCXJldHVybiBIMzIzX0VSUk9SX1NUT1A7CgkJCX0KYGBgCgpIb2xkIG9uLi4uIGB0b2tlbnNgICppc24mIzM5O3QqIGEgcm9vdCBjb21wb25lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBpcyBhY3R1YWxseSB1c2VkLgoKTGV0JiMzOTtzIGNoZWNrIGBmLSZndDtsYmAgZm9yIGBSZWdpc3RyYXRpb25SZXF1ZXN0YC4KCmBgYGMKe0ZOQU1FKCYjMzQ7UmVnaXN0cmF0aW9uUmVxdWVzdCYjMzQ7KSBTRVEsIDUsIDEyLCAyNywgREVDT0RFIHwgRVhULApgYGAKCldhaXQsIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBpdHNlbGYgaXNuJiMzOTt0IGEgZGlyZWN0IGZpZWxkOyBpdCYjMzk7cyBhICpzZXF1ZW5jZSogb2YgZmllbGRzLiBSaWdodCwgSSByZW1lbWJlciBub3chIFdoZXJlIGlzIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBkZWZpbmVkPwoKYGBgYwpzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1Jhc01lc3NhZ2VbXSA9IHsJLyogQ0hPSUNFICovCgkvLyAuLi4KCXtGTkFNRSgmIzM0O3JlZ2lzdHJhdGlvblJlcXVlc3QmIzM0OykgU0VRLCAzLCAxMCwgMzEsIERFQ09ERSB8IEVYVCwKCSBvZmZzZXRvZihSYXNNZXNzYWdlLCByZWdpc3RyYXRpb25SZXF1ZXN0KSwgX1JlZ2lzdHJhdGlvblJlcXVlc3R9LApgYGAKCkFoISBTbywgYFJlZ2lzdHJhdGlvblJlcXVlc3RgIGlzIHBhcnQgb2YgdGhlIGBfUmFzTWVzc2FnZWAgQ0hPSUNFLiAgSXRzIGBmLSZndDtsYmAgaXMgMTAsIHdoaWNoIG1lYW5zIHRoZSByb290IGNvbXBvbmVudHMgYXJlOgoKMS4gYHJlcXVlc3RTZXFOdW1gCjIuIGBwcm90b2NvbElkZW50aWZpZXJgCjMuIGBub25TdGFuZGFyZERhdGFgCjQuIGBkaXNjb3ZlcnlDb21wbGV0ZWAKNS4gYGNhbGxTaWduYWxBZGRyZXNzYAo2LiBgcmFzQWRkcmVzc2AKNy4gYHRlcm1pbmFsVHlwZWAKOC4gYHRlcm1pbmFsQWxpYXNgCjkuIGBnYXRla2VlcGVySWRlbnRpZmllcmAKMTAuIGBlbmRwb2ludFZlbmRvcmAKClRoZSAxMXRoIGZpZWxkIGlzIGBhbHRlcm5hdGVFbmRwb2ludHNgLCBhbmQgdGhlIDEydGggaXMgYHRpbWVUb0xpdmVgLiAgQWhhISBgdGltZVRvTGl2ZWAgaXMgYW4gKkVYVEVOU0lPTiogY29tcG9uZW50LiAgVGhpcyBjaGFuZ2VzIHRoaW5ncy4gIEkgbmVlZCB0byByZXZpZXcgYGRlY29kZV9zZXFgJiMzOTtzIGhhbmRsaW5nIG9mIGV4dGVuc2lvbnMuLi4gdGhpcyBpcyBhIHBvdGVudGlhbCBpc3N1ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFxuIDU1MTpcdFx0XHQvKiBEZWNvZGUgKi9cbiA1NTI6XHRcdFx0aWYgKHNvbi1cdTAwM2VhdHRyIFx1MDAyNiBPUEVOKSB7XHQvKiBPcGVuIGZpZWxkICovXG4gNTUzOlx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDU1NDpcdFx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNTU1Olx0XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gNTU2Olx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4gNTU3Olx0XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1NTg6XHRcdFx0XHRpZiAoIWJhc2UgfHwgIShzb24tXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1xuIDU1OTpcdFx0XHRcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIChsZXZlbCAmIzQzOyAxKSAqIFRBQl9TSVpFLFxuIDU2MDpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7IFwmIzM0Oywgc29uLVx1MDAzZW5hbWUpO1xuIDU2MTpcdFx0XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gNTYyOlx0XHRcdFx0XHRjb250aW51ZTtcbiA1NjM6XHRcdFx0XHR9XG4gNTY0Olx0XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDU2NTpcdFxuIDU2NjpcdFx0XHRcdC8qIERlY29kZSAqL1xuIDU2NzpcdFx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXG4gNTY4Olx0XHRcdFx0XHRcdFx0XHQgIGxldmVsICYjNDM7IDEpKSBcdTAwM2NcbiA1Njk6XHRcdFx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuIDU3MDpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbiA1NzE6XHRcbiA1NzI6XHRcdFx0XHRicy1cdTAwM2VjdXIgPSBiZWcgJiM0MzsgbGVuO1xuIDU3MzpcdFx0XHRcdGJzLVx1MDAzZWJpdCA9IDA7XG4gNTc0Olx0XHRcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxuIDU3NTpcdFx0XHRcdFx0XHRcdFx0IGxldmVsICYjNDM7IDEpKSBcdTAwM2NcbiA1NzY6XHRcdFx0XHQgICBIMzIzX0VSUk9SX05PTkUpXG4gNTc3Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA1Nzg6XHRcdH1cbiA1Nzk6XHRcbiA1ODA6XHRcdC8qIE5vIGV4dGVuc2lvbj8gKi9cbiA1ODE6XHRcdGlmICghZXh0KVxuIDU4MjpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDU4MzpcdFxuIDU4NDpcdFx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXG4gNTg1Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXG4gNTg2Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDU4NzpcdFx0Ym1wMl9sZW4gPSBnZXRfYml0cyhicywgNykgJiM0MzsgMTtcbiA1ODg6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBibXAyX2xlbikpXG4gNTg5Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5MTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRlY29kaW5nIEV4dGVuc2lvbiBDb21wb25lbnRzKioKCkFoLCByaWdodCwgYHRpbWVUb0xpdmVgLiBUaGF0JiMzOTtzIGFuICpleHRlbnNpb24gY29tcG9uZW50Ki4gTGV0JiMzOTtzIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgdHlwaWNhbGx5IGhhbmRsZWQgaW4gdGhlIGRlY29kaW5nIHByb2Nlc3MuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgc3RlcHMgaW52b2x2ZWQgaW4gcGFyc2luZyBleHRlbnNpb24gY29tcG9uZW50cyDigJMgYXJlIHdlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUsIGRlZmluZWQgd2l0aGluIGEgc3RhbmRhcmQgb3IgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBvciBpcyB0aGlzIHNvbWV0aGluZyBtb3JlIGN1c3RvbT8gSSBuZWVkIHRvIGtub3cgdGhlIHByb3BlciBwcm9jZXNzIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBkZWNvZGVkIGNvcnJlY3RseS4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cywgdGhlIGZsYWdzLCB0aGUgcGF5bG9hZCBmb3JtYXQsIGFsbCB0aGF0IGpheno/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBkZWFsIHdpdGggdGhlIHN0cnVjdHVyZSBhbmQgY29udGV4dCBvZiB0aGlzIGB0aW1lVG9MaXZlYCBlbGVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0XHRpZiAoYm1wMl9sZW4gXHUwMDNlIDMyKVxuIDU5MTpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9SQU5HRTtcbiA1OTI6XHRcdGJtcDIgPSBnZXRfYml0bWFwKGJzLCBibXAyX2xlbik7XG4gNTkzOlx0XHRibXAgfD0gYm1wMiBcdTAwM2VcdTAwM2UgZi1cdTAwM2VzejtcbiA1OTQ6XHRcdGlmIChiYXNlKVxuIDU5NTpcdFx0XHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSBibXA7XG4gNTk2Olx0XHRCWVRFX0FMSUdOKGJzKTtcbiA1OTc6XHRcbiA1OTg6XHRcdC8qIERlY29kZSB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudHMgKi9cbiA1OTk6XHRcdGZvciAob3B0ID0gMDsgb3B0IFx1MDAzYyBibXAyX2xlbjsgb3B0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzssIHNvbiYjNDM7JiM0MzspIHtcbiA2MDA6XHRcdFx0LyogQ2hlY2sgUmFuZ2UgKi9cbiA2MDE6XHRcdFx0aWYgKGkgXHUwMDNlPSBmLVx1MDAzZXViKSB7XHQvKiBOZXdlciBWZXJzaW9uPyAqL1xuIDYwMjpcdFx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiA2MDM6XHRcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDYwNDpcdFx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xuIDYwNTpcdFx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuIDYwNjpcdFx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNjA3Olx0XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gNjA4Olx0XHRcdFx0Y29udGludWU7XG4gNjA5Olx0XHRcdH1cbiA2MTA6XHRcbiA2MTE6XHRcdFx0aWYgKHNvbi1cdTAwM2VhdHRyIFx1MDAyNiBTVE9QKSB7XG4gNjEyOlx0XHRcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIChsZXZlbCAmIzQzOyAxKSAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LFxuIDYxMzpcdFx0XHRcdCAgICAgIHNvbi1cdTAwM2VuYW1lKTtcbiA2MTQ6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9TVE9QO1xuIDYxNTpcdFx0XHR9XG4gNjE2Olx0XG4gNjE3Olx0XHRcdGlmICghKCgweDgwMDAwMDAwIFx1MDAzZVx1MDAzZSBvcHQpIFx1MDAyNiBibXAyKSlcdC8qIE5vdCBwcmVzZW50ICovXG4gNjE4Olx0XHRcdFx0Y29udGludWU7XG4gNjE5Olx0XG4gNjIwOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiA2MjE6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA2MjI6XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gNjIzOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuIDYyNDpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDYyNTpcdFx0XHRpZiAoIWJhc2UgfHwgIShzb24tXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1xuIDYyNjpcdFx0XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCAobGV2ZWwgJiM0MzsgMSkgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OyxcbiA2Mjc6XHRcdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG4gNjI4Olx0XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gNjI5Olx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTgxNgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWNvZGluZyBMb2dpYyBEZWVwIERpdmUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgTG9va2luZyBhdCB0aGlzIGV4dGVuc2lvbiBjb21wb25lbnQgZGVjb2RpbmcsIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBjcml0aWNhbCBoZXJlLiAgSSBzZWUgdGhlIGNvZGUmIzM5O3MgcGF0dGVybjogd2UmIzM5O3JlIGNoZWNraW5nIGZvciBlcnJvcnMgd2l0aCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAsIHRoZW4gZ2V0dGluZyB0aGUgbGVuZ3RoIHdpdGggYGdldF9sZW4oYnMpYC4gV2Ugc2tpcCB0aGUgZGVjb2RlIGlmIGBiYXNlYCBpcyBudWxsIG9yIGlmIHRoZSBgREVDT0RFYCBhdHRyaWJ1dGUgaXNuJiMzOTt0IHNldCwgdGhhdCYjMzk7cyBleHBlY3RlZC4gQnV0ICp0aGVuKiB0aGVyZSYjMzk7cyB0aGlzIGJpdC4uLiBgYmVnID0gYnMtJmd0O2N1cmAuIFdlIHNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uLCBgYnMtJmd0O2N1cmAuCgpBaCwgeWVzLCAqbm93KiBJIHNlZSBpdC4gVGhlIGNydWNpYWwgcGFydDogYGJzLSZndDtjdXJgIGlzIFJFU1RPUkVEIGFmdGVyIGRlY29kaW5nISBUaGUgbGluZSBgYnMtJmd0O2N1ciA9IGJlZyAmIzQzOyBsZW47YCBUaGF0JiMzOTtzIHRoZSBrZXkuCgpUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiBhIGxvd2VyLWxldmVsIGRlY29kZXIsIGxpa2UgYGRlY29kZV9pbnRgLCBpbnNpZGUgdGhlIGBEZWNvZGVyc2AgYXJyYXksIHdlcmUgdG8gc29tZWhvdyBhZHZhbmNlIGBicy0mZ3Q7Y3VyYCBiZXlvbmQgd2hhdCYjMzk7cyBleHBlY3RlZCDigJMgc2F5LCBieSBgMiAqIGxlbmAg4oCTICBgZGVjb2RlX3NlcWAgaXMgZ29pbmcgdG8gT1ZFUldSSVRFIGl0IHdpdGggdGhlICpjb3JyZWN0KiBwb3NpdGlvbiwgYGJlZyAmIzQzOyBsZW5gLiBXZSYjMzk7cmUgdXNpbmcgYGJlZyAmIzQzOyBsZW5gIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBzdGFydGluZyBwb2ludCBvZiB0aGUgY3VycmVudCBleHRlbnNpb24gcGx1cyB0aGUgZXhwZWN0ZWQgbGVuZ3RoIHdlIGdldCBmcm9tIHRoZSBoZWFkZXIhICAKClNvLCB0aGUgdmFyaWFibGUgYGxlbmAgaXMgdGhlICpsZW5ndGggb2YgdGhlIGVudGlyZSBleHRlbnNpb24gY29tcG9uZW50KiBhcyByZWFkIHVzaW5nIGBnZXRfbGVuKGJzKWAuIFRoZSB2YWx1ZSBvZiBgYnMtJmd0O2N1cmAgaXMgc2V0IHRvIGBiZWcgJiM0MzsgbGVuYCwgd2hpY2ggaXMgZXhhY3RseSB0aGUgcG9zaXRpb24gd2UgKnNob3VsZCogYmUgYXQgYWZ0ZXIgZGVjb2RpbmcgdGhlIGV4dGVuc2lvbiBjb21wb25lbnQsIG5vIG1hdHRlciB3aGF0IGludGVybmFsIGNoYW5nZXMgYGRlY29kZV9pbnRgIG1hZGUgdG8gdGhlIGBicy0mZ3Q7Y3VyYCBwb2ludGVyIQoKTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQsIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0XHRcdH1cbiA2MzE6XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDYzMjpcdFxuIDYzMzpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxuIDYzNDpcdFx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuIDYzNTpcdFx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuIDYzNjpcdFx0XHRcdHJldHVybiBlcnI7XG4gNjM3Olx0XG4gNjM4Olx0XHRcdGJzLVx1MDAzZWN1ciA9IGJlZyAmIzQzOyBsZW47XG4gNjM5Olx0XHRcdGJzLVx1MDAzZWJpdCA9IDA7XG4gNjQwOlx0XHR9XG4gNjQxOlx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDY0MjpcdH1cbiA2NDM6XHRcbiA2NDQ6XHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gNjQ1Olx0ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDY0NjpcdHtcbiA2NDc6XHRcdHVuc2lnbmVkIGludCBjb3VudCwgZWZmZWN0aXZlX2NvdW50ID0gMCwgaSwgbGVuID0gMDtcbiA2NDg6XHRcdGludCBlcnI7XG4gNjQ5Olx0XHRjb25zdCBzdHJ1Y3QgZmllbGRfdCAqc29uO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4OTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIERvdWJsZSBBZHZhbmNlIGluIGBkZWNvZGVfaW50YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGlzIGBkZWNvZGVfaW50YCBidWcgaW1wYWN0cyBwYXJzaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgZG91YmxlIGFkdmFuY2Ugb2YgYGJzLSZndDtjdXJgLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBiZWNhdXNlIGBicy0mZ3Q7Y3VyYCB3YXMgb3ZlcndyaXR0ZW4gaW4gdGhlIGBkZWNvZGVfc2VxYCB0aGF0IGNhbGxlZCBgZGVjb2RlX2ludGAsIHRoZSBpc3N1ZSB3YXMgY29tcGxldGVseSBuZWdhdGVkLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBleGlzdHMgZHVlIHRvIHRoaXMgcG90ZW50aWFsIGJ1Zy4KClRoZSBrZXkgaXMgZmlndXJpbmcgb3V0ICp3aGVyZSogYGRlY29kZV9pbnRgIGlzIGNhbGxlZC4gTGV0JiMzOTtzIGxvb2sgYXQgYFJlZ2lzdHJhdGlvblJlcXVlc3RgLiBUaGUgc3RydWN0dXJlIGRlZmluaXRpb24gc2hvd3MgdGhhdCBgdGltZVRvTGl2ZWAgaXMgYW4gYElOVGAgYW5kIG1hcmtlZCBhcyBgREVDT0RFYC4gVGhlIGZpZWxkIGluZGV4IGBmLSZndDtsYmAgaXMgMTIsIHNvIHRoZSBmaXJzdCAxMiBmaWVsZHMgYXJlIHJvb3QgY29tcG9uZW50cy4gQ291bnRpbmcgdGhlIHJvb3QgY29tcG9uZW50cywgYHRpbWVUb0xpdmVgIElTIHRoZSAxMnRoIGZpZWxkLCBjb25maXJtaW5nIGl0IGFzIGEgcm9vdCBlbGVtZW50LiBUaGlzIG1lYW5zIGB0aW1lVG9MaXZlYCBpcyBkZWNvZGVkIGluIHRoZSBwcmltYXJ5IGxvb3AuIFNpbmNlIGB0aW1lVG9MaXZlYCBpcyBOT1QgYE9QRU5gLCBpdCBleGVjdXRlcyB0aGUgYGVsc2UgaWZgIHBhdGggYW5kIGNhbGxzIGBEZWNvZGVyc1tzb24tJmd0O3R5cGVdYC4gSXQgd2lsbCBjYWxsIGBkZWNvZGVfaW50YC4gVGhpcyBpcyBhIGNvbmNlcm4gYmVjYXVzZSB0aGUgY29kZSBkb2VzIE5PVCBvdmVyd3JpdGUgYGJzLSZndDtjdXJgLCBzbyBgZGVjb2RlX2ludGAgKldJTEwqIGFmZmVjdCB0aGUgcG9zaXRpb24gb2YgdGhlIGJpdHN0cmVhbSBwb2ludGVyLgoKVGhlICpuZXh0KiBmaWVsZCwgYWZ0ZXIgYHRpbWVUb0xpdmVgLCBpcyBgdG9rZW5zYCwgd2hpY2ggaXMgYFNUT1BgLiBGb3J0dW5hdGVseSwgc2luY2UgYGYtJmd0O2xiYCBpcyAxMiwgdGhlIGZpcnN0IGxvb3Agb25seSBnb2VzIHVwIHRvIHRoZSAxMnRoIGZpZWxkLCBhbmQgYHRpbWVUb0xpdmVgIGlzIHRoZSBsYXN0IG9uZS4gU28sIHRoZSBmaXJzdCBsb29wIGNvbXBsZXRlcy4KCkFmdGVyIHRoZSBmaXJzdCBsb29wLCB0aGUgY29kZSBjaGVja3MgdGhlIGBleHRgIGZsYWcuIElmIGl0JiMzOTtzIHRydWUsIGl0IGdldHMgdGhlIGV4dGVuc2lvbiBiaXRtYXAgbGVuZ3RoIHVzaW5nIGBnZXRfYml0cyhicywgNylgLiBDcml0aWNhbGx5LCBpdCBjaGVja3MgdGhlIGJvdW5kYXJ5ICpiZWZvcmUqIGNhbGxpbmcgYGdldF9iaXRzYCB1c2luZyBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuIFNvLCBpZiBgYnMtJmd0O2N1cmAgd2FzIGFkdmFuY2VkIHBhc3QgdGhlIGBicy0mZ3Q7ZW5kYCwgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIHdpbGwgZGV0ZWN0IGl0IGFuZCByZXR1cm4gYW4gZXJyb3IgYmVmb3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcHJldmVudHMgdGhlIHByaW1hcnkgYnVnLgoKSG93ZXZlciwgaWYgdGhlIGRvdWJsZSBhZHZhbmNlIGJ5IGBkZWNvZGVfaW50YCAqZG9lcyoga2VlcCBgYnMtJmd0O2N1cmAgd2l0aGluIGJvdW5kcywgYGdldF9iaXRzYCAqd2lsbCogcmVhZCBmcm9tIHRoZSBwYWNrZXQgYnVmZmVyLCBwb3RlbnRpYWxseSBza2lwcGluZyBieXRlcy4gVGhhdCB3b3VsZCBiZSBpbmNvcnJlY3QgcGFyc2luZywgYnV0IGl0IHdvbiYjMzk7dCBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVuIHRoZSBjb2RlIHByb2NlZWRzIHdpdGggcGFyc2luZyBleHRlbnNpb24gY29tcG9uZW50cy4KCkluIHRoZSBleHRlbnNpb24gY29tcG9uZW50IHByb2Nlc3NpbmcsIHRoZSBjb2RlIHJlYWRzIGBsZW4gPSBnZXRfbGVuKGJzKWAgYW5kIGFkdmFuY2VzIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW5gLiBJbiB0aGlzIHNjZW5hcmlvLCBpdCB3aWxsIHNpbXBseSBwYXJzZSBnYXJiYWdlLCBidXQgbm8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpTbywgdGhlIGlzc3VlIGlzbiYjMzk7dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByb2JsZW0gaXMgaW5jb3JyZWN0IHBhcnNpbmcgaWYgdGhlIHBvaW50ZXIgYWR2YW5jZXMgaW5jb3JyZWN0bHkgKmJ1dCByZW1haW5zIHdpdGhpbiBib3VuZHMqLgoKTGV0JiMzOTtzIGxvb2sgYXQgYW5vdGhlciBleGFtcGxlOiBgUmVnaXN0cmF0aW9uQ29uZmlybWAuIFRoZSBmaXJzdCA3IGZpZWxkcyBhcmUgcm9vdCBjb21wb25lbnRzLCBgdGltZVRvTGl2ZWAgaXMgdGhlIDl0aC4gU28sIGB0aW1lVG9MaXZlYCBpcyBub3cgYW4gZXh0ZW5zaW9uIGNvbXBvbmVudCwgYW5kIHdoZW4gdGhhdCBpcyB0aGUgY2FzZSwgdGhlIGNhbGwgdG8gYGRlY29kZV9zZXFgIHJlc2V0cyBgYnMtJmd0O2N1cmAgKmFmdGVyKiBgZGVjb2RlX2ludGAgaXMgY2FsbGVkLCBwcmV2ZW50aW5nIGZ1cnRoZXIgcGFyc2luZyBlcnJvcnMuIFRoaXMgbmVnYXRlcyB0aGUgZG91YmxlIGFkdmFuY2UuCgpMb29raW5nIGJhY2ssIGFuZCBhZnRlciBncmVwcGluZyB0aGUgYElOVC4qREVDT0RFYCBleHByZXNzaW9ucywgYHRpbWVUb0xpdmVgIGlzIHRoZSBvbmx5IGZpZWxkIG9mIHRoYXQgdHlwZS4gVGhpcyByZWR1Y2VzIHRoZSBzdXJmYWNlIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTlQuKkRFQ09ERSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RbXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTMtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlRW5kcG9pbnRzXCYjMzQ7KSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NDpcdHtGTkFNRShcJiMzNDt0aW1lVG9MaXZlXCYjMzQ7KSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTk1LVx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHRpbWVUb0xpdmUpLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlR2F0ZWtlZXBlclwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0Ny1cdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzcxMQoJCQkJCQkJb3V0cHV0OiAyODcKCQkJCQkJCXRob3VnaHRzOiAxMTI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipIYXJtbGVzcyBEb3VibGUgQWR2YW5jZSBpbiBILjMyMyBEZWNvZGVyOiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBkZWFsOiBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHRoYXQgc3VwcG9zZWRseSBmaXhlcyBhIGJ1ZyBpbiB0aGUgSC4zMjMgZGVjb2Rlci4gVGhlIGNvcmUgaXNzdWUgaXMgYSBkb3VibGUgYWR2YW5jZSBvZiB0aGUgYml0c3RyZWFtIHBvaW50ZXIgKGBicy0mZ3Q7Y3VyYCkgd2l0aGluIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgaGFwcGVucyB3aGVuIGRlY29kaW5nIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgKHdoaWNoLCBhcyBpdCB0dXJucyBvdXQsIGlzIHRoZSBPTkxZIElOVCBmaWVsZCB3aXRoIGBERUNPREVgIGFuZCB0aGVyZWZvcmUgdGhlIG9ubHkgZmllbGQgdGhhdCB0cmlnZ2VycyB0aGlzIGxvZ2ljKSB3aGljaCBpcyBhbHdheXMgYW4gZXh0ZW5zaW9uIGNvbXBvbmVudC4gIAoKSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgbWF5YmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IGFmdGVyIGEgdGhvcm91Z2ggYW5hbHlzaXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGhhcm1sZXNzLiBIZXJlJiMzOTtzIHdoeToKCjEuICAqKkFsd2F5cyBSZXN0b3JlZDoqKiBCZWNhdXNlIGB0aW1lVG9MaXZlYCBpcyBhbiBleHRlbnNpb24gY29tcG9uZW50LCB0aGUgYGRlY29kZV9zZXFgIGZ1bmN0aW9uICh0aGUgY2FsbGVyKSAqYWx3YXlzKiByZXN0b3JlcyBgYnMtJmd0O2N1cmAgdG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uIGFmdGVyIGRlY29kaW5nIHRoZSBleHRlbnNpb24uIFRoaXMgZWZmZWN0aXZlbHkgdW5kb2VzIHRoZSBkb3VibGUgYWR2YW5jZSBjYXVzZWQgYnkgYGRlY29kZV9pbnRgLiBUaGUgYGxlbmAgb2YgdGhlIGludGVnZXIgcmVhZCBpbiBgZGVjb2RlX2ludGAgaXMgZGlmZmVyZW50IGZyb20gdGhlIGBsZW5gIG9mIHRoZSBleHRlbnNpb24gY29tcG9uZW50IHJlYWQgYnkgYGRlY29kZV9zZXFgLiBUaGUgZG91YmxlIGFkdmFuY2UgKmNhbiogYmUgZnJvbSBgYmVnICYjNDM7IGxlbl9pbnRgIHRvIGBiZWcgJiM0MzsgbGVuX2ludCAqIDJgLCBidXQgdGhlIGBkZWNvZGVfc2VxYCByZXNldHMgaXQgdG8gYGJlZyAmIzQzOyBsZW5fZXh0YC4KCjIuICAqKk5vIE91dC1vZi1Cb3VuZHMgQWNjZXNzOioqIFdoaWxlIHRoZSBkb3VibGUgYWR2YW5jZSBtaWdodCBzZWVtIGNvbmNlcm5pbmcsIHRoZSBhY3R1YWwgZGF0YSByZWFkIGhhcHBlbnMgKmJlZm9yZSogdGhlIHNlY29uZCBhZHZhbmNlIG9mIHRoZSBwb2ludGVyLiBGdXJ0aGVybW9yZSwgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYGRlY29kZV9pbnRgIHBlcmZvcm1zIGJvdW5kcyBjaGVja3MsIHNvIGl0JiMzOTtzIGltcG9zc2libGUgdG8gY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGV2ZW4gaWYgdGhlIHBvaW50ZXIgaXMgYWR2YW5jZWQgYmV5b25kIGBicy0mZ3Q7ZW5kYC4gVGhlIGV4dGVuc2lvbiBjb21wb25lbnQmIzM5O3MgbGVuZ3RoIChyZWFkIGJ5IGBkZWNvZGVfc2VxYCB1c2luZyBgZ2V0X2xlbmApIGlzIGFsd2F5cyBjb3JyZWN0LiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoIHRoZSBkb3VibGUgcG9pbnRlciBhZHZhbmNlLgoKMy4gICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnk6KiogVGhlIGRvdWJsZSBhZHZhbmNlIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSXQgZG9lc24mIzM5O3QgY2F1c2UgdGhlIGNvZGUgdG8gYWNjZXNzIG1lbW9yeSBpdCBzaG91bGRuJiMzOTt0LCBvciB0byBza2lwIG92ZXIgbWVtb3J5IGJvdW5kYXJpZXMuIFRoZSBiaXRzdHJlYW0gcG9pbnRlciBpcyBzaW1wbHkgbW92ZWQgZm9yd2FyZCB0d2ljZSwgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVzZXQuIElmIHRoZSBleHRlbnNpb24gY29tcG9uZW50IGxlbmd0aCByZWFkIGJ5IGBkZWNvZGVfc2VxYCBoYXBwZW5zIHRvIGJlIHNob3J0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnRlZ2VyLCB0aGF0IGlzIGZpbmUuIFRoZSBvbmx5IHBvc3NpYmxlIG1hbGZvcm1hdGlvbiBpbiB0aGUgY29kZSBpcyBpZiB0aGUgY29kZSBhZHZhbmNlcyBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCwgYnV0IHRoZSBgYnMtJmd0O2N1cmAgcG9pbnRlciBkb2VzIG5vdCBnZXQgZGVyZWZlcmVuY2VkIHRvIGNhdXNlIGEgY3Jhc2guCgo0LiAgKipObyBPdGhlciBWdWxuZXJhYmlsaXRpZXM6KiogVGhpcyBjb2RlIGlzIGxpbWl0ZWQgdG8gYHRpbWVUb0xpdmVgLiBUaGUgcGFyc2luZyBvZiB0aGUgSC4zMjMgZGF0YSBzdHJlYW0gaXMgZml4ZWQsIHNvIHRoZXJlIGlzIG5vIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgYHRpbWVUb0xpdmVgIGNvdWxkIGhhdmUgYmVlbiBjb3JydXB0ZWQuCgpJbiBzdW1tYXJ5LCB0aGlzIGJ1ZyBpcyBhIHB1cmVseSBsb2dpY2FsIGVycm9yLiBJdCBoYXMgbm8gZWZmZWN0IG9uIHByb2dyYW0gYmVoYXZpb3IgYmVjYXVzZSB0aGUgYml0c3RyZWFtIHBvaW50ZXIgaXMgcmVzZXQgdG8gYSB2YWxpZCBsb2NhdGlvbi4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgdGhlcmUgZHVlIHRvIHN0YXRpYyBhbmFseXNpcyBvciBhIGNvZGUgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGJ1ZyBpbiBgZGVjb2RlX2ludGAgd2hlcmUgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGBicy1cdTAwM2VjdXJgIGlzIGFkdmFuY2VkIHR3aWNlIGJ5IGBsZW5gIHdoZW4gZGVjb2RpbmcgYW4gaW50ZWdlciBmaWVsZCB3aXRoIHRoZSBgREVDT0RFYCBhdHRyaWJ1dGUgKHdoaWNoIG9ubHkgYXBwbGllcyB0byB0aGUgYHRpbWVUb0xpdmVgIGZpZWxkIGluIHRoZSBILjMyMyBBU04uMSBzY2hlbWEpLiBIb3dldmVyLCBiZWNhdXNlIGB0aW1lVG9MaXZlYCBpcyBhbHdheXMgYW4gZXh0ZW5zaW9uIGNvbXBvbmVudCBpbiBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgYW5kIGBSZWdpc3RyYXRpb25Db25maXJtYCwgdGhlIGNhbGxlciBgZGVjb2RlX3NlcWAgc2F2ZXMgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGJlZm9yZSBkZWNvZGluZyB0aGUgY29tcG9uZW50IGFuZCB1bmNvbmRpdGlvbmFsbHkgcmVzdG9yZXMgaXQgdG8gYGJlZyAmIzQzOyBsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbnNpb24gY29tcG9uZW50KSBhZnRlcndhcmRzLiBBcyBhIHJlc3VsdCwgdGhlIGRvdWJsZSBhZHZhbmNlIGluIGBkZWNvZGVfaW50YCBpcyBpbW1lZGlhdGVseSB1bmRvbmUgYnkgdGhlIGNhbGxlciBhbmQgaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHN1YnNlcXVlbnQgcGFyc2luZy5cblxuRnVydGhlcm1vcmUsIHRoZSBhY3R1YWwgbWVtb3J5IHJlYWQgaW4gYGdldF91aW50YCBvY2N1cnMgYmVmb3JlIHRoZSBlcnJvbmVvdXMgc2Vjb25kIGFkdmFuY2UgYW5kIGlzIHByb3Blcmx5IGJvdW5kcy1jaGVja2VkIGJ5IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBjYXVzZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQsIGxlYWtlZCwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGJ1ZyBpbiBgZGVjb2RlX2ludGAgd2hlcmUgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGBicy1cdTAwM2VjdXJgIGlzIGFkdmFuY2VkIHR3aWNlIGJ5IGBsZW5gIHdoZW4gZGVjb2RpbmcgYW4gaW50ZWdlciBmaWVsZCB3aXRoIHRoZSBgREVDT0RFYCBhdHRyaWJ1dGUgKHdoaWNoIG9ubHkgYXBwbGllcyB0byB0aGUgYHRpbWVUb0xpdmVgIGZpZWxkIGluIHRoZSBILjMyMyBBU04uMSBzY2hlbWEpLiBIb3dldmVyLCBiZWNhdXNlIGB0aW1lVG9MaXZlYCBpcyBhbHdheXMgYW4gZXh0ZW5zaW9uIGNvbXBvbmVudCBpbiBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgYW5kIGBSZWdpc3RyYXRpb25Db25maXJtYCwgdGhlIGNhbGxlciBgZGVjb2RlX3NlcWAgc2F2ZXMgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGJlZm9yZSBkZWNvZGluZyB0aGUgY29tcG9uZW50IGFuZCB1bmNvbmRpdGlvbmFsbHkgcmVzdG9yZXMgaXQgdG8gYGJlZyAmIzQzOyBsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbnNpb24gY29tcG9uZW50KSBhZnRlcndhcmRzLiBBcyBhIHJlc3VsdCwgdGhlIGRvdWJsZSBhZHZhbmNlIGluIGBkZWNvZGVfaW50YCBpcyBpbW1lZGlhdGVseSB1bmRvbmUgYnkgdGhlIGNhbGxlciBhbmQgaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHN1YnNlcXVlbnQgcGFyc2luZy5cblxuRnVydGhlcm1vcmUsIHRoZSBhY3R1YWwgbWVtb3J5IHJlYWQgaW4gYGdldF91aW50YCBvY2N1cnMgYmVmb3JlIHRoZSBlcnJvbmVvdXMgc2Vjb25kIGFkdmFuY2UgYW5kIGlzIHByb3Blcmx5IGJvdW5kcy1jaGVja2VkIGJ5IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBjYXVzZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQsIGxlYWtlZCwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMDo0NC4wNjUxNzk5NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg4MzQ2NTIyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGRlY29kZV9pbnRgIHdoZXJlIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBgYnMtXFx1MDAzZWN1cmAgaXMgYWR2YW5jZWQgdHdpY2UgYnkgYGxlbmAgd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGggdGhlIGBERUNPREVgIGF0dHJpYnV0ZSAod2hpY2ggb25seSBhcHBsaWVzIHRvIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgaW4gdGhlIEguMzIzIEFTTi4xIHNjaGVtYSkuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpbWVUb0xpdmVgIGlzIGFsd2F5cyBhbiBleHRlbnNpb24gY29tcG9uZW50IGluIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLCB0aGUgY2FsbGVyIGBkZWNvZGVfc2VxYCBzYXZlcyB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYmVmb3JlIGRlY29kaW5nIHRoZSBjb21wb25lbnQgYW5kIHVuY29uZGl0aW9uYWxseSByZXN0b3JlcyBpdCB0byBgYmVnICsgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCkgYWZ0ZXJ3YXJkcy4gQXMgYSByZXN1bHQsIHRoZSBkb3VibGUgYWR2YW5jZSBpbiBgZGVjb2RlX2ludGAgaXMgaW1tZWRpYXRlbHkgdW5kb25lIGJ5IHRoZSBjYWxsZXIgYW5kIGhhcyBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiBzdWJzZXF1ZW50IHBhcnNpbmcuXFxuXFxuRnVydGhlcm1vcmUsIHRoZSBhY3R1YWwgbWVtb3J5IHJlYWQgaW4gYGdldF91aW50YCBvY2N1cnMgYmVmb3JlIHRoZSBlcnJvbmVvdXMgc2Vjb25kIGFkdmFuY2UgYW5kIGlzIHByb3Blcmx5IGJvdW5kcy1jaGVja2VkIGJ5IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBjYXVzZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQsIGxlYWtlZCwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBU04uMSBkZWNvZGVyIGZvciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIHdoZXJlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHdhcyBpbmNvcnJlY3RseSBhZHZhbmNlZCB0d2ljZSB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyB3aGVuIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NDQuMDY1MTg5NDAxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU0NTQyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2NkYTQ1ZWFkNzZhNTRmZTE1NmU3OWI5NzhiZWU3OGE0OTQyYWMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjMwOjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5hNTEyNzVjYzRkMGY2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG5AQCAtMzM2LDggKzMzNiw5IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVxcdTAwM2VsYjtcXG4gXFx0XFx0XFx0UFJJTlQoXFxcIiA9ICV1XFxcIiwgdik7XFxuIFxcdFxcdFxcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cXHUwMDNlb2Zmc2V0KSkgPSB2O1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVU5DTzpcXG4gXFx0XFx0QllURV9BTElHTihicyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMwOjQ0LjY4MTcxMDY3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMzQ5ODY5NjA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwiRGVjb2RlUTkzMVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBU04uMSBkZWNvZGVyIGZvciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIHdoZXJlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHdhcyBpbmNvcnJlY3RseSBhZHZhbmNlZCB0d2ljZSB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyB3aGVuIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmNjZGE0NWVhZDc2YTU0ZmUxNTZlNzliOTc4YmVlNzhhNDk0MmFjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjMwOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuQEAgLTMzNiw4ICszMzYsOSBAQCBzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVx1MDAzZWxiO1xuIFx0XHRcdFBSSU5UKFwiID0gJXVcIiwgdik7XG4gXHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicy1cdTAwM2VjdXIgKz0gbGVuO1xuIFx0XHR9XG4tXHRcdGJzLVx1MDAzZWN1ciArPSBsZW47XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBVTkNPOlxuIFx0XHRCWVRFX0FMSUdOKGJzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMwOjQ0LjY4MTcxMjUyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjYxMDM4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBILjMyMyBBU04uMSBEZWNvZGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gSXQgc2VlbXMgdGhleSd2ZSBtb2RpZmllZCB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uLiBMZXQncyBkaXZlIGluLlxuXG5SaWdodCwgSSBzZWUgdGhlIGRpZmYuIFRoZXkndmUgY2hhbmdlZCB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uJ3MgbG9naWMuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGBicy1cdTAwM2VjdXIgKz0gbGVuYCB1bmNvbmRpdGlvbmFsbHkgZm9sbG93aW5nIHRoZSBgaWYgKGJhc2UpYCBibG9jay4gTm93LCB0aGV5J3ZlIG1vdmVkIHRoYXQgaW5jcmVtZW50IHdpdGhpbiBhbiBgZWxzZWAgY2xhdXNlLiBUaGV5IGFkZGVkIGFuIGVsc2UgYmxvY2ssIGNvbnRhaW5pbmcgYGJzLVx1MDAzZWN1ciArPSBsZW47YC4gVGhpcyBtZWFucyBpZiBgYmFzZWAgaXMgbnVsbCwgdGhlIGNvZGUgd291bGQgYWR2YW5jZSB0aGUgYml0c3RyZWFtIGN1cnNvciAoYGJzLVx1MDAzZWN1cmApIGJ5IGBsZW5gICpvbmx5KiB3aXRoaW4gdGhlIGBlbHNlYCBibG9jay4gSW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG9yaWdpbmFsIGxvZ2ljLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoaXMgYGlmIChiYXNlKWAgY2hlY2suIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkZWNvZGVfaW50YCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBiYXNlYCBtaWdodCBiZSBudWxsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2h5IHRoZSB1bmNvbmRpdGlvbmFsIGluY3JlbWVudCB3YXMgcHJvYmxlbWF0aWMuIFdoYXQgc2NlbmFyaW9zIGFyZSB3ZSBjb3ZlcmluZyBoZXJlPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgYmVpbmcgYWRkcmVzc2VkLCBvciBpcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uP1xuXG5UaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGUgY3Vyc29yIHdhcyBiZWluZyBhZHZhbmNlZCBldmVuIGlmIHRoZXJlIHdhcyBubyBkYXRhIHRvIHdyaXRlLCBtZWFuaW5nIHdlJ2QgaW5jb3JyZWN0bHkgYWR2YW5jZSB0byB0aGUgbmV4dCBBU04uMSBmaWVsZCB0byBiZSBkZWNvZGVkLiBOb3cgaXQgKm9ubHkqIGFkdmFuY2VzIHRoZSBjdXJzb3IgaWYgdGhlcmUncyBubyBkZXN0aW5hdGlvbiBmb3IgdGhlIGRlY29kZWQgaW50ZWdlci4gVGhpcyBpcyBjZXJ0YWlubHkgYSBwb3RlbnRpYWwgYnVnIGZpeC4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NTAuMTQ3ODE5OTQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTg5MzY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNvZGVfaW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTExMD1zdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMTpzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTExMi1zdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEyMz1zdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjYtXFx0ZGVjb2RlX29pZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjc6XFx0ZGVjb2RlX2ludCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjgtXFx0ZGVjb2RlX2VudW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yOTM9c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMxMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMTI6c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTMtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NTAuMjUzNzIwMzk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjEwOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBILjMyMyBDb25udHJhY2sgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdvcmtzLiBLbm93aW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBBU04uMSBkZWNvZGluZyBwcm9jZXNzIGZvciBILjMyMyB0cmFmZmljLCB3aGljaCBpcyBjZW50cmFsIHRvIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgaGFuZGxlcyBILjMyMyBzaWduYWxpbmcuIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkncmUgcGFyc2luZyB0aGUgSC4yMjUuMCBhbmQgUkFTIG1lc3NhZ2VzIHRoYXQgY29udGFpbiB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gRGVjb2RpbmcgdGhlIGludGVnZXJzIGVmZmVjdGl2ZWx5LCBhbmQgaG93IHRob3NlIGludGVnZXJzIHJlbGF0ZSB0byB0aGUgZGF0YSwgaXMgb2Z0ZW4gdGhlIG1vc3QgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBwcm90b2NvbHMgYXJlIGltcGxlbWVudGVkLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBnb29kIEFTTi4xIGRlY29kZXJzIGNhbiBnZXQgcHJldHR5IGRlbnNlIHByZXR0eSBxdWlja2x5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEJFUi9ERVIgZW5jb2Rpbmcgc3BlY2lmaWNzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMDo1My45Mjk4MzQ4ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDYzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDMxMzpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzMTQ6XFx0e1xcbiAzMTU6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0c3dpdGNoIChmLVxcdTAwM2Vzeikge1xcbiAzMjA6XFx0XFx0Y2FzZSBCWVRFOlxcdFxcdC8qIFJhbmdlID09IDI1NiAqL1xcbiAzMjE6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMyMjpcXHRcXHRcXHRicy1cXHUwMDNlY3VyKys7XFxuIDMyMzpcXHRcXHRcXHRicmVhaztcXG4gMzI0OlxcdFxcdGNhc2UgV09SRDpcXHRcXHQvKiAyNTcgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gNjRLICovXFxuIDMyNTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzI2OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gMjtcXG4gMzI3OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0Y2FzZSBDT05TOlxcdFxcdC8qIDY0SyBcXHUwMDNjIFJhbmdlIFxcdTAwM2MgNEcgKi9cXG4gMzI5OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcXG4gMzMwOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzMzE6XFx0XFx0XFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICsgMTtcXG4gMzMyOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzNDpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzM1OlxcdFxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG4gMzM2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVxcdTAwM2VsYjtcXG4gMzM3OlxcdFxcdFxcdFxcdFBSSU5UKFxcXCIgPSAldVxcXCIsIHYpO1xcbiAzMzg6XFx0XFx0XFx0XFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpKSA9IHY7XFxuIDMzOTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNDA6XFx0XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSBsZW47XFxuIDM0MTpcXHRcXHRcXHR9XFxuIDM0MjpcXHRcXHRcXHRicmVhaztcXG4gMzQzOlxcdFxcdGNhc2UgVU5DTzpcXG4gMzQ0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzNDU6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM0NzpcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gMzQ4OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDk6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MDpcXHRcXHRkZWZhdWx0OlxcdFxcdC8qIDIgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gMjU1ICovXFxuIDM1MTpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNTI6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MzpcXHRcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdFBSSU5UKFxcXCJcXFxcblxcXCIpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM1ODpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzU5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM2MDpcXHR9XFxuIDM2MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NTMuOTMwMDg1MDE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MjQ2NDg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgZ2V0X3VpbnRgJ3MgQml0c3RyZWFtIE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gYGdldF91aW50KGJzLCBsZW4pYCBpcyBjbGVhcmx5IHVwZGF0aW5nIHRoZSBiaXRzdHJlYW0ncyBjdXJyZW50IHBvc2l0aW9uLCBgYnMtXHUwMDNlY3VyYC4gVGhhdCdzIHRoZSBleHBlY3RlZCBiZWhhdmlvciwgYnV0IEkgYWx3YXlzIGxpa2UgdG8gY29uZmlybSB0aGVzZSB0aGluZ3Mg4oCTIHBhcnRpY3VsYXJseSBpbiBiaXRzdHJlYW0gbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCB3aGVyZSBvZmYtYnktb25lIGVycm9ycyBjYW4gYmUgYnJ1dGFsLiBJdCdzIGVhc3kgdG8gZ2V0IGxvc3Qgd2l0aCBhbGwgdGhlc2UgYml0LWxldmVsIG9wZXJhdGlvbnMuIFNvLCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGdldF91aW50YCBpcyBhY3R1YWxseSBkb2luZyB3aGF0IEkgdGhpbmsgaXQncyBkb2luZyDigJMgdGhhdCBpdCdzIGNvcnJlY3RseSBhZHZhbmNpbmcgYGJzLVx1MDAzZWN1cmAgYnkgYGxlbmAgYml0cy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBib3VuZGFyeSBjb25kaXRpb25zLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiBhbiBpbnRlZ2VyIG92ZXJmbG93PyBEb2VzIGl0IGNvcnJlY3RseSBoYW5kbGUgdGhlIGVkZ2UgY2FzZXMgb2YgcmVhZGluZyBhIGZ1bGwgYnl0ZT8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nLiBBIHJvYnVzdCBiaXRzdHJlYW0gcmVhZGVyIGlzIGNydWNpYWwgZm9yIHJlbGlhYmlsaXR5LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NTYuODgyNTUyNTk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ4NjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzA6NTYuOTk4MDYyNzY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MzI0MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBjb2RlIGFuZCBmdWxseSBlbmdhZ2VkOlxuXG4qKkRpdmluZyBpbnRvIGBnZXRfdWludGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIGludG8gYGdldF91aW50YC4gSSd2ZSBiZWVuIG1lYW5pbmcgdG8gcmVhbGx5IG5haWwgZG93biBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgcGVyZmVjdCBtb21lbnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1heWJlIGV2ZW4gc3BvdCBhIGZldyBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uIGluIHRoZSBjb2RlLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgdW5zaWduZWQgaW50ZWdlcnMsIGFuZCB3aGF0IHRoZSBlZGdlIGNhc2VzIGFyZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgY2xldmVyIGJpdHdpc2Ugb3BlcmF0aW9ucyBpbiB0aGVyZSB0aGF0IEkgY2FuIGFsd2F5cyBhcHByZWNpYXRlLiBMZXQncyBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTkwLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTowMS4yNzEzMDgzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0dW5zaWduZWQgaW50IHYgPSAwO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRzd2l0Y2ggKGIpIHtcXG4gMjU1OlxcdFxcdGNhc2UgNDpcXG4gMjU2OlxcdFxcdFxcdHYgfD0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMjU3OlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDI1ODpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMjU5OlxcdFxcdGNhc2UgMzpcXG4gMjYwOlxcdFxcdFxcdHYgfD0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMjYxOlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDI2MjpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMjYzOlxcdFxcdGNhc2UgMjpcXG4gMjY0OlxcdFxcdFxcdHYgfD0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMjY1OlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDI2NjpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMjY3OlxcdFxcdGNhc2UgMTpcXG4gMjY4OlxcdFxcdFxcdHYgfD0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMjY5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTowMS4yNzE1NDQ0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEzNzg4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgQnVnIEZpeCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFllcywgYGdldF91aW50YCAqZG9lcyogYWR2YW5jZSBgYnMtXHUwMDNlY3VyYCBieSBgYmAsIHdoaWNoIGluIHRoaXMgY2FzZSwgYGJgIHJlcHJlc2VudHMgYGxlbmAuIFNvLCBiZWZvcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLCB0aGVyZSB3YXMgYSBjbGVhciBpc3N1ZS4gVGhlIGxpbmUgYGJzLVx1MDAzZWN1ciArPSBsZW5gIHdhcyBleGVjdXRlZCAqYWZ0ZXIqIGBnZXRfdWludGAgaGFkIGFscmVhZHkgYnVtcGVkIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gLiBUaGF0IG1lYW50IGBicy1cdTAwM2VjdXJgIHdhcyBnZXR0aW5nIGluY3JlbWVudGVkIGJ5IGAyICogbGVuYCBpbnN0ZWFkIG9mIGp1c3QgYGxlbmAhIFRoYXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZG91YmxlLWluY3JlbWVudCBidWcuIFRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBhIGJ1ZyBmaXguIEl0IGNvcnJlY3RzIHRoaXMgZXJyYW50IGRvdWJsZS1hZHZhbmNlIG9mIGBicy1cdTAwM2VjdXJgLlxuXG5UaGUgbG9jYXRpb24gaXMgY3J1Y2lhbCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gU28gd2UncmUgbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgY29tcG9uZW50IG9mIG5ldGZpbHRlci4gVGhpcyBidWcgaXMgbmV0d29yay1yZWFjaGFibGUgaWYgSC4zMjMgY29ubnRyYWNrIGlzIGVuYWJsZWQsIHNvIGl0IG5lZWRzIHRvIGJlIGFzc2Vzc2VkIGZvciBzZXZlcml0eSBiYXNlZCBvbiBob3cgY29tbW9uIEguMzIzIGlzIHN0aWxsIGluIHRoZSB3aWxkLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCBpbXBhY3QgdGhpcyBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTowNS43ODUzMzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc3Nzg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaDMyM19hc24xLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgKz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjA1Ljg1MTEyMjY2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg2NzIyNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgbmZfY29ubnRyYWNrX2gzMjMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIGBuZl9jb25udHJhY2tfaDMyM2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzLCBwcm9iYWJseSBsb29raW5nIGF0IGJvdGggdGhlIGN1cnJlbnQgcnVubmluZyBrZXJuZWwncyBjb25maWd1cmF0aW9uIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IGdlbmVyYXRlZCBpdC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB1c2UgYHpncmVwYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBlZmZpY2llbnRseSBzZWFyY2ggdGhyb3VnaCBhIHBvdGVudGlhbCBtb3VudGFpbiBvZiB0ZXh0IGZvciB0aGF0IHNwZWNpZmljIHN0cmluZy4gSSdsbCBiZSBsb29raW5nIGZvciBsaW5lcyB0aGF0IGRlZmluZSBgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzYCBhbmQgaXRzIHZhbHVl4oCUbGlrZWx5IGB5YCwgYG1gLCBvciBldmVuIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbi4gSWYgaXQncyBhIG1vZHVsZSAoYG1gKSwgdGhlbiB0aGUgYm9vdCBwcm9jZXNzIG1pZ2h0IGJlIGxvYWRpbmcgaXQgZGlyZWN0bHksIG9yIGRlcGVuZGluZyBvbiBhIGRlcGVuZGVuY3kuIElmIGl0J3MgYnVpbHQtaW4gKGB5YCkgdGhlbiBpdCB3b3VsZCBiZSBjb21waWxlZCBkaXJlY3RseS4gSWYgaXQncyBjb25kaXRpb25hbCwgdGhlbiBzb21lIG90aGVyIG9wdGlvbiBtaWdodCBpbmZsdWVuY2UgaXQuIEknbGwgYWxzbyBjaGVjayBhbnkgcmVsZXZhbnQgbW9kcHJvYmUgY29uZmlndXJhdGlvbnMgb3Igc2NyaXB0cy4gRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBjb25maWcgY2hlY2tzLCBsb29raW5nIGZvciBhIGNsZWFyIGRlZmluaXRpb24sIGFuZCB0aGVuIGlmIHRoYXQncyBub3QgeWllbGRpbmcgdGhlIGFuc3dlciwgaSdsbCBzdGFydCBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBtb2R1bGUgbG9hZGluZyBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTowOS40Mzc4NDk2M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MTc3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2gzMjNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgKz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTowOS41MTA1NzM1NjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwODc1NDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBrZWVwIGluIG1pbmQgaXMgYENPTkZJR19ORl9DT05OVFJBQ0tfSDMyM2AuIEFsd2F5cyBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSByZWxldmFudCBjb2RlIGV2ZW4gZ2V0cyBjb21waWxlZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhpcyBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIExldCdzIGRlbHZlIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBkZWNsYXJhdGlvbiBvZiBgTkZfQ09OTlRSQUNLX0gzMjNgLiBUaGlzIHdpbGwgY29uZmlybSBpdHMgZXhpc3RlbmNlIGFuZCBzaGVkIGxpZ2h0IG9uIGFueSBwcmVyZXF1aXNpdGUgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMToxMy4wMTkzMzE3NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTAzMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTIyNz1jb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjEzLjEwMDI0MTQ3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk5MDEzOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTkZfQ09OTlRSQUNLX0gzMjMgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NPTk5UUkFDS19IMzIzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIG5ldHdvcmsgZnVuY3Rpb24ncyByZWxpYW5jZSBvbiBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGBuZl9jb25udHJhY2tgIGl0c2VsZiwgb2J2aW91c2x5LCBhbmQgdGhlbiBmdXJ0aGVyIGRvd24gdGhlIHN0YWNrLiBJcyBpdCBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgYmFzZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgb3IgZG9lcyBpdCBkZXBlbmQgb24gb3RoZXIsIGludGVybWVkaWFyeSBtb2R1bGVzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGhlbHBlciBtb2R1bGVzIG9yIHByb3RvY29sIGZhbWlsaWVzIGl0IHJlcXVpcmVzLCBiZXlvbmQgdGhlIG9idmlvdXMgSVAgb3IgSVB2NiBzdXBwb3J0P1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbW9kdWxlIGxvYWRpbmcgb3JkZXIuIElmIGBORl9DT05OVFJBQ0tfSDMyM2AgZGVwZW5kcyBvbiBzb21ldGhpbmcgbGlrZSBhIHNwZWNpZmljIGNvZGVjIHN1cHBvcnQgbW9kdWxlLCB0aGF0IGxvYWRpbmcgb3JkZXIgYmVjb21lcyBjcml0aWNhbC4gQSBmYWlsdXJlIHRvIGxvYWQgdGhlIGRlcGVuZGVudCBtb2R1bGUgY2FuIGNhdXNlIGluc3RhYmlsaXR5IG9yIGV2ZW4gcHJldmVudCBgTkZfQ09OTlRSQUNLX0gzMjNgIGZyb20gZnVuY3Rpb25pbmcgY29ycmVjdGx5LCBvciB3b3JzZSwgY3Jhc2ggdGhlIHN5c3RlbS4gSSBhbHNvIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgbWlzc2luZyB0aG9zZSBkZXBlbmRlbmNpZXMuIElmIGEgbW9kdWxlIGNhbm5vdCBsb2FkLCBpcyB0aGVyZSBhIGdyYWNlZnVsIGRlZ3JhZGF0aW9uLCBvciBhIGhhcmQgZmFpbHVyZT8gQW5kIGlmIGdyYWNlZnVsLCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgbG9zdD9cblxuSSBhbHNvIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiBgTkZfQ09OTlRSQUNLX0gzMjNgLiBBcmUgdGhlcmUgYW55IGZpcmV3YWxsIHJ1bGVzIG9yIG5ldGZpbHRlciBleHRlbnNpb25zIHRoYXQgaG9vayBpbnRvIGl0PyBXaGF0IGhhcHBlbnMgaWYgYE5GX0NPTk5UUkFDS19IMzIzYCBpcyB1bmxvYWRlZCBvciBkaXNhYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIG1haW50ZW5hbmNlLCBhbmQgYXZvaWRpbmcgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIGZyb20gbW9kdWxlIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBgbW9kaW5mb2AgYW5kIHNpbWlsYXIgdG9vbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIGluY2x1ZGluZyBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFyZSBleHBvc2VkIGJ5IHRoZSBtb2R1bGUgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGdvZXMgYmV5b25kIHNpbXBsZSBtb2R1bGUgZGVwZW5kZW5jaWVzLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBtb2R1bGUgaW5mbHVlbmNlcyBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMToxNy43OTkyNTg4ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzk6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxuIDI0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gMjQxOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDI0MjpcXHRcXHRoZWxwXFxuIDI0MzpcXHRcXHQgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdFxcbiAyNDQ6XFx0XFx0ICBpbXBvcnRhbnQgVm9JUCBwcm90b2NvbHMsIGl0IGlzIHdpZGVseSB1c2VkIGJ5IHZvaWNlIGhhcmR3YXJlIGFuZFxcbiAyNDU6XFx0XFx0ICBzb2Z0d2FyZSBpbmNsdWRpbmcgdm9pY2UgZ2F0ZXdheXMsIElQIHBob25lcywgTmV0bWVldGluZywgT3BlblBob25lLFxcbiAyNDY6XFx0XFx0ICBHbm9tZW1lZXRpbmcsIGV0Yy5cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0ICBXaXRoIHRoaXMgbW9kdWxlIHlvdSBjYW4gc3VwcG9ydCBILjMyMyBvbiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcvTkFUXFxuIDI0OTpcXHRcXHQgIGZpcmV3YWxsLlxcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHQgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbFxcbiAyNTI6XFx0XFx0ICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsXFxuIDI1MzpcXHRcXHQgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZVxcbiAyNTQ6XFx0XFx0ICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLlxcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNTc6XFx0XFxuIDI1ODpcXHRjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMToxNy43OTkzODI2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM4MDA4NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQncyB0aGUgcHJpbWFyeSBnYXRlLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGl0J3MgKmFsc28qIG5lc3RsZWQgd2l0aGluIGFuIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBTbywgZXZlbiBpZiBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBlbmFibGVkLCBpZiBjb25uZWN0aW9uIHRyYWNraW5nIChgTkZfQ09OTlRSQUNLYCkgaXNuJ3QsIHRoaXMgZW50aXJlIHNlY3Rpb24gd29uJ3QgYmUgY29tcGlsZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uIHRyYWNraW5nIGlzLCBpbiBmYWN0LCByZXF1aXJlZC4gSSdsbCBtZW50YWxseSBmbGFnIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGNoZWNrIEkgbmVlZCB0byBjb25kdWN0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgdGhlIG5lc3RlZCBjb25kaXRpb24gdGhhdCdzIGdvdCBtZSB0aGlua2luZy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdmVyaWZ5IHRoaXMgcmVsYXRpb25zaGlwIHRvIHByb2NlZWQgd2l0aCBhbnkgY29uZmlkZW5jZSBpbiBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMToyMS41MzczOTQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxNzY2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTExLWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjIxLjYwNDU3ODQxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI4MDUzMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBrZXJuZWwgbW9kdWxlIGZvciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGVuYWJsZSBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFuZCBgTkZfQ09OTlRSQUNLX0gzMjNgLiBTZWVtcyBsb2dpY2FsIGVub3VnaCBnaXZlbiB3aGF0IEkga25vdyBhYm91dCBuZXRmaWx0ZXIgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcuXG5cbkhtbSwgbm93IHdoYXQgYWJvdXQgdGhpcyBgZGVjb2RlX2ludGAgZnVuY3Rpb24/IEl0J3Mgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBpdHNlbGYsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIGZpbmQgYWxsIG9mIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIGl0LCBhbmQgZW5zdXJlIHRoYXQgaXQncyBjb3JyZWN0bHkgdXNlZCBieSB0aGUgYERlY29kZXJzYCBjb21wb25lbnQuIEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGNvbmZpcm0gaXQncyBiZWluZyB1c2VkIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6MjUuMTMyNjM1MTE2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjk5Mjg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjI9dHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpKHN0cnVjdCBiaXRzdHIgKiwgY29uc3Qgc3RydWN0IGZpZWxkX3QgKiwgY2hhciAqLCBpbnQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMzpzdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI0LVxcdGRlY29kZV9udWwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTE9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2Ni1cXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XFx0XFx0XFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTY4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTczLVxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU3NDpcXHRcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTc1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBsZXZlbCArIDEpKSBcXHUwMDNjXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVxcdFxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwOS1cXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIFxcdTAwM2NcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMToyNS4yMDU2MzcwNzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NDQ2OTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIERlY29kaW5nIE5ldHdvcmsgVHJhZmZpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGBEZWNvZGVyc2AgYXJyYXkuIFRoYXQgcmluZ3MgYSBiZWxsIOKAkyBpdCdzIGRlZmluaXRlbHkgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgdGhlIHZhcmlvdXMgZGVjb2RpbmcgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGl0J3MgdXNlZCBieSBgZGVjb2RlX3NlcWAsIGBkZWNvZGVfc2Vxb2ZgLCBhbmQgYGRlY29kZV9jaG9pY2VgLiBUaGF04oCZcyBteSBwcmltYXJ5IGNvbmNlcm4gZm9yIG5vdywgdGhhdCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb250ZXh0IGZvciB0aGUgYXJyYXkuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXTigJlzIGJlaW5nIGRlY29kZWQsIHNvIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gVW5kZXJzdGFuZGluZyB3aGF0J3MgZXhwb3J0ZWQgd2lsbCBpbGx1bWluYXRlIHdoYXQgdGhpcyBgRGVjb2RlcnNgIGFycmF5IGlzIGJlaW5nIHVzZWQgZm9yLiBJdOKAmXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVucmF2ZWxpbmcgdGhpcyBkZWNvZGluZyBsb2dpYyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgbmV0d29yayB0cmFmZmljIGFuYWx5c2lzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgZm9ybWF0cyB0aGlzIGNvZGUgaXMgd29ya2luZyB3aXRoLCBhbmQgdGhvc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIGhvbGQgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQyMywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjI4Ljc3MDExMjI4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MTc2ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjI4LjgzMjc0NzkwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg4NzcxNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZS4uLiBUaGUgZmlyc3QgcXVlc3Rpb24gSSdtIGFza2luZyBteXNlbGYgaXMsIFwiV2hhdCdzIHRoZSBsYW5kc2NhcGUgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dD9cIiBJIHdhbnQgdG8gcXVpY2tseSBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnN0YW5jZSBtZXRob2RzIGFuZCwgdGhlcmVmb3JlLCBvcGVyYXRpbmcgb24gb2JqZWN0IHN0YXRlLiBUaGlzIHRlbGxzIG1lIGEgbG90IGFib3V0IHRoZSBkZXNpZ24g4oCTIGFyZSB3ZSBoZWF2aWx5IHJlbGlhbnQgb24gb2JqZWN0LW9yaWVudGVkIHByaW5jaXBsZXMsIG9yIGlzIGl0IG1vcmUgb2YgYSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25hbGl0aWVzIHRoYXQgYXJlIHRpZWQgdG8gc3BlY2lmaWMgb2JqZWN0IGluc3RhbmNlcz8gSXQgd2lsbCBhbHNvIGhlbHAgbWUgbmFycm93IGRvd24gd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIG1vc3QgbGlrZWx5IHRvIGRlYWwgd2l0aCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBzaWRlIGVmZmVjdHMsIGVzcGVjaWFsbHkgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIG9yIGNvbnRleHRzLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvdGVudGlhbCBjb21wbGV4aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI5LCJPdXRwdXRUb2tlbnMiOjc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6MzQuMzIxNTIzMTg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM4OTExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODIxOmludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1NC1cXHRcXHRcXHRcXHRcXHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg3MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NzE6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKnE5MzEpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6MzQuNDA2OTIxMThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTQ4NzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEVudHJ5IFBvaW50IEFuYWx5c2lzIGZvciBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFNwZWNpZmljYWxseSwgbXkgZm9jdXMgaXMgb24gaG93IHRoZSBILjMyMyBwcm90b2NvbCBpcyBwcm9jZXNzZWQgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ20gbm90aW5nIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cywgd2hpY2ggYXBwZWFyIHRvIGJlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAuIFRoZXNlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIGluaXRpYWwgZGVjb2RpbmcgYW5kIHByb2Nlc3Npbmcgb2YgdGhlIHZhcmlvdXMgSC4zMjMgbWVzc2FnZXMgYXJlIGhhbmRsZWQuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgSSBhbSBnb2luZyB0byBjaGVjayBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgYW5kLCB1bHRpbWF0ZWx5LCBob3cgSC4zMjMgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHByb2Nlc3Mgd2l0aGluIG5ldGZpbHRlci4gSXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgcGFyc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjcsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTozNy45ODY0MTEyNzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQyMTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVSYXNNZXNzYWdlfERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZXxEZWNvZGVROTMxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1Mi1cXHRcXHQvKiBEZWNvZGUgSC4yNDUgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlxcdFxcdHJldCA9IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZShkYXRhLCBkYXRhbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNjbSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExMi1cXHRcXHQvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTExMzpcXHRcXHRyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZxOTMxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgzLVxcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2ODQ6XFx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcXHUwMDI2cmFzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjg1LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjM4LjA5OTgzNzkyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI4NTk0MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ29ubnRyYWNrIEhlbHBlcnM6IEEgUGxhbioqXG5cbk9rYXksIGhlcmUncyB0aGUgZ2FtZSBwbGFuLiBXZSd2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBgaDI0NV9oZWxwYCwgYHE5MzFfaGVscGAsIGFuZCBgcmFzX2hlbHBgLiBUaGVzZSBhcmUgY29ubnRyYWNrIGhlbHBlcnMsIGFuZCB3ZSAqa25vdyogdGhleSdyZSBleHBvc2VkIHRvIG5ldHdvcmsgdHJhZmZpYywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBkZWNvZGluZyBmdW5jdGlvbnM6IGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAuIExldCdzIHNlZSBhYm91dCB0ZXN0aW5nIGBoMjQ1X2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGByYXNfaGVscGAgdG9vLCBhbHRob3VnaCB0aG9zZSBhcmUgaGVscGVyIGZ1bmN0aW9ucyBzbyB0aGV5J3JlIHNlY29uZGFyeS4gXG5cbkFscmlnaHQsIHNvIGBoMjQ1X2hlbHBgIGlzIHN0YXRpYy4gVGhhdCdzIGEgYml0IG9mIGEgYnVtbWVyLCBidXQgaXQgbWFrZXMgdGhlIHRlc3RpbmcgZWFzaWVyIHRvIGNvbnRhaW4uIFdlJ2xsIGxlYXZlIHRoYXQgZm9yIG5vdy4gVGhlIG90aGVycywgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYW5kIGBEZWNvZGVROTMxYCwgYXJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgdGhpbmcgbm93IGlzIHRvIGRldGVybWluZSBpZiB0aGV5J3JlIGV4cG9ydGVkLiBUaGF0J2xsIGJlIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQ3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjQyLjgyODQzNzIzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4OTA0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz01NT1jb25zdCBzdHJ1Y3QgbmZjdF9oMzIzX25hdF9ob29rcyBfX3JjdSAqbmZjdF9oMzIzX25hdF9ob29rIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTY6RVhQT1JUX1NZTUJPTF9HUEwobmZjdF9oMzIzX25hdF9ob29rKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU4Nj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02MTUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxNjpFWFBPUlRfU1lNQk9MX0dQTChnZXRfaDIyNV9hZGRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjQyLjkwOTMzNTcyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyNDEwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3ltYm9scywgYW5kIHRoZXkncmUgZGVmaW5pdGVseSBub3QgZXhwb3J0ZWQsIGJ1dCB0aGV5IGFyZSBkZWZpbmVkIGluIGEgc2VwYXJhdGUgZmlsZSwgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIFRoYXQgbWVhbnMgdGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbHMsIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cblxuV2FpdCBhIHNlY29uZC4uLkknbSByZW1lbWJlcmluZyBzb21ldGhpbmcgYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MuIFJpZ2h0LCBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBpcyBhY3R1YWxseSAqaW5jbHVkZWQqIGluIHRoZSBgbmZfY29ubnRyYWNrX2gzMjMtb2Jqc2AuIFdoaWNoIG1lYW5zIGl0J3MgdWx0aW1hdGVseSBsaW5rZWQgaW50byB0aGUgc2FtZSBtb2R1bGUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBJJ20gaW50ZXJlc3RlZCBpbiBpcyB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGNoZWNrIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGZvciB0aGUgZnVuY3Rpb24gYERlY29kZVJhc01lc3NhZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTo0Ny4zODE3NDg2MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjUyOTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgRGVjb2RlUmFzTWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDA9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMTo0Ny40OTQyODU1NzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1OTM0MDI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnVuY3Rpb24gVXNhZ2UgZm9yIEguMzIzIERlY29kaW5nKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIEguMzIzIGRlY29kaW5nLCBhbmQgSSdtIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYW5kIGBEZWNvZGVROTMxYCBhcmUgZGVmaW5pdGVseSBrZXkgZm9jdXMgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGJpZyBwbGF5ZXJzLCB0aGUgb25lcyBsaWtlbHkgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgaW4gcHJvY2Vzc2luZyB0aGUgdmFyaW91cyBILjMyMyBtZXNzYWdlcy5cblxuQnV0IHRoZW4gdGhlcmUgYXJlIHRob3NlIGhlbHBlciBmdW5jdGlvbnMsIHRoZSBzdGF0aWMgb25lcy4gYGgyNDVfaGVscGAsIGBxOTMxX2hlbHBgLCBhbmQgYHJhc19oZWxwYC4uLiBobW0sIHRoZXkgKmNvdWxkKiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3IgbWF5YmUgb3B0aW1pemVkIGF3YXkgZW50aXJlbHksIG1ha2luZyB0aGVpciBzeW1ib2xzIGxlc3MgZGlzdGluY3QuIEhvd2V2ZXIsIHRoZXkncmUgdGhlIGFjdHVhbCBoZWxwZXJzLCB0aGUgbnV0cyBhbmQgYm9sdHMgdGhhdCB0aGVzZSBtYWluIGZ1bmN0aW9ucyBkZXBlbmQgb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSB1c2VkLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoZXRoZXIgb3Igbm90IEkgc2hvdWxkIGtlZXAgdGhlc2Ugc3ltYm9scyBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZC4gSSB0aGluayBJJ2xsIGxvb2sgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyB0aGV5IG1pZ2h0IGJlIHBhc3NlZCBhcm91bmQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgc29tZXdoZXJlLCB3aGljaCB3b3VsZCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2YgdGhlaXIgaW1wb3J0YW5jZS4gTGV0J3Mgc2VlIGlmIHRoYXQncyB0aGUgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDcsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6NTIuNzUzNjI4NzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDAwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImgyNDVfaGVscHxxOTMxX2hlbHB8cmFzX2hlbHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NDk0PXN0YXRpYyBpbnQgcHJvY2Vzc19oMjQ1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTUyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1Mjk6c3RhdGljIGludCBoMjQ1X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTMwLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEwMzE9c3RhdGljIGludCBwcm9jZXNzX3E5MzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTA4OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMDg5OnN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEwOTAtXFx0XFx0ICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTYyMD1zdGF0aWMgaW50IHByb2Nlc3NfcmFzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2NjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY2NDpzdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2NjUtXFx0XFx0ICAgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzExPXN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTYtXFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzE3OlxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MTgtXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcxOS1cXHRcXHRcXHQgIFxcXCJSQVNcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MjA6XFx0XFx0XFx0ICBcXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTcyMS1cXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjItXFx0XFx0XFx0ICBcXFwiSC4yNDVcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MjM6XFx0XFx0XFx0ICBcXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI0LVxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MjUtXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3MjY6XFx0XFx0XFx0ICBcXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI3LVxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzI4LVxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzI5OlxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTczMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6NTIuODM4NjQwOTMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDc2MzM0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IFN5bWJvbHMgZm9yIERlZXBlciBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBgbmZfY3RfaGVscGVyX2luaXRgLCB3aGljaCBtZWFucyB0aGV5IGFyZW4ndCBpbmxpbmVkIGFuZCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIFRoYXQgY29uZmlybXMgd2hhdCBJIHdhcyB0aGlua2luZy4gVGhlcmVmb3JlLCBgcmFzX2hlbHBgLCBgaDI0NV9oZWxwYCwgYW5kIGBxOTMxX2hlbHBgIGFyZSBhbHNvIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLCBhbmQgSSdsbCBrZWVwIHRoZW0gaW4gbWluZC5cblxuSG93ZXZlciwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseSwgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYW5kIGBEZWNvZGVROTMxYCBhcHBlYXIgY2xvc2VyIHRvIHRoZSBjb2RlIEkndmUgYmVlbiB3b3JraW5nIHdpdGgsIGFuZCBkaXJlY3RseSByZWxhdGUgdG8gdGhlIHNwZWNpZmljIGRlY29kaW5nIG9wZXJhdGlvbnMuIFRoZXNlIGFyZSwgdGhlcmVmb3JlLCBhIG1vcmUgcHJvZHVjdGl2ZSBhdmVudWUgZm9yIGludmVzdGlnYXRpb24uIEknbGwgcHJpb3JpdGl6ZSB1c2luZyB0aG9zZSB0aHJlZSBmdW5jdGlvbiBuYW1lcyBhcyBmb2N1cyBzeW1ib2xzIGR1cmluZyB0aGlzIGFuYWx5c2lzLlxuXG5CZWZvcmUgSSBwcm9jZWVkLCBpdCdzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgcmVjYWxsIHRoYXQgYE5GX0NPTk5UUkFDS19IMzIzYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaW1lIHRvIG1ha2Ugc3VyZSBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBhY2NvdW50ZWQgZm9yIGluIG15IGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbXBvcnRhbnQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzE6NTcuMTg2Mjc4MzA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM4ODk1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMxOjU3LjI4MTY3ODM5OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQyMDQ5MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gdGhlIEtlcm5lbCdzIFNlY3JldHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkVURklMVEVSX0FEVkFOQ0VEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBiZWZvcmUgSSBjYW4gdHJhY2UgaXRzIHVzYWdlIGVmZmVjdGl2ZWx5LiBJJ20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIHdpdGhpbiBOZXRmaWx0ZXIuIEtub3dpbmcgaXRzIGRlZmluaXRpb24gd2lsbCBwcm92aWRlIHRoYXQgaW5zaWdodC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjA0LjEyMzczMTA1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxNTI1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yMTg9aWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjE5LVxcbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIkFkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMjowNC4xOTU4OTAxMDlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNjQ4NzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlnLiBJIHNlZSBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBkZWZpbmVkIGluIGBuZXQvS2NvbmZpZ2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBwcmV0dHkgY29yZSBuZXR3b3JrIGZpbHRlcmluZyBvcHRpb24uIE5vdywgdGhlIGtleSBpcyB0aGUgZGVwZW5kZW5jeS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0IHdpbGwsIGFsbW9zdCBjZXJ0YWlubHksIGRlcGVuZCBvbiBgTkVURklMVEVSYCBiZWluZyBlbmFibGVkLiBHb3R0YSBjb25maXJtIHRoYXQsIGNhbid0IGp1c3QgYXNzdW1lLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gU28sIG5vdywgbGV0J3MgbG9vayBhdCBgTkZfQ09OTlRSQUNLYCBzaW5jZSBpdCBpcyBhbHNvIGluIGBuZXQvS2NvbmZpZ2AsIGFuZCB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoaXMgYnJhbmNoIG9mIGZlYXR1cmVzIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW50ZXJyZWxhdGlvbnNoaXBzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MDguODEyMzgwODA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM0Njg2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjA4LjkwMjczNjIwOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzIyNTg5Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldGZpbHRlciBvcHRpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYE5GX0NPTk5UUkFDS2AgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwuIFRoZW4sIEknbSBwb25kZXJpbmcgYE5GX0NPTk5UUkFDS19IMzIzYC4gSXQgbG9va3MgbGlrZSBpdCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEFoLCByaWdodCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgYSBib29sZWFuIGNvbmZpZywgc28gaXQncyBzdHJhaWdodGZvcndhcmQgLSBJIGNhbiBzaW1wbHkgZW5hYmxlIGl0IGlmIG5lZWRlZC4gTGV0IG1lIG1ha2UgYSBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzdGF0ZXM6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfQ09OTlRSQUNLX0gzMjNgLlxuXG5Ib2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkOiBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzICpjb25kaXRpb25hbGx5KiBlbmFibGVkLCBzcGVjaWZpY2FsbHkgaW5zaWRlIGFuIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBUaGF0J3MgY3J1Y2lhbC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgTkZfQ09OTlRSQUNLYCdzIHNldHRpbmdzIGFuZCBob3cgaXQgaW5mbHVlbmNlcyBgTkZfQ09OTlRSQUNLX0gzMjNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgaXMgaW4gcGxhY2UgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCB0aGUgSC4zMjMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MTQuMjI1MzI4NDU1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcXG4gIDkzOlxcdFxcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcXG4gIDk0OlxcdFxcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCcgYmVsb3cpLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgTkZfTE9HX1NZU0xPR1xcbiAgOTk6XFx0XFx0dHJpc3RhdGUgXFxcIlN5c2xvZyBwYWNrZXQgbG9nZ2luZ1xcXCJcXG4gMTAwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMDE6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMjoxNC4yMjU1MDA5ODVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2ODI0MzU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gc2V0dGluZyB1cCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgaXQncyBjbGVhciBJIG5lZWQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYC4gQnV0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhhdCdzICphbGwqIEkgcmVxdWlyZS4gVGhlcmUgY291bGQgYmUgc29tZSBzdWJ0bGUsIGxlc3Mgb2J2aW91cyBkZXBlbmRlbmNpZXMgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuXG5cbk15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGhlYWQgb3ZlciB0byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUsIGFuZCBpdCBzaG91bGQgcmV2ZWFsIGFueSB1bmRlcmx5aW5nIGRlcGVuZGVuY2llcyBmb3IgYE5GX0NPTk5UUkFDS19IMzIzYCB0aGF0IEkgbWlnaHQgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MTkuNTkzNzQ3MDA2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM5OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbiAyNDA6XFx0XFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDI0MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyNDI6XFx0XFx0aGVscFxcbiAyNDM6XFx0XFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcXG4gMjQ0OlxcdFxcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcXG4gMjQ1OlxcdFxcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcXG4gMjQ2OlxcdFxcdCAgR25vbWVtZWV0aW5nLCBldGMuXFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdCAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMjoxOS41OTM4NTk3OTZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxODQyNTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBILjMyMyBBU04uMSBEZWNvZGVyKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBORVRGSUxURVJfQURWQU5DRURgLCB0aGF0J3MgZ29vZC4gTXkgY29uZmlnIGVzc2VudGlhbHMgYXJlOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYC5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMuIElzIGBEZWNvZGVSYXNNZXNzYWdlYCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ/IFl1cCwgbm9uLXN0YXRpYywgcmlnaHQgd2hlcmUgSSBzdXNwZWN0ZWQg4oCTIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIExldCdzIGNvbmZpcm0gYnkgYWxzbyBjaGVja2luZyBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCBhbmQgYERlY29kZVE5MzFgLiBZZXAsIGFsbCBub24tc3RhdGljLCBhbGwgaW4gdGhlIHNhbWUgZmlsZS5cblxuVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBwYXJzaW5nIEFTTi4xIGVuY29kZWQgbWVzc2FnZXMuIEJpbmdvISBUaGF0J3MgZXhhY3RseSB3aGVyZSB0aGUgYnVnIGxpZXMuIEl0J3MgdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIEFTTi4xIGRlY29kZXIgdGhhdCdzIHRoZSBjdWxwcml0LiBTbyBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBleGFjdGx5IHRoZSByaWdodCBhcHByb2FjaC5cblxuSGVyZSdzIG15IGRpc3RpbGxlZCBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIGRvdWJsZS1hZHZhbmNlIG9uIGBicy1cdTAwM2VjdXJgIGR1cmluZyBpbnRlZ2VyIGRlY29kaW5nLiBJdCdzIG5ldHdvcmstcmVhY2hhYmxlIGlmIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBgRGVjb2RlUTkzMWAuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfSDMyM2AuXG5cblF1aWNrIHNhbml0eSBjaGVjayBvbiBkZXBlbmRlbmNpZXPigKYgYE5GX0NPTk5UUkFDS19IMzIzYCByZXF1aXJlcyBgSVBWNmAgZm9yIElQdjYgc3VwcG9ydCwgYnV0IGl0J3Mgbm90IHN0cmljdGx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBtb2R1bGUgaXRzZWxmLiBgTkZfQ09OTlRSQUNLYCByZXF1aXJlcyBgTkVURklMVEVSYC4gU28sIHRoZSBmb3VyIGNvbmZpZ3MgSSBsaXN0ZWQgYXJlIGRlZmluaXRlbHkgc3VmZmljaWVudC4gVGltZSB0byBleGVjdXRlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjgyLCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjI4LjAxMjI4OTUzOVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODExMTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQVNOLjEgZGVjb2RlciBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyB3aGVyZSB0aGUgYml0c3RyZWFtIGN1cnNvciB3YXMgaW5jb3JyZWN0bHkgYWR2YW5jZWQgdHdpY2Ugd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQVNOLjEgZGVjb2RlciBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyB3aGVyZSB0aGUgYml0c3RyZWFtIGN1cnNvciB3YXMgaW5jb3JyZWN0bHkgYWR2YW5jZWQgdHdpY2Ugd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgd2hlbiBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjI4LjE4MDQxMzQ3MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0NzE5NDA4OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MjguMTgxMDA2MTkyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0NDcxODgxMTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGJ1ZyBpbiBgZGVjb2RlX2ludGAgd2hlcmUgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGBicy1cXHUwMDNlY3VyYCBpcyBhZHZhbmNlZCB0d2ljZSBieSBgbGVuYCB3aGVuIGRlY29kaW5nIGFuIGludGVnZXIgZmllbGQgd2l0aCB0aGUgYERFQ09ERWAgYXR0cmlidXRlICh3aGljaCBvbmx5IGFwcGxpZXMgdG8gdGhlIGB0aW1lVG9MaXZlYCBmaWVsZCBpbiB0aGUgSC4zMjMgQVNOLjEgc2NoZW1hKS4gSG93ZXZlciwgYmVjYXVzZSBgdGltZVRvTGl2ZWAgaXMgYWx3YXlzIGFuIGV4dGVuc2lvbiBjb21wb25lbnQgaW4gYFJlZ2lzdHJhdGlvblJlcXVlc3RgIGFuZCBgUmVnaXN0cmF0aW9uQ29uZmlybWAsIHRoZSBjYWxsZXIgYGRlY29kZV9zZXFgIHNhdmVzIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBiZWZvcmUgZGVjb2RpbmcgdGhlIGNvbXBvbmVudCBhbmQgdW5jb25kaXRpb25hbGx5IHJlc3RvcmVzIGl0IHRvIGBiZWcgKyBsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbnNpb24gY29tcG9uZW50KSBhZnRlcndhcmRzLiBBcyBhIHJlc3VsdCwgdGhlIGRvdWJsZSBhZHZhbmNlIGluIGBkZWNvZGVfaW50YCBpcyBpbW1lZGlhdGVseSB1bmRvbmUgYnkgdGhlIGNhbGxlciBhbmQgaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHN1YnNlcXVlbnQgcGFyc2luZy5cXG5cXG5GdXJ0aGVybW9yZSwgdGhlIGFjdHVhbCBtZW1vcnkgcmVhZCBpbiBgZ2V0X3VpbnRgIG9jY3VycyBiZWZvcmUgdGhlIGVycm9uZW91cyBzZWNvbmQgYWR2YW5jZSBhbmQgaXMgcHJvcGVybHkgYm91bmRzLWNoZWNrZWQgYnkgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGNhdXNlIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCwgbGVha2VkLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBzdWJzeXN0ZW0uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmNjZGE0NWVhZDc2YTU0ZmUxNTZlNzliOTc4YmVlNzhhNDk0MmFjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjMwOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuQEAgLTMzNiw4ICszMzYsOSBAQCBzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVx1MDAzZWxiO1xuIFx0XHRcdFBSSU5UKFwiID0gJXVcIiwgdik7XG4gXHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicy1cdTAwM2VjdXIgKz0gbGVuO1xuIFx0XHR9XG4tXHRcdGJzLVx1MDAzZWN1ciArPSBsZW47XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBVTkNPOlxuIFx0XHRCWVRFX0FMSUdOKGJzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjI4LjE4MTAwNzYxMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDE0Njg2OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIFNwZWNpZmljYWxseSwgdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgYmxvY2sgbG9va2VkIGxpa2UgdGhpcywgYW5kIG5vdyBpdCdzIGJlZW4gY2hhbmdlZC4gTm93IGl0IGxvb2tzIGxpa2UgdGhlIGBicy1cdTAwM2VjdXJgIGluY3JlbWVudCBoYXMgYmVlbiAqbW92ZWQqIGJhc2VkIG9uIHRoaXMgY29uZGl0aW9uYWwgYGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKWAuIEFuZCBhIG5ldyBgZWxzZWAgaGFzIGJlZW4gYWRkZWQgd2l0aCBqdXN0IHRoZSBgYnMtXHUwMDNlY3VyYCBpbmNyZW1lbnQuIEhtbW0uLi5cblxuSG9sZCBvbiwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBJZiB0aGUgY29uZGl0aW9uIGBiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpYCBpcyAqdHJ1ZSosIHRoZW4gdGhlIGNvZGUgYWxyZWFkeSBjYWxscyBgZ2V0X3VpbnQoYnMsIGxlbilgLiBCdXQgKndpdGhpbiogYGdldF91aW50YCwgZG9lc24ndCB0aGUgY3VycmVudCBiaXQgcG9pbnRlciAoYGJzLVx1MDAzZWN1cmApIGdldCBhZHZhbmNlZCBieSBgbGVuYCBiaXRzIGFscmVhZHk/IElmIHNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgKmRvdWJsZSogaW5jcmVtZW50cyB0byBgYnMtXHUwMDNlY3VyYCwgb25jZSBpbiBgZ2V0X3VpbnRgIGFuZCBvbmNlIGRpcmVjdGx5LiBTbywgaW4gdGhlIG9yaWdpbmFsIGNvZGUgdGhlIGBicy1cdTAwM2VjdXIgKz0gbGVuO2Agd2FzIHJlZHVuZGFudCB3aGVuIHRoZSBjb25kaXRpb24gd2FzIHRydWUhXG5cbkFscmlnaHQsIGl0ICpsb29rcyogbGlrZSB0aGUgcGF0Y2ggaXMgY29ycmVjdGluZyB0aGlzIHJlZHVuZGFudCBpbmNyZW1lbnQuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBnZXRfdWludGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgZnVuY3Rpb24gdG8gYmUgY2VydGFpbi4gSnVzdCB0byBjb25maXJtIEkgdW5kZXJzdGFuZCB0aGUgaW50ZW50LCBpdCBsb29rcyBsaWtlIGlmIHRoZSBjb25kaXRpb24gaXMgKmZhbHNlKiwgdGhlbiB3ZSBzaW1wbHkgYWR2YW5jZSB0aGUgYml0IHBvaW50ZXIgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgKGBicy1cdTAwM2VjdXIgKz0gbGVuO2ApLiBUaGlzIG1ha2VzIHNlbnNlLiBCdXQgaWYgaXQncyB0cnVlLCB3ZSBhcmUgZ2V0dGluZyBgbGVuYCBiaXRzIGZyb20gdGhlIGJ1ZmZlciB2aWEgYGdldF91aW50YCwgd2hpY2ggKnNob3VsZCogYWxyZWFkeSBiZSBhZHZhbmNpbmcgb3VyIGJpdCBwb2ludGVyIGNvcnJlY3RseSwgdGhlcmVmb3JlIHRoZSBzZXBhcmF0ZSBpbmNyZW1lbnQgd2FzIHdyb25nLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1vdmluZyB0aGUgY29ycmVjdCBpbmNyZW1lbnQgaW50byB0aGUgYGVsc2VgIGNhc2Ugb2YgdGhlIGNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MzQuNTk1Njk3NTQ0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMwMzc4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzI6MzQuNjg5MDA3MDk1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTYxNTU4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZ2V0X3VpbnRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgYGdldF91aW50YCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbiAtIGhvdyBpdCBleHRyYWN0cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZyb20gd2hhdGV2ZXIgZGF0YSBzb3VyY2UgaXQncyB3b3JraW5nIHdpdGguIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGJpdHdpc2Ugb3BlcmF0aW9ucyBpdCB1c2VzLCBhbnkgZXJyb3IgaGFuZGxpbmcgaXQgaW1wbGVtZW50cyAob3IgZG9lc24ndCEpLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVkZ2UgY2FzZXMgbGlrZSBhdHRlbXB0aW5nIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBkYXRhLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGVmZmljaWVuY3k7IGFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcywgb3IgY2xldmVyIG9wdGltaXphdGlvbnM/IEknbGwgYmUgY29tcGFyaW5nIGl0IHRvIGJlc3QgcHJhY3RpY2VzLCBhbmQgSSdsbCBiZSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtaWdodCBvZmZlciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb3IgYmV0dGVyIHNhZmV0eSBndWFyYW50ZWVzLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb246IGRvZXMgaXQgZG8gd2hhdCBpdCBzaG91bGQsIGFuZCBjb3VsZCBpdCBkbyBpdCBiZXR0ZXI/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMjozOC4xNDUxNjU2NjRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHR9XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdC8qXFxuIDI0ODpcXHQgKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBhbmQgc2l6ZW9mKHVuc2lnbmVkIGludCkgPT0gNFxcbiAyNDk6XFx0ICovXFxuIDI1MDpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcXG4gMjUxOlxcdHtcXG4gMjUyOlxcdFxcdHVuc2lnbmVkIGludCB2ID0gMDtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c3dpdGNoIChiKSB7XFxuIDI1NTpcXHRcXHRjYXNlIDQ6XFxuIDI1NjpcXHRcXHRcXHR2IHw9ICpicy1cXHUwMDNlY3VyKys7XFxuIDI1NzpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAyNTg6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDI1OTpcXHRcXHRjYXNlIDM6XFxuIDI2MDpcXHRcXHRcXHR2IHw9ICpicy1cXHUwMDNlY3VyKys7XFxuIDI2MTpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAyNjI6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDI2MzpcXHRcXHRjYXNlIDI6XFxuIDI2NDpcXHRcXHRcXHR2IHw9ICpicy1cXHUwMDNlY3VyKys7XFxuIDI2NTpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAyNjY6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDI2NzpcXHRcXHRjYXNlIDE6XFxuIDI2ODpcXHRcXHRcXHR2IHw9ICpicy1cXHUwMDNlY3VyKys7XFxuIDI2OTpcXHRcXHRcXHRicmVhaztcXG4gMjcwOlxcdFxcdH1cXG4gMjcxOlxcdFxcdHJldHVybiB2O1xcbiAyNzI6XFx0fVxcbiAyNzM6XFx0XFxuIDI3NDpcXHRzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMjozOC4xNDUzMDI2MTVaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1MDc2MTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gdGhpcyBjb2RlOlxuXG4qKkRlY29kaW5nIEludGVnZXIgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBgZ2V0X3VpbnRgIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIGEgYml0c3RyZWFtLiBUaGUgY29tbWVudCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGFkdmFuY2luZyB0aGUgYml0c3RyZWFtJ3MgY3VycmVudCBwb3NpdGlvbiAoYGJzLVx1MDAzZWN1cmApIGJ5IGBiYCBieXRlcy4gQW5kIHRoZW4sIHRoZXJlJ3MgYSBjb25uZWN0aW9uIHRvIGBkZWNvZGVfaW50YCBzaW5jZSBgYmAgaXMgYXNzaWduZWQgYGxlbmAgd2l0aGluIGBkZWNvZGVfaW50YC4gVGhhdCBtZWFucyB0aGUgbGVuZ3RoIG9mIHRoZSBpbnRlZ2VyIGJlaW5nIGRlY29kZWQgc29tZWhvdyBkaWN0YXRlcyB0aGUgYnl0ZXMgY29uc3VtZWQuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE5vdyBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHRvIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgYml0IG9mIGNvZGUuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjQzLjA5NjA2NjQ2OVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTI6XFx0c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzEzOlxcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDMxNDpcXHR7XFxuIDMxNTpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRzd2l0Y2ggKGYtXFx1MDAzZXN6KSB7XFxuIDMyMDpcXHRcXHRjYXNlIEJZVEU6XFx0XFx0LyogUmFuZ2UgPT0gMjU2ICovXFxuIDMyMTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzIyOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIrKztcXG4gMzIzOlxcdFxcdFxcdGJyZWFrO1xcbiAzMjQ6XFx0XFx0Y2FzZSBXT1JEOlxcdFxcdC8qIDI1NyBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSA2NEsgKi9cXG4gMzI1OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMjY6XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSAyO1xcbiAzMjc6XFx0XFx0XFx0YnJlYWs7XFxuIDMyODpcXHRcXHRjYXNlIENPTlM6XFx0XFx0LyogNjRLIFxcdTAwM2MgUmFuZ2UgXFx1MDAzYyA0RyAqL1xcbiAzMjk6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxcbiAzMzA6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzMTpcXHRcXHRcXHRsZW4gPSBnZXRfYml0cyhicywgMikgKyAxO1xcbiAzMzI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxuIDMzMzpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzM0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMzU6XFx0XFx0XFx0aWYgKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFx0LyogdGltZVRvTGl2ZSAqL1xcbiAzMzY6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbiAzMzc6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiA9ICV1XFxcIiwgdik7XFxuIDMzODpcXHRcXHRcXHRcXHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSArIGYtXFx1MDAzZW9mZnNldCkpID0gdjtcXG4gMzM5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDM0MDpcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gMzQxOlxcdFxcdFxcdH1cXG4gMzQyOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDM6XFx0XFx0Y2FzZSBVTkNPOlxcbiAzNDQ6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDM0NTpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxuIDM0NjpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzQ3OlxcdFxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbiAzNDg6XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSBsZW47XFxuIDM0OTpcXHRcXHRcXHRicmVhaztcXG4gMzUwOlxcdFxcdGRlZmF1bHQ6XFx0XFx0LyogMiBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSAyNTUgKi9cXG4gMzUxOlxcdFxcdFxcdElOQ19CSVRTKGJzLCBmLVxcdTAwM2Vzeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMyOjQzLjA5NjE1NjQyOVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTAzNTczMTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIHRoZSBILjMyMyBQYXJzZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggaG93IGBnZXRfdWludGAgaW50ZXJhY3RzIHdpdGggYGJzLVx1MDAzZWN1cmAgd2l0aGluIHRoaXMgSC4zMjMgcGFyc2luZyBsb2dpYy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIGRvdWJsZS1hZHZhbmNpbmcgdGhlIGBicy1cdTAwM2VjdXJgIHBvaW50ZXIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCB3aGVuIGBiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpYCBpcyB0cnVlLCBgZ2V0X3VpbnRgIGl0c2VsZiBhZHZhbmNlcyBgYnMtXHUwMDNlY3VyYCBieSBgbGVuYCwgYW5kIHRoZW4gdGhlIHN1YnNlcXVlbnQgbGluZSBgYnMtXHUwMDNlY3VyICs9IGxlbmAgZG9lcyBpdCAqYWdhaW4qLiBUaGlzIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSByZWFkIHBvaW50ZXIgdHdpY2UgYXMgZmFyIGFzIGludGVuZGVkLCBieSBgMiAqIGxlbmAgaW5zdGVhZCBvZiBgbGVuYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGJzLVx1MDAzZWN1cmAgaXMgYSBwb2ludGVyIGludG8gYW4gYHVuc2lnbmVkIGNoYXJgIGJ1ZmZlciDigJMgbGlrZWx5IHRoZSBwYWNrZXQgZGF0YS4gVGhpcyBkb3VibGUtYWR2YW5jZSBsZWFkcyB0byBza2lwcGluZyBhIHBvcnRpb24gb2YgdGhlIHBhY2tldCwgd2hpY2ggaXMgYmFkLCBidXQgbW9yZSBjcml0aWNhbGx5LCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gU2luY2UgdGhlIGJ1ZmZlcidzIGFsbG9jYXRpb24gYW5kIGRhdGEgYXJlIHdpdGhpbiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHdoaWNoIGlzIGZ1bGx5IGFsbG9jYXRlZCBhbmQgZmlsbGVkIHdpdGggcGFja2V0IGRhdGEsIHRoaXMgYnVnIGxlYWRzIHRvIGFuICpvdXQtb2YtYm91bmRzIHJlYWQqLiBJdCdzIG5vdCBhYm91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlciBzZS4gSXQncyBhYm91dCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgKmFjdHVhbCogcGFja2V0IGRhdGEgd2l0aGluIHRoYXQgYWxsb2NhdGVkIGJ1ZmZlci5cblxuV2UgbmVlZCB0byBjb25zaWRlciBLQVNBTi4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgZGVzaWduZWQgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyByZWFkcy4gU28sIGJlY2F1c2UgYGJzLVx1MDAzZWN1cmAgYWR2YW5jZXMgdG9vIGZhciwgYW55IHN1YnNlcXVlbnQgcmVhZCBmcm9tIGBic2Agd2lsbCBhY2Nlc3MgbWVtb3J5IGJleW9uZCB0aGUgaW50ZW5kZWQgcGFja2V0IGJvdW5kYXJpZXMuIFRoaXMgc2hvdWxkIGJlIGRldGVjdGFibGUgYnkgS0FTQU4uXG5cbkhvd2V2ZXIsIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGJlY2F1c2UgaXQncyB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXJzZXIgaGFzIGFkdmFuY2VkIHRvbyBmYXIuIEluIHRoZSBleGlzdGluZyBjb2RlLCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgY2FsbGVkIHRvIHZlcmlmeSB0aGF0IGBicy1cdTAwM2VjdXIgKyBsZW5gIGRvZXMgbm90IGV4Y2VlZCBgYnMtXHUwMDNlZW5kYC4gSG93ZXZlciwgdGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGJzLVx1MDAzZWN1cmAgaXMgbm93IGF0IGBicy1cdTAwM2VjdXIgKyAyICogbGVuYC4gU28gd2hpbGUgY2hlY2tzIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IE9PQiByZWFkcywgdGhlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBjaGVja3MgbWlnaHQgYmUgYnlwYXNzZWQgYWZ0ZXIgdGhpcyBhZHZhbmNlbWVudCBvZiBgYnMtXHUwMDNlY3VyYCwgYmVjYXVzZSB0aGV5J3JlIGJhc2VkIG9uIHRoZSB3cm9uZyBzdGFydGluZyBsb2NhdGlvbi4gVGhlIG5leHQgdGltZSBpdCByZWFkcywgaXQgbWlnaHQgYmUgb3V0IG9mIGJvdW5kcywgYW5kIHRoZW4gaXQncyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzZWNvbmQgYGJzLVx1MDAzZWN1ciArPSBsZW5gIHdoaWNoIGFkZHJlc3NlcyB0aGUgcm9vdCBjYXVzZTogVGhlIGRvdWJsZSBpbmNyZW1lbnQuXG5cbkJ1dCBoZXJlIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYHNrYmAgY2FuIGhhdmUgdGFpbHJvb20gd2hpY2ggaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFJlYWRpbmcgaW50byB0aGUgdGFpbHJvb20gd291bGQgYmUgY2F1Z2h0IGJ5IEtNU0FOLCBiZWNhdXNlIHRoZSB0YWlscm9vbSBpcyB1bmluaXRpYWxpemVkLCBidXQgaXQgbWF5IG5vdCBiZSBjYXVnaHQgYnkgS0FTQU4uIEtBU0FOIG9ubHkga25vd3MgdGhlIGFsbG9jYXRlZCBidWZmZXIgc2l6ZS4gU28gaWYgdGhlIHJlYWQgaXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBidXQgKnBhc3QqIHRoZSBhY3R1YWwgcGFja2V0J3MgdmFsaWQgZGF0YSAoYHNrYi1cdTAwM2VsZW5gKSwgS0FTQU4gbWlnaHQgbWlzcyBpdCBpZiBgYnMtXHUwMDNlZW5kYCBpcyBzZXQgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIncyBlbmQuIFRoaXMgaXMgYSBwb2ludCB0byBkb3VibGUgY2hlY2s6IGlzIGBicy1cdTAwM2VlbmRgIGVxdWFsIHRvIGBza2ItXHUwMDNlbGVuYCBvciB0aGUgZW5kIG9mIHRoZSBgc2tiYCBhbGxvY2F0aW9uPyBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hldGhlciB3ZSdyZSBwdXJlbHkgaW4gdGhlIHJlYWxtIG9mIE9PQiByZWFkcyBvZiB2YWxpZCBwYWNrZXQgZGF0YSwgb3IgaWYgd2UncmUgYWxzbyBwb3RlbnRpYWxseSB0b3VjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgYHNrYmAncyB0YWlscm9vbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzowMi4xMzE4OTEyNzhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzg0NDkzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicy1cXHUwMDNlZW5kID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjAyLjIwMzY4NDY3WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzMyNjg3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIEluaXRpYXRpdmU6IEV4YW1pbmluZyBgYnMuZW5kYCBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhpcyBjb250ZXh0LCBpcyB0byB6ZXJvIGluIG9uIGhvdyBgYnMuZW5kYCBpcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaG93IGBic2AgaXRzZWxmIGlzIGJlaW5nIGluaXRpYWxpemVkLiBNeSB5ZWFycyBvZiBleHBlcmllbmNlIGhhdmUgdGF1Z2h0IG1lIHRoYXQgdGhlc2Uga2luZHMgb2YgaXNzdWVzIG9mdGVuIHN0ZW0gZnJvbSBhbiBpbXByb3BlciBkZWZpbml0aW9uIG9yIHVuZXhwZWN0ZWQgdmFsdWUgYXNzaWdubWVudCBlYXJseSBvbi4gSSdtIHRoaW5raW5nLCBpcyBgYnMuZW5kYCBiZWluZyB1c2VkIGFzIGFuIGl0ZXJhdG9yPyBJcyBpdCBhbiBvZmZzZXQ/IElzIGl0IHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIGEgYnVmZmVyIG9yIHN0cmluZz8gVGhlIHByZWNpc2UgbWVhbmluZyB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBhbnkgYnVncy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBodW50IGRvd24gdGhlIGRlY2xhcmF0aW9uIGFuZCBhc3NpZ25tZW50IG9mIGBic2AuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB1bmV4cGVjdGVkIHR5cGUgY29udmVyc2lvbnMgYXJvdW5kIHRoYXQgdmFyaWFibGUuIFRoYXQncyBteSBpbW1lZGlhdGUgc3RyYXRlZ3kuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzowNS41MzY5NTY4MjNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODQzODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuZW5kID1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODIxPWludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjktXFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgzMDpcXHRicy5lbmQgPSBidWYgKyBzejtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzEtXFx0YnMuYml0ID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQ2LVxcdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NDc6XFx0YnMuZW5kID0gYmVnICsgc3o7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQ4LVxcdGJzLmJpdCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04NTM9aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg2My1cXHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODY0OlxcdGJzLmVuZCA9IGJ1ZiArIHN6O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg2NS1cXHRicy5iaXQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzowNS42MDM4MDcyNTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MzI1MDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3pgIFBhcmFtZXRlcidzIFVzYWdlKipcblxuT2theSwgc28gdGhlIGBzemAgcGFyYW1ldGVyIGlzIG1ha2luZyB0aGUgcm91bmRzIGluIHRoZXNlIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyBvcmlnaW4gYW5kIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBzeXN0ZW0uIExldCdzIGRpZyBpbnRvIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc3RhY2s7IGhvdyBhbmQgKndoeSogdGhpcyBgc3pgIHZhbHVlIGlzIGJlaW5nIHN1cHBsaWVkIHdpbGwgbGlrZWx5IHByb3ZpZGUgc2lnbmlmaWNhbnQgaW5zaWdodHMgaW50byB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBjb25jZXJuLiBHcmFiYmluZyB0aGUgY2FsbCBncmFwaCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzowOS42NTcwNjEwNzRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY0Nzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVSYXNNZXNzYWdlfERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9ufERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDA9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgzNjpzdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgzNy1cXHRcXHRcXHRcXHQgICAgICBzaXplX3Qgc3osIEgzMjNfVXNlckluZm9ybWF0aW9uICp1dWllKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1NC1cXHRcXHRcXHRcXHRcXHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTg3MT1pbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyMi1cXHRcXHRcXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo5MjM6XFx0XFx0XFx0cmV0dXJuIERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKGJ1ZiwgcCwgbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZxOTMxLVxcdTAwM2VVVUlFKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1Mi1cXHRcXHQvKiBEZWNvZGUgSC4yNDUgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlxcdFxcdHJldCA9IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZShkYXRhLCBkYXRhbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNjbSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgzLVxcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2ODQ6XFx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcXHUwMDI2cmFzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjg1LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjA5Ljc2NjcxNDk1M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEyMzkwNDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgZGF0YWxlbmAgQ2FsY3VsYXRpb24gaW4gUmVsYXRlZCBDb2RlKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGF0YWxlbmAgdmFyaWFibGUgaXMgYmVpbmcgZGV0ZXJtaW5lZCB3aXRoaW4gdGhlIGByYXNfaGVscGAgYW5kIGBoMjQ1X2hlbHBgIG1vZHVsZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aG9zZSBjb2RlIHNlY3Rpb25zLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaGFuZGxlIHRoZSBjYWxjdWxhdGlvbiBvZiBkYXRhIGxlbmd0aCwgYXMgdGhpcyBoYXMgbGlrZWx5IGJlZW4gYSBzb3VyY2Ugb2YgdmFyaWFiaWxpdHkgb3IgYW4gYXJlYSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIgZm9yIHNvbWUgZGVidWdnaW5nIEknbSBkb2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHVzZWQgZm9yIGJvdGggc2NlbmFyaW9zLiBUaGVuLCBJIGNhbiBjb21wYXJlIHRoZSB0d28uIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB0cmFjayBkb3duIHRoZSBzb3VyY2Ugb2YgYW55IGlzc3VlcyByZWxhdGVkIHRvIGBkYXRhbGVuYCBpZiB0aGV5IGV4aXN0LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzoxMy4xNzkxMDkwNDdaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NjQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NjQ6XFx0c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4xNjY1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxcbjE2NjY6XFx0e1xcbjE2Njc6XFx0XFx0c3RhdGljIFJhc01lc3NhZ2UgcmFzO1xcbjE2Njg6XFx0XFx0dW5zaWduZWQgY2hhciAqZGF0YTtcXG4xNjY5OlxcdFxcdGludCBkYXRhbGVuID0gMDtcXG4xNjcwOlxcdFxcdGludCByZXQ7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IHNrYmxlbiA9ICV1XFxcXG5cXFwiLCBza2ItXFx1MDAzZWxlbik7XFxuMTY3MzpcXHRcXG4xNjc0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmZfaDMyM19sb2NrKTtcXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0LyogR2V0IFVEUCBkYXRhICovXFxuMTY3NzpcXHRcXHRkYXRhID0gZ2V0X3VkcF9kYXRhKHNrYiwgcHJvdG9mZiwgXFx1MDAyNmRhdGFsZW4pO1xcbjE2Nzg6XFx0XFx0aWYgKGRhdGEgPT0gTlVMTClcXG4xNjc5OlxcdFxcdFxcdGdvdG8gYWNjZXB0O1xcbjE2ODA6XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkIFxcXCIsIGRhdGFsZW4pO1xcbjE2ODE6XFx0XFx0bmZfY3RfZHVtcF90dXBsZShcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTtcXG4xNjgyOlxcdFxcbjE2ODM6XFx0XFx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXFxuMTY4NDpcXHRcXHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZyYXMpO1xcbjE2ODU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xNjg2OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IGRlY29kaW5nIGVycm9yOiAlc1xcXFxuXFxcIixcXG4xNjg3OlxcdFxcdFxcdFxcdCByZXQgPT0gSDMyM19FUlJPUl9CT1VORCA/XFxuMTY4ODpcXHRcXHRcXHRcXHQgXFxcIm91dCBvZiBib3VuZFxcXCIgOiBcXFwib3V0IG9mIHJhbmdlXFxcIik7XFxuMTY4OTpcXHRcXHRcXHRnb3RvIGFjY2VwdDtcXG4xNjkwOlxcdFxcdH1cXG4xNjkxOlxcdFxcbjE2OTI6XFx0XFx0LyogUHJvY2VzcyBSQVMgbWVzc2FnZSAqL1xcbjE2OTM6XFx0XFx0aWYgKHByb2Nlc3NfcmFzKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgXFx1MDAyNmRhdGEsIFxcdTAwMjZyYXMpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6MTMuMTc5MzYwOTg3WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MDE5ODYxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzKipcblxuT2theSwgc28gYGdldF91ZHBfZGF0YWAgaGFuZHMgbWUgYSBwb2ludGVyIHRvIHRoZSBVRFAgcGF5bG9hZCwgYW5kIGBkYXRhbGVuYCBnaXZlcyBtZSBpdHMgYWN0dWFsIHNpemUuIFRoaXMgbWVhbnMgYHN6YCBpcyB0aGUgcmVhbCBwYXlsb2FkIGxlbmd0aCwgZ290IGl0LiBJZiBJIGFkdmFuY2UgYGJzLVx1MDAzZWN1cmAgYmV5b25kIGBicy1cdTAwM2VlbmRgLCB0aGF0IHNjcmVhbXMgXCJyZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgVURQIHBheWxvYWQhXCIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0J3MgKmFmdGVyKiB0aGUgcGF5bG9hZD8gSXMgaXQgdW5pbml0aWFsaXplZCBtZW1vcnk/XG5cblR5cGljYWxseSwgdGhlIHBhY2tldCBkYXRhIGxpdmVzIGluIGBza2ItXHUwMDNlZGF0YWAsIHJpZ2h0PyBJZiBJIHJlYWQgcGFzdCB0aGUgZGVzaWduYXRlZCBwYXlsb2FkIGxlbmd0aCwgSSBjb3VsZCBoaXQgcGFkZGluZywgZGF0YSBmcm9tIG90aGVyIHBhY2tldHMsIG9yLCBjcnVjaWFsbHksIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlmIEknbSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEkga25vdyBLQVNBTiBjYXRjaGVzIG91dC1vZi1ib3VuZHMgcmVhZHMgKmJleW9uZCogdGhlIGJ1ZmZlcidzIGFsbG9jYXRpb24uIElmIEkgcmVhZCBiZXlvbmQgdGhlIGJ1ZmZlciwgS0FTQU4gZmxhZ3MgaXQuIElmIEkgcmVhZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZSBidXQgcGFzdCB0aGUgcGFja2V0IGxlbmd0aCAoYHNrYi1cdTAwM2VsZW5gKSwgaXQncyBhIGRpZmZlcmVudCBzdG9yeS4gS0FTQU4gbWlnaHQgbWlzcyBpdCwgYnV0IEtNU0FOIHNob3VsZCBjYXRjaCBpdCBiZWNhdXNlIHRoYXQgcGFydCBvZiB0aGUgYnVmZmVyIGlzIGNvbnNpZGVyZWQgdW5pbml0aWFsaXplZC5cblxuV2FpdCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXMgdGhlIG1lbW9yeSBwYXN0IGBza2ItXHUwMDNlbGVuYCAqYWx3YXlzKiB1bmluaXRpYWxpemVkPyBZZXMhIFdoZW4gYW4gYHNrYmAgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCB0aGUgZW50aXJlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQsIGJ1dCBvbmx5IHRoZSBwYXJ0cyBmaWxsZWQgd2l0aCB0aGUgcGFja2V0J3MgZGF0YSBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQuIFRoZSByZXN0IGlzIGxlZnQgYXMtaXMsIHdoaWNoIG1lYW5zIGl0J3MgdW5pbml0aWFsaXplZC4gU28sIHJlYWRpbmcgcGFzdCB0aGUgcGF5bG9hZCBjb3VsZCB2ZXJ5IHdlbGwgbWVhbiBJJ20gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuQ291bGQgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSAqYWN0dWFsbHkqIGJlIHByb2JsZW1hdGljLCB0aGUgd2F5IEtNU0FOIHdvdWxkIGNvbXBsYWluPyBZZXMsIGJlY2F1c2UgYGdldF91aW50YCByZWFkcyBmcm9tIGl0IGludG8gYHZgLCBhbmQgYHZgIGNvdWxkIHRoZW4gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIGVsc2V3aGVyZSFcblxuSG9sZCBvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIGBnZXRfdWludGAgYWN0dWFsbHkgcmVhZHMgZnJvbTogYGJzLVx1MDAzZWN1cmAuXG5cbmBgYGNcblx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXG5cdHtcblx0XHR1bnNpZ25lZCBpbnQgdiA9IDA7XG5cdFx0c3dpdGNoIChiKSB7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyKys7XG5cdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcblx0XHRcdGZhbGx0aHJvdWdoO1xuXHRcdC8vIC4uLlxuYGBgXG5cbklmIGBicy1cdTAwM2VjdXJgIGlzIHBvaW50aW5nIHBhc3QgdGhlIGluaXRpYWxpemVkIHBhY2tldCBkYXRhLCB0aGVuIGAqYnMtXHUwMDNlY3VyYCBpcyByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEJpbmdvISBLTVNBTiAqc2hvdWxkKiBkZXRlY3QgdGhpcyByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IVxuXG5XYWl0IGEgc2Vjb25kLCBkb2VzIEtBU0FOIGV2ZW4gY2FyZSBhYm91dCB0aGlzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBLQVNBTiBvbmx5IGZsYWdzIHJlYWRzIHRoYXQgZ28gYmV5b25kIHRoZSAqYWxsb2NhdGVkKiBidWZmZXIsIG5vdCBqdXN0IHRoZSBsb2dpY2FsIHBhY2tldCBwYXlsb2FkLiBTa2IgZGF0YSBidWZmZXJzIGdlbmVyYWxseSBoYXZlIHNvbWUgdGFpbHJvb20sIHRoYXQncyB3aGF0IGBza2ItXHUwMDNldGFpbGAgYW5kIGBza2ItXHUwMDNlZW5kYCBhcmUgZm9yLCB0byBhZGQgaGVhZGVycy90cmFpbGVycyBsYXRlci4gU28sIHRoZXJlIGlzIG9mdGVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJldHdlZW4gYHNrYi1cdTAwM2V0YWlsYCBhbmQgYHNrYi1cdTAwM2VlbmRgLlxuXG5UaGVyZWZvcmUsIHJlYWRpbmcgcGFzdCB0aGUgcGFja2V0IHBheWxvYWQgYnV0IHN0YXlpbmcgd2l0aGluIHRoZSBgc2tiYCBkYXRhIGJ1ZmZlciBpcyBvdXQtb2YtYm91bmRzICpmcm9tIHRoZSBwYWNrZXQncyBwZXJzcGVjdGl2ZSosIGJ1dCBOT1QgZnJvbSB0aGUgbWVtb3J5IGFsbG9jYXRvcidzIHBlcnNwZWN0aXZlLiBTbywgS0FTQU4gd2lsbCBOT1QgY2F0Y2ggaXQgYmVjYXVzZSBpdCdzIHN0aWxsIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4gQnV0IEtNU0FOIFdJTEwgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgdGFpbHJvb20gaXMgKnVuaW5pdGlhbGl6ZWQqISBUaGlzIGlzIGEgZ29vZCBkaXNjb3ZlcnkhXG5cbkkgc2hvdWxkIGFsc28gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBgZ2V0X3VkcF9kYXRhYCBsaW5lYXJpemVzIHRoZSBgc2tiYCBvciBqdXN0IHJldHVybnMgYSBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njk2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6MjMuMDgxMzUyNjU3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI0ODA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWRwX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHE5MzFfZXhwX3BvbGljeSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExNDItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTE0MzpzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3VkcF9kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExNDQtXFx0XFx0XFx0XFx0ICAgaW50ICpkYXRhbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY3Ni1cXHQvKiBHZXQgVURQIGRhdGEgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjc3OlxcdGRhdGEgPSBnZXRfdWRwX2RhdGEoc2tiLCBwcm90b2ZmLCBcXHUwMDI2ZGF0YWxlbik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY3OC1cXHRpZiAoZGF0YSA9PSBOVUxMKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzoyMy4xNTQ2MDc2NDlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2ODIwNTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBnZXRfdWRwX2RhdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGdldF91ZHBfZGF0YWAuIExldCdzIHNlZSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igb3VyIFVEUCBkYXRhIGluZ2VzdGlvbiBwaXBlbGluZS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGdpdmVuIFVEUCdzIGluaGVyZW50IGNoYXJhY3RlcmlzdGljcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHBhY2tldCBsb3NzLCByZW9yZGVyaW5nLCBhbmQgYW55IGJ1ZmZlcmluZyBzdHJhdGVnaWVzIGltcGxlbWVudGVkLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiBpdCBpbnRlZ3JhdGVzIHdlbGwgd2l0aCBvdXIgZXhpc3RpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgc3lzdGVtcy4gRG9lcyBpdCB1c2Ugbm9uLWJsb2NraW5nIEkvTz8gSG93IGVmZmljaWVudCBpcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQ/IERvZXMgaXQgYWNjb3VudCBmb3IgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaXNzdWVzIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggbGFyZ2UgZGF0YWdyYW1zPyBUaGlzIGlzIGxpa2VseSBhIGJ1aWxkaW5nIGJsb2NrIGZvciBzb21lIGFwcGxpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDA1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6MjYuODIyODE2Mzk3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQzLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQzOlxcdHN0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfdWRwX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuMTE0NDpcXHRcXHRcXHRcXHRcXHQgICBpbnQgKmRhdGFsZW4pXFxuMTE0NTpcXHR7XFxuMTE0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgdWRwaGRyICp1aDtcXG4xMTQ3OlxcdFxcdHN0cnVjdCB1ZHBoZHIgX3VoO1xcbjExNDg6XFx0XFx0aW50IGRhdGFvZmY7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF91aCksIFxcdTAwMjZfdWgpO1xcbjExNTE6XFx0XFx0aWYgKHVoID09IE5VTEwpXFxuMTE1MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTUzOlxcdFxcdGRhdGFvZmYgPSBwcm90b2ZmICsgc2l6ZW9mKF91aCk7XFxuMTE1NDpcXHRcXHRpZiAoZGF0YW9mZiBcXHUwMDNlPSBza2ItXFx1MDAzZWxlbilcXG4xMTU1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExNTY6XFx0XFx0KmRhdGFsZW4gPSBza2ItXFx1MDAzZWxlbiAtIGRhdGFvZmY7XFxuMTE1NzpcXHRcXHRpZiAoKmRhdGFsZW4gXFx1MDAzZSBIMzIzX01BWF9TSVpFKVxcbjExNTg6XFx0XFx0XFx0KmRhdGFsZW4gPSBIMzIzX01BWF9TSVpFO1xcbjExNTk6XFx0XFxuMTE2MDpcXHRcXHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgKmRhdGFsZW4sIGgzMjNfYnVmZmVyKTtcXG4xMTYxOlxcdH1cXG4xMTYyOlxcdFxcbjExNjM6XFx0c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpmaW5kX2V4cGVjdChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuMTE2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxcbjExNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUxNiBwb3J0KVxcbjExNjY6XFx0e1xcbjExNjc6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6MjYuODIzMDM3Mjc3WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTU5MzI4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIEFjcXVpc2l0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBnZXRfdWRwX2RhdGFgIHdvcmtzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgVURQIGRhdGEgd2l0aGluIHRoaXMgY29udGV4dC4gSXQncyB1c2luZyBgc2tiX2hlYWRlcl9wb2ludGVyYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBoMzIzX2J1ZmZlcmAsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gVGhlIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIHRoZSBkYXRhIGlzIGFscmVhZHkgY29udGlndW91cywgXCJsaW5lYXJcIiBpbiB0aGUgYHNrYmAsIGl0IGRpcmVjdGx5IGhhbmRzIGJhY2sgYSBwb2ludGVyIGludG8gdGhlIGBza2JgJ3MgZGF0YSBzZWN0aW9uLiBUaGF0J3MgZWZmaWNpZW50LiBIb3dldmVyLCBpZiB0aGUgZGF0YSBpcyBmcmFnbWVudGVkLCBpLmUuLCBcIm5vbi1saW5lYXIsXCIgYGdldF91ZHBfZGF0YWAgY2xldmVybHkgY29waWVzIGl0IGFsbCBpbnRvIHRoaXMgYGgzMjNfYnVmZmVyYCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gKnRoYXQqLiBNYWtlcyBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhlIGFjY2VzcyB0byB0aGUgZGF0YSBpbiBlaXRoZXIgY2FzZS5cblxuTm93IHRoZSByZWFsIHF1ZXN0aW9uIGJlY29tZXM6IFdoYXQga2luZCBvZiBidWZmZXIgaXMgYGgzMjNfYnVmZmVyYD8gSXMgaXQgYSBzdGF0aWMgYnVmZmVyLCBnbG9iYWxseSBkZWZpbmVkLCBhY2Nlc3NpYmxlIGV2ZXJ5d2hlcmU/IE9yLCBpcyBpdCBwZXJoYXBzIGEgcGVyLUNQVSBidWZmZXIsIGRlc2lnbmVkIGZvciBlZmZpY2llbmN5IGJ5IHJlZHVjaW5nIGNvbnRlbnRpb24/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBkZWZpbml0aW9uIG9mIHRoYXQgdG8gYmUgc3VyZS4gSXQgY291bGQgbWFrZSBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBwZXJmb3JtYW5jZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjMyLjcxODk3NDg2M1oiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyOTcwMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaDMyM19idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTg9c3RhdGljIERFRklORV9TUElOTE9DSyhuZl9oMzIzX2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU5OnN0YXRpYyBjaGFyICpoMzIzX2J1ZmZlcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTY1PXN0YXRpYyBpbnQgZ2V0X3Rwa3RfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEwMC1cXHRcXHR0cGt0ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdGNwZGF0YW9mZiwgdGNwZGF0YWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMDE6XFx0XFx0XFx0XFx0XFx0ICBoMzIzX2J1ZmZlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTAyLVxcdFxcdGlmICghdHBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTExNDM9c3RhdGljIHVuc2lnbmVkIGNoYXIgKmdldF91ZHBfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExNTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTE2MDpcXHRyZXR1cm4gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgKmRhdGFsZW4sIGgzMjNfYnVmZmVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTYxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3NjQ9c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19oMzIzX2Zpbmkodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NjYtXFx0aDMyM19oZWxwZXJfZXhpdCgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3Njc6XFx0a2ZyZWUoaDMyM19idWZmZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NjgtXFx0cHJfZGVidWcoXFxcIm5mX2N0X2gzMjM6IGZpbmlcXFxcblxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTc3MT1zdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaDMyM19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzc2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3Nzc6XFx0aDMyM19idWZmZXIgPSBrbWFsbG9jKEgzMjNfTUFYX1NJWkUgKyAxLCBHRlBfS0VSTkVMKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzc4OlxcdGlmICghaDMyM19idWZmZXIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3OS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3ODUtZXJyMTpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzg2OlxcdGtmcmVlKGgzMjNfYnVmZmVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzg3LVxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjMyLjgwMjI3NzM3NFoiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDc0NTUzMzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWdWxuZXJhYmlsaXR5IEFuYWx5c2lzIG9mIHRoZSBILjMyMyBQYXJzZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgSC4zMjMgcGFyc2VyLCBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIHNvbWV0aGluZy4gVGhlIGBoMzIzX2J1ZmZlcmAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCwgd2l0aCBhIHNpemUgb2YgYEgzMjNfTUFYX1NJWkUgKyAxYCwgYW5kIGltcG9ydGFudGx5LCBpdCdzICpub3QqIHplcm9lZC4gVGhhdCBhbG9uZSByYWlzZXMgYW4gZXllYnJvdy4gVGhlbiwgdGhlIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uIGNvbWVzIGludG8gcGxheS4gSXQgY29waWVzIGRhdGEgaW50byBgaDMyM19idWZmZXJgIGJhc2VkIG9uIGBkYXRhbGVuYCwgYnV0IGl0IG9ubHkgY29waWVzIGEgcG9ydGlvbi4gVGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBpcyBsZWZ0IHVudG91Y2hlZCwgZmlsbGVkIHdpdGggd2hhdGV2ZXIgZ2FyYmFnZSB3YXMgdGhlcmUgYmVmb3JlLlxuXG5JIHN0YXJ0ZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtLCBsaWtlIGlmIHRoZSBwYXJzZXIgc29tZWhvdyByZWFkIHBhc3QgdGhlIHZhbGlkIGRhdGEuIEFuZCB0aGVuIEkgcmVjYWxsZWQgaG93IGBza2JfaGVhZGVyX3BvaW50ZXJgIGhhbmRsZXMgZGF0YS4gSWYgdGhlIGRhdGEgaXMgbm9uLWxpbmVhciwgaXQgY29waWVzIGl0IGludG8gdGhlIGJ1ZmZlci4gQnV0LCB3aGVuIGl0IGlzIGxpbmVhciBpdCByZXR1cm5zIGEgcG9pbnRlciBpbnRvIHRoZSBza2IgZGF0YSBpdHNlbGYuIEVpdGhlciB3YXkgdGhlIGRhdGEgYnVmZmVyIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCBvciBzaW1pbGFyIGFuZCB0aGUgcG9ydGlvbiBwYXN0IHRoZSBza2IncyB0YWlsIGNhbiBiZSB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiBtb3JlIGNsb3NlbHkuIFNwZWNpZmljYWxseSwgbG9vayBhdCB0aGlzIHBpZWNlIG9mIGNvZGU6XG5cbmBgYGNcblx0XHRjYXNlIENPTlM6XHRcdC8qIDY0SyBcdTAwM2MgUmFuZ2UgXHUwMDNjIDRHICovXG5cdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXG5cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuXHRcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICsgMTtcblx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuXHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcblx0XHRcdEJZVEVfQUxJR04oYnMpO1xuXHRcdFx0aWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcdC8qIHRpbWVUb0xpdmUgKi9cblx0XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXHUwMDNlbGI7XG5cdFx0XHRcdFBSSU5UKFwiID0gJXVcIiwgdik7XG5cdFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicy1cdTAwM2VjdXIgKz0gbGVuO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5gYGBcblxuQmVmb3JlIGEgc3BlY2lmaWMgcGF0Y2gsIHRoZXJlIHdhcyBhIGRvdWJsZSBhZHZhbmNlIG9mIGBicy1cdTAwM2VjdXJgLiBJZiBgYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKWAgaXMgdHJ1ZSwgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gd291bGQgcmVhZCBgbGVuYCBieXRlcyBhbmQgYWR2YW5jZSBgYnMtXHUwMDNlY3VyYCBieSBgbGVuYC4gQnV0IHRoZW4gYGJzLVx1MDAzZWN1ciArPSBsZW5gIHdhcyBleGVjdXRlZCwgYWR2YW5jaW5nIGl0ICphZ2FpbiouIE5vdywgdGhlIGluaXRpYWwgYm91bmRhcnkgY2hlY2sgb25seSBjaGVja2VkIGZvciBgbGVuYCBieXRlcywgYW5kIHRoZSBzZWNvbmQgYWR2YW5jZSBjYXVzZWQgYGJzLVx1MDAzZWN1cmAgdG8gYmUgYWR2YW5jZWQgcGFzdCBgYnMtXHUwMDNlZW5kYCBieSB1cCB0byBgbGVuYCBieXRlcy4gU3BlY2lmaWNhbGx5LCBgbGVuYCBjYW4gYmUgYmV0d2VlbiAxIGFuZCA0LiBUaGlzIG1lYW5zIGBicy1cdTAwM2VjdXJgIGNvdWxkIGp1bXAgcGFzdCBgYnMtXHUwMDNlZW5kYCBieSB1cCB0byA0IGJ5dGVzLiBUaGlzIGJ5cGFzc2VzIHRoZSBib3VuZGFyeSBjaGVjay5cblxuU28sIHdoYXQgaGFwcGVucyBuZXh0PyBUaGUgZm9sbG93aW5nIGZpZWxkcyBnZXQgZGVjb2RlZC4gVGhlIGNvZGUgaXMgc3VwcG9zZWQgdG8gY2hlY2sgd2l0aCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuIFRoYXQgZnVuY3Rpb24gaXM6XG5cbmBgYGNcbmludCBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KHN0cnVjdCBiaXRzdHIgKmJzLCBzaXplX3QgYnl0ZXMsIHNpemVfdCBiaXRzKVxue1xuXHRiaXRzICs9IGJzLVx1MDAzZWJpdDtcblx0Ynl0ZXMgKz0gYml0cyAvIDg7XG5cdGlmIChicy1cdTAwM2VjdXIgKyBieXRlcyBcdTAwM2UgYnMtXHUwMDNlZW5kKVxuXHRcdHJldHVybiAxO1xuXHRyZXR1cm4gMDtcbn1cbmBgYFxuXG5UaGUgdGhpbmcgaXMsIGlmIGBicy1cdTAwM2VjdXJgIGlzIGFscmVhZHkgZ3JlYXRlciB0aGFuIGBicy1cdTAwM2VlbmRgLCB0aGUgYm91bmRhcnkgY2hlY2sgKndpbGwqIGZhaWwsIGFuZCB0aGUgZGVjb2RlciB3aWxsIHJldHVybiBgSDMyM19FUlJPUl9CT1VORGAuIFNvLCB3aGlsZSBpdCdzIG5pY2UgdGhhdCB0aGVyZSBpcyBhIGNoZWNrLCBkb2VzIHRoaXMgbWVhbiB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQ/IEkgaGFkIHRvIHRyYWNlIGl0IGJhY2ssIGFuZCBpdCBsb29rcyBsaWtlIG5vLCB0aGUgYm91bmRzIGFyZSBjaGVja2VkIHJpZ2h0ICpiZWZvcmUqIGBnZXRfdWludGAgd2hpY2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmVhZCBiZXlvbmQgdGhlIGJvdW5kYXJpZXMuXG5cblNvLCB3aXRoIHRoZSBmaXgsIHRoaXMgY29kZTpcblxuYGBgY1xuXHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuXHRcdFx0QllURV9BTElHTihicyk7XG5cdFx0XHRpZiAoYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1x0LyogdGltZVRvTGl2ZSAqL1xuXHRcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cdTAwM2VsYjtcbmBgYFxuXG5DaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgYGJzLVx1MDAzZWN1cmAgaXMgd2l0aGluIGJvdW5kcyAqYmVmb3JlKiBgZ2V0X3VpbnRgIHJlYWRzIHRoZSBkYXRhLiBTbywgd2hpbGUgd2UgYXJlIGdvaW5nIHBhc3QgdGhlIGJvdW5kcyBjaGVjayB3ZSBzaG91bGRuJ3QgYmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlbiB3ZSByZXR1cm4uIFRoZSBuZXh0IGZpZWxkIHRoZW4gc3RhcnRzIGRlY29kaW5nIGFuZCB0aGUgcHJvY2VzcyBsb29wcyBhZ2Fpbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlc1xuXG4iLCJJbnB1dFRva2VucyI6MTMzMzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjQ3LjU0NzgxNTUwOVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NTAxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVjb2RlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDU9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA3LS8qIERlY29kZXIgRnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA4OnN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA5OnN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMDpzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMTpzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMjpzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTM6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTQ6c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTU6c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTY6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTc6c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTg6c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExOTpzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEyMz1zdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI0OlxcdGRlY29kZV9udWwsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI1OlxcdGRlY29kZV9ib29sLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyNjpcXHRkZWNvZGVfb2lkLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyNzpcXHRkZWNvZGVfaW50LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyODpcXHRkZWNvZGVfZW51bSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjk6XFx0ZGVjb2RlX2JpdHN0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzA6XFx0ZGVjb2RlX251bXN0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzE6XFx0ZGVjb2RlX29jdHN0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzI6XFx0ZGVjb2RlX2JtcHN0cixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzM6XFx0ZGVjb2RlX3NlcSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMzQ6XFx0ZGVjb2RlX3NlcW9mLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEzNTpcXHRkZWNvZGVfY2hvaWNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEzNi19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjczLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI3NDpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI3NS0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI4MjpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yOTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjkzOnN0YXRpYyBpbnQgZGVjb2RlX29pZChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjk0LSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzEyOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzEzLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYyOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2My0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzg6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzktICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MTQ6c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MTUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MzQ6c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ4MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0ODI6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODMtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MTE6c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MTItICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NDQ6c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0NS0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzQwOnN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQxLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgzMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MzM6XFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXFx1MDAyNmJzLCBcXHUwMDI2cmFzX21lc3NhZ2UsIChjaGFyICopIHJhcywgMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM0LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MDpcXHRyZXR1cm4gZGVjb2RlX3NlcShcXHUwMDI2YnMsIFxcdTAwMjZoMzIzX3VzZXJpbmZvcm1hdGlvbiwgKGNoYXIgKikgdXVpZSwgMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTg1Mz1pbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg2NzpcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZtdWx0aW1lZGlhc3lzdGVtY29udHJvbG1lc3NhZ2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODY4LVxcdFxcdFxcdCAgICAgKGNoYXIgKikgbXNjbSwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjMzOjQ3LjYwOTQ4OTM2M1oiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTczNDc0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBEZWNvZGluZyBQcm9jZWR1cmVzIGZvciBQb3RlbnRpYWwgQm91bmRhcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgY29kZSBJJ20gbG9va2luZyBhdCwgc3BlY2lmaWNhbGx5IHRoZSBgZGVjb2RlX3NlcWAgYW5kIGBkZWNvZGVfY2hvaWNlYCBmdW5jdGlvbnMsIGFyZSBoYW5kbGluZyBib3VuZGFyeSBjb25kaXRpb25zIGNvcnJlY3RseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIHBvdGVudGlhbGx5IHJlYWRpbmcgZGF0YSAqYmVmb3JlKiB0aGV5J3ZlIHZlcmlmaWVkIHRoYXQgdGhlIHJlYWQgaXMgc2FmZS4gSWYgdGhlcmUncyBhbnkgY2hhbmNlIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2ssIHRoYXQncyBhIHZ1bG5lcmFiaWxpdHkgSSBuZWVkIHRvIGFkZHJlc3MgcmlnaHQgbm93LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IG9mZi1ieS1vbmUgZXJyb3JzIGFuZCB1bmNoZWNrZWQgaW5kZXggYWNjZXNzIGFyZSBleGFjdGx5IHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMuIEkgd2FudCB0byBydWxlIG91dCB0aG9zZSBwb3NzaWJpbGl0aWVzIHdpdGggYSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjAxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6NTAuNzgyOTY2MjkzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMTpcXHRzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiA1MTI6XFx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gNTEzOlxcdHtcXG4gNTE0OlxcdFxcdHVuc2lnbmVkIGludCBleHQsIGJtcCwgaSwgb3B0LCBsZW4gPSAwLCBibXAyLCBibXAyX2xlbjtcXG4gNTE1OlxcdFxcdGludCBlcnI7XFxuIDUxNjpcXHRcXHRjb25zdCBzdHJ1Y3QgZmllbGRfdCAqc29uO1xcbiA1MTc6XFx0XFx0dW5zaWduZWQgY2hhciAqYmVnID0gTlVMTDtcXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiA1MjA6XFx0XFxuIDUyMTpcXHRcXHQvKiBEZWNvZGU/ICovXFxuIDUyMjpcXHRcXHRiYXNlID0gKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSA/IGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQgOiBOVUxMO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHQvKiBFeHRlbnNpYmxlPyAqL1xcbiA1MjU6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbiA1MjY6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDUyNzpcXHRcXHRleHQgPSAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IEVYVCkgPyBnZXRfYml0KGJzKSA6IDA7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdC8qIEdldCBmaWVsZHMgYml0bWFwICovXFxuIDUzMDpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cXHUwMDNlc3opKVxcbiA1MzE6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDUzMjpcXHRcXHRpZiAoZi1cXHUwMDNlc3ogXFx1MDAzZSAzMilcXG4gNTMzOlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX1JBTkdFO1xcbiA1MzQ6XFx0XFx0Ym1wID0gZ2V0X2JpdG1hcChicywgZi1cXHUwMDNlc3opO1xcbiA1MzU6XFx0XFx0aWYgKGJhc2UpXFxuIDUzNjpcXHRcXHRcXHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSBibXA7XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcdC8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovXFxuIDUzOTpcXHRcXHRmb3IgKGkgPSBvcHQgPSAwLCBzb24gPSBmLVxcdTAwM2VmaWVsZHM7IGkgXFx1MDAzYyBmLVxcdTAwM2VsYjsgaSsrLCBzb24rKykge1xcbiA1NDA6XFx0XFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IFNUT1ApIHtcXG4gNTQxOlxcdFxcdFxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgKGxldmVsICsgMSkgKiBUQUJfU0laRSwgXFxcIiBcXFwiLFxcbiA1NDI6XFx0XFx0XFx0XFx0ICAgICAgc29uLVxcdTAwM2VuYW1lKTtcXG4gNTQzOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX1NUT1A7XFxuIDU0NDpcXHRcXHRcXHR9XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdFxcdFxcdGlmIChzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBPUFQpIHtcXHQvKiBPcHRpb25hbCBjb21wb25lbnQgKi9cXG4gNTQ3OlxcdFxcdFxcdFxcdGlmICghKCgweDgwMDAwMDAwVSBcXHUwMDNlXFx1MDAzZSAob3B0KyspKSBcXHUwMDI2IGJtcCkpXFx0LyogTm90IGV4aXN0ICovXFxuIDU0ODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTQ5OlxcdFxcdFxcdH1cXG4gNTUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzo1MC43ODMwNTY5NDJaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMjM3ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyBTZXF1ZW5jZSBDb25jZXJucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlY29kZV9zZXFgIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxpbmcgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIHR3aWNlLiBUaGUgZmlyc3QgY2FsbCBjaGVja3MgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoZSBzZWNvbmQgb25lIGNoZWNrcyB0aGUgd2hvbGUgZnJhbWUgc2l6ZS4gVGhpcyBpcyBwb3RlbnRpYWxseSBhbiBpc3N1ZS4gU3BlY2lmaWNhbGx5LCB0aGUgYml0c3RyZWFtIGBic2AgY291bGQgYmUgaW52YWxpZCBhbmQgaGF2ZSBgYnMtXHUwMDNlY3VyYCBiZSBncmVhdGVyIHRoYW4gYGJzLVx1MDAzZWVuZGAuXG5cblRoZSBsb2dpYyBpbiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBjYWxjdWxhdGVzIGhvdyBtYW55IGJ5dGVzIGl0ICp3b3VsZCogbmVlZCB0byByZWFkIChiYXNlZCBvbiB0aGUgYGJ5dGVzYCBhbmQgYGJpdHNgIHBhcmFtZXRlcnMpLCBhZGRzIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGBicy1cdTAwM2VjdXJgLCBhbmQgY2hlY2tzIGlmIGl0IG92ZXJydW5zIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYGJzLVx1MDAzZWVuZGAuXG5cbklmIGBicy1cdTAwM2VjdXIgXHUwMDNlIGJzLVx1MDAzZWVuZGAgYXQgdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBjYWxsLCB0aGVuIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIFNpbmNlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCByZXR1cm5zIGBIMzIzX0VSUk9SX0JPVU5EYCBpZiBpdCByZXR1cm5zIDEsIHRoYXQgbWVhbnMgdGhlIGRlY29kZXIgZXhpdHMgd2l0aG91dCBkb2luZyBhbnl0aGluZyBpZiB0aGUgYml0c3RyZWFtIHBvaW50ZXIgaXMgZ2FyYmFnZS4gVGhhdCdzIG5vdCBpZGVhbC4gSXQncyBsaWtlbHkgYW4gaXNzdWUgYmVjYXVzZSBhbnkgYXR0ZW1wdHMgdG8gZGVjb2RlIHZhbGlkIGRhdGEgd291bGQgYWxzbyBiZSBza2lwcGVkLlxuXG5JJ20gZ29pbmcgdG8gbG9vayBhdCBgZGVjb2RlX2Nob2ljZWAgbmV4dCB0byBzZWUgaWYgdGhlIGlzc3VlIGlzIHByb3BhZ2F0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTEwLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzM6NTUuNzg1NDM5MDIxWiIsIlNlcSI6NzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDA6XFx0c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gNzQxOlxcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDc0MjpcXHR7XFxuIDc0MzpcXHRcXHR1bnNpZ25lZCBpbnQgdHlwZSwgZXh0LCBsZW4gPSAwO1xcbiA3NDQ6XFx0XFx0aW50IGVycjtcXG4gNzQ1OlxcdFxcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XFxuIDc0NjpcXHRcXHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdC8qIERlY29kZT8gKi9cXG4gNzUxOlxcdFxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdC8qIERlY29kZSB0aGUgY2hvaWNlIGluZGV4IG51bWJlciAqL1xcbiA3NTQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbiA3NTU6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDc1NjpcXHRcXHRpZiAoKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBFWFQpIFxcdTAwMjZcXHUwMDI2IGdldF9iaXQoYnMpKSB7XFxuIDc1NzpcXHRcXHRcXHRleHQgPSAxO1xcbiA3NTg6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDcpKVxcbiA3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDc2MDpcXHRcXHRcXHR0eXBlID0gZ2V0X2JpdHMoYnMsIDcpICsgZi1cXHUwMDNlbGI7XFxuIDc2MTpcXHRcXHR9IGVsc2Uge1xcbiA3NjI6XFx0XFx0XFx0ZXh0ID0gMDtcXG4gNzYzOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxuIDc2NDpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNzY1OlxcdFxcdFxcdHR5cGUgPSBnZXRfYml0cyhicywgZi1cXHUwMDNlc3opO1xcbiA3NjY6XFx0XFx0XFx0aWYgKHR5cGUgXFx1MDAzZT0gZi1cXHUwMDNlbGIpXFxuIDc2NzpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9SQU5HRTtcXG4gNzY4OlxcdFxcdH1cXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0LyogV3JpdGUgVHlwZSAqL1xcbiA3NzE6XFx0XFx0aWYgKGJhc2UpXFxuIDc3MjpcXHRcXHRcXHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSB0eXBlO1xcbiA3NzM6XFx0XFxuIDc3NDpcXHRcXHQvKiBDaGVjayBSYW5nZSAqL1xcbiA3NzU6XFx0XFx0aWYgKHR5cGUgXFx1MDAzZT0gZi1cXHUwMDNldWIpIHtcXHQvKiBOZXdlciB2ZXJzaW9uPyAqL1xcbiA3NzY6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDc3NzpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxuIDc3ODpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNzc5OlxcdFxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozMzo1NS43ODU1ODI1MjFaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2Njg3NDU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGRlY29kZV9jaG9pY2VgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGRlY29kZV9jaG9pY2VgIGlzIGNhbGxpbmcgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgICpiZWZvcmUqIGl0IHN0YXJ0cyByZWFkaW5nLiBUaGF0J3MgZ29vZC4gSXQgc2VlbXMgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBpZiBgYnMtXHUwMDNlY3VyYCBnZXRzIG1lc3NlZCB1cCDigJMgbWF5YmUgYWR2YW5jZWQgcGFzdCBgYnMtXHUwMDNlZW5kYCBieSwgc2F5LCBgZGVjb2RlX2ludGAg4oCTIHRoZSB2ZXJ5IG5leHQgZmllbGQgc2hvdWxkIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIGJvdW5kYXJ5IGNoZWNrIGFuZCByZXR1cm4gYEgzMjNfRVJST1JfQk9VTkRgLiBTbywgdGhhdCAqc2hvdWxkKiBjYXRjaCBhbnkgb3ZlcnJ1biBpc3N1ZXMuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmIHdoYXQgaWYgdGhlICpuZXh0KiBmaWVsZCAqaXMqIGFub3RoZXIgYGRlY29kZV9pbnRgIGNhbGw/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMgY2FzZS4gTGV0J3Mgc2VlLi4uIGBkZWNvZGVfaW50YCBpdHNlbGY6XG5cbmBgYGNcblx0Y2FzZSBDT05TOlx0XHQvKiA2NEsgXHUwMDNjIFJhbmdlIFx1MDAzYyA0RyAqL1xuXHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcblx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuYGBgXG5cblJpZ2h0ISBJdCAqYWxzbyogZG9lcyBhIGJvdW5kYXJ5IGNoZWNrIGJlZm9yZSByZWFkaW5nISBUaGF0J3MgY2xldmVyLiBUaGF0IHN1Z2dlc3RzIGl0J3MgZGVzaWduZWQgdG8gYmUgcm9idXN0IG9uIGl0cyBvd24uIEl0IGFwcGVhcnMgdGhhdCBpdCBwcm90ZWN0cyBpdHNlbGYgZXZlbiBpZiB0aGUgcHJlY2VlZGluZyBjb2RlIG1hZGUgYSBibHVuZGVyLlxuXG5IbW0uLi4gT2theSwgc28sIGBkZWNvZGVfaW50YCBpcyBzYWZlIGJlY2F1c2UgaXQgY2hlY2tzIGJvdW5kYXJ5LiBOb3cgSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggb3RoZXIgcG90ZW50aWFsIHByb2JsZW1hdGljIGZpZWxkIGNhbGxzLiBXaGF0IGFib3V0IGBkZWNvZGVfbnVsYD8gRG9lcyB0aGF0IGhhdmUgYW55IGJvdW5kYXJ5IGNoZWNraW5nP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc1NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM0OjAwLjc1MjQ2MTM0NFoiLCJTZXEiOjc2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjc0OlxcdHN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDI3NTpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAyNzY6XFx0e1xcbiAyNzc6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMjgzOlxcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAyODQ6XFx0e1xcbiAyODU6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRJTkNfQklUKGJzKTtcXG4gMjg4OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gMjg5OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAyOTA6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gMjkxOlxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzQ6MDAuNzUyNjMyNTc1WiIsIlNlcSI6NzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTA1ODY2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgQm9vbGVhbiBWYWx1ZXMgYW5kIE5hdmlnYXRpbmcgdGhlIEJpdHN0cmVhbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlY29kZV9ib29sYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gSXQga2lja3MgdGhpbmdzIG9mZiB3aXRoIGEgY2FsbCB0byBgSU5DX0JJVChicylgLiBUaGF0IG1hY3JvIGxvb2tzIGxpa2UgaXQncyBqdXN0IGluY3JlbWVudGluZyB0aGUgYml0IHBvc2l0aW9uIHdpdGhpbiBhIGJpdHN0cmVhbSBzdHJ1Y3R1cmUsIGBic2AuIFNwZWNpZmljYWxseSwgaXQgaW5jcmVtZW50cyBgYnMtXHUwMDNlYml0YC4gSWYgYGJzLVx1MDAzZWJpdGAgZ29lcyBwYXN0IDcsIGl0IHJlc2V0cyBpdCB0byAwIGFuZCBhZHZhbmNlcyB0aGUgY3VycmVudCBieXRlIHBvaW50ZXIgYGJzLVx1MDAzZWN1cmAuIFNpbXBsZSBlbm91Z2gg4oCTIGl0J3MganVzdCBhIHdheSB0byBzdGVwIHRocm91Z2ggdGhlIGJpdHMgaW4gYSBieXRlIGFycmF5LlxuXG5UaGVuIGNvbWVzIHRoZSBjYWxsIHRvIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKWAuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWUga2luZCBvZiBib3VuZGFyeSBjaGVjayBvciBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBzcGVjaWZpYyB0byB0aGUgSC4zMjMgcHJvdG9jb2wsIHdoaWNoIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGlmIGBicy1cdTAwM2VjdXJgIGV4Y2VlZHMgYGJzLVx1MDAzZWVuZGAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYEgzMjNfRVJST1JfQk9VTkRgLCB3aGljaCBtZWFucyBpdOKAmXMgaGl0IHRoZSBlbmQgb2YgdGhlIGJpdHN0cmVhbSBiZWZvcmUgaXQncyBmaW5pc2hlZCBwYXJzaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBhIGNoZWNrIG9uIHRoZSBiaXRzdHJlYW0gYm91bmRhcmllcyBtdXN0IGJlIGhhcHBlbmluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cbldhaXQgYSBzZWNvbmTigKYgYElOQ19CSVRgIGRvZXNuJ3QgYWN0dWFsbHkgcmVhZCBhbnkgZGF0YSBmcm9tIHRoZSBiaXRzdHJlYW0sIGl0J3MganVzdCAqcG9zaXRpb25pbmcqIHRoZSBwb2ludGVyLiBTbywgYWxsIGl0J3MgZG9pbmcgaXMgYWR2YW5jaW5nIG91ciByZWFkIHBvaW50ZXIuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRlbHZlIGZ1cnRoZXIuIE9rYXksIGxldCdzIGNvbnNpZGVyIGBkZWNvZGVfb2lkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MzEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDowNS4yNDMyMjM5NzdaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MzpcXHRzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAyOTQ6XFx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMjk1OlxcdHtcXG4gMjk2OlxcdFxcdGludCBsZW47XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMwMTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXFxuIDMwMjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0bGVuID0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMzA1OlxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzMDY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzMDc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDMxMDpcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM0OjA1LjI0MzUxNTU3N1oiLCJTZXEiOjc5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzIzMDcyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29kaW5nIE9JRHMgYW5kIEJvdW5kYXJ5IENoZWNrcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBgZGVjb2RlX29pZGAgZnVuY3Rpb24sIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc3RhcnRzIHdpdGggYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuIFRoZW4sIGl0IGNoZWNrcyBmb3IgYSBib3VuZGFyeSBlcnJvciB1c2luZyBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuICBUaGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgcmVhZCB0aGUgbGVuZ3RoLCBhbmQgdGhlbiBhZHZhbmNlIHRoZSBjdXJyZW50IHBvaW50ZXIuICBOb3csIHRoZSBpbml0aWFsIGNhbGwgdG8gYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGlzIHRoZSBrZXkuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYsIHNheSwgYSBwcmlvciBmdW5jdGlvbiBsaWtlIGBkZWNvZGVfaW50YCBoYXMgYWR2YW5jZWQgYGJzLVx1MDAzZWN1cmAgKmJleW9uZCogYGJzLVx1MDAzZWVuZGAsIHRoZW4gdGhhdCBmaXJzdCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgY2hlY2sgaXMgZ29pbmcgdG8gdHJpZ2dlciBhIGJvdW5kYXJ5IGVycm9yIGFuZCByZXR1cm4gYEgzMjNfRVJST1JfQk9VTkRgLiAgQW5kIGl0J3MgZG9pbmcgdGhpcyBiZWNhdXNlIGlmIHRoZSBwb2ludGVyIGlzIGFscmVhZHkgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRoZSBib3VuZGFyeSBjaGVjayB3aWxsIGNhdGNoIGl0LiAgU3BlY2lmaWNhbGx5LCBgYnMtXHUwMDNlY3VyICsgMSBcdTAwM2UgYnMtXHUwMDNlZW5kYCBpcyB0cnVlIHdoZW4gYGJzLVx1MDAzZWN1ciBcdTAwM2UgYnMtXHUwMDNlZW5kYC4gU28gdGhpcyBwcmV2ZW50cyBhIHJlYWQgb2YgdGhlIGJ1ZmZlci4gU28sIHRoZSBjb2RlICp3b24ndCogdHJ5IHRvIGRlcmVmZXJlbmNlIGAqYnMtXHUwMDNlY3VyYCBpZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaGFzIGJlZW4gcmVhY2hlZC5cblxuQnV0Li4uIGhhbmcgb24uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgYnMtXHUwMDNlY3VyYCBnZXRzIHJlYWQgKmJlZm9yZSogdGhpcyBib3VuZGFyeSBjaGVjayBoYXBwZW5zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSBkZWNvZGVyIGZ1bmN0aW9ucyBoYW5kbGUgYnVmZmVyIG92ZXJydW5zIGNvcnJlY3RseSAqYmVmb3JlKiBhdHRlbXB0aW5nIHRvIGRlcmVmZXJlbmNlIHRoZSBjdXJyZW50IHBvaW50ZXIuIExldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBkZWNvZGVfZW51bWAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NjQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDoxMC41NjY1OTI1MTNaIiwiU2VxIjo4MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MjpcXHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzYzOlxcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzNjQ6XFx0e1xcbiAzNjU6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRpZiAoKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBFWFQpIFxcdTAwMjZcXHUwMDI2IGdldF9iaXQoYnMpKSB7XFxuIDM2ODpcXHRcXHRcXHRJTkNfQklUUyhicywgNyk7XFxuIDM2OTpcXHRcXHR9IGVsc2Uge1xcbiAzNzA6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzcxOlxcdFxcdH1cXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNzQ6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM3NTpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAzNzY6XFx0fVxcbiAzNzc6XFx0XFxuIDM3ODpcXHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNzk6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM0OjEwLjU2Njc2MjI5M1oiLCJTZXEiOjgxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjIwOTgwNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk91dC1vZi1Cb3VuZHMgUmVhZCBpbiBgZ2V0X2JpdGAhKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uLCBhbmQgaXQgY2FsbHMgYGdldF9iaXQoYnMpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCBhIG1pbnV0ZS4uLiBob3cgZG9lcyBgZ2V0X2JpdGAgaGFuZGxlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBiaXRzdHJlYW0/XCIgSSByZW1lbWJlciB0aGUgY29kZSBmb3IgYGdldF9iaXRgLCB3aGljaCBkb2VzIHRoaXM6XG5cbmBgYGNcbnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcbntcblx0dW5zaWduZWQgaW50IGIgPSAoKmJzLVx1MDAzZWN1cikgXHUwMDI2ICgweDgwIFx1MDAzZVx1MDAzZSBicy1cdTAwM2ViaXQpO1xuXG5cdElOQ19CSVQoYnMpO1xuXG5cdHJldHVybiBiID8gMSA6IDA7XG59XG5gYGBcblxuQW5kIGl0IGhpdHMgbWUg4oCTICp0aGF0KiBgKmJzLVx1MDAzZWN1cmAgZGVyZWZlcmVuY2UgaGFwcGVucyAqYmVmb3JlKiBhbnkgYm91bmRhcnkgY2hlY2tzISBUaGlzIGlzIGJhZC4gUmVhbGx5IGJhZC4gSWYgYGRlY29kZV9lbnVtYCBnZXRzIGNhbGxlZCB3aGVuIGBicy1cdTAwM2VjdXJgIGlzIGFscmVhZHkgcGFzdCBgYnMtXHUwMDNlZW5kYCwgYGdldF9iaXRgIGlzIGdvaW5nIHRvIGhhcHBpbHkgcmVhZCB3aGF0ZXZlciBnYXJiYWdlIGlzIGF0IHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBJJ20gdGFsa2luZyBhYm91dCBhIGRpcmVjdCBvdXQtb2YtYm91bmRzIHJlYWQuIEFuZCBkZXBlbmRpbmcgb24gaG93IGBicy1cdTAwM2VjdXJgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBoMzIzX2J1ZmZlcmAgb3IgdGhlIHNrYiB0YWlscm9vbSwgaXQgY291bGQgYmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCdzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGEgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHJlYWwga2lja2VyPyBgZGVjb2RlX2VudW1gIGl0c2VsZiBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZXhwbGljaXQgYm91bmRhcnkgY2hlY2tzIGJlZm9yZSBpdCBjYWxscyBgZ2V0X2JpdGAuIEl0IGp1c3QgdHJ1c3RzIHRoYXQgdGhlIGJpdHN0cmVhbSBpcyB3ZWxsLWZvcm1lZC4gU28sIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgdGhpcyBgZGVjb2RlX2VudW1gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgbWlnaHQgY2FsbCBgZ2V0X2JpdGAgd2l0aG91dCBjaGVja2luZyB0aGUgYm91bmRhcnkuIElzIGBkZWNvZGVfYml0c3RyYCBhbHNvIHZ1bG5lcmFibGUgdG8gdGhpcz9cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MDgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDoxNy43ODc3NDgwMzFaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3ODpcXHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNzk6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDM4NjpcXHRcXHRzd2l0Y2ggKGYtXFx1MDAzZXN6KSB7XFxuIDM4NzpcXHRcXHRjYXNlIEZJWEQ6XFx0XFx0LyogZml4ZWQgbGVuZ3RoIFxcdTAwM2UgMTYgKi9cXG4gMzg4OlxcdFxcdFxcdGxlbiA9IGYtXFx1MDAzZWxiO1xcbiAzODk6XFx0XFx0XFx0YnJlYWs7XFxuIDM5MDpcXHRcXHRjYXNlIFdPUkQ6XFx0XFx0LyogMi1ieXRlIGxlbmd0aCAqL1xcbiAzOTE6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTI6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM5MzpcXHRcXHRcXHRsZW4gPSAoKmJzLVxcdTAwM2VjdXIrKykgXFx1MDAzY1xcdTAwM2MgODtcXG4gMzk0OlxcdFxcdFxcdGxlbiArPSAoKmJzLVxcdTAwM2VjdXIrKykgKyBmLVxcdTAwM2VsYjtcXG4gMzk1OlxcdFxcdFxcdGJyZWFrO1xcbiAzOTY6XFx0XFx0Y2FzZSBTRU1JOlxcbiAzOTc6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTg6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM5OTpcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gNDAwOlxcdFxcdFxcdGJyZWFrO1xcbiA0MDE6XFx0XFx0ZGVmYXVsdDpcXG4gNDAyOlxcdFxcdFxcdGxlbiA9IDA7XFxuIDQwMzpcXHRcXHRcXHRicmVhaztcXG4gNDA0OlxcdFxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0XFx0YnMtXFx1MDAzZWN1ciArPSBsZW4gXFx1MDAzZVxcdTAwM2UgMztcXG4gNDA3OlxcdFxcdGJzLVxcdTAwM2ViaXQgPSBsZW4gXFx1MDAyNiA3O1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNDExOlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDQxNTpcXHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiA0MTY6XFx0e1xcbiA0MTc6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzQ6MTcuNzg3ODgwNTYxWiIsIlNlcSI6ODMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTUwMTcxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgRml4ZWQgTGVuZ3RoIEZpZWxkcyBhbmQgUG90ZW50aWFsIE92ZXJzaWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkZWNvZGVfYml0c3RyYCBmdW5jdGlvbiBhbmQgSSdtIG5vdGljaW5nIHNvbWV0aGluZyB0aGF0IHNlZW1zIGEgbGl0dGxl4oCmIGluY29uc2lzdGVudC4gV2hlbiBkZWFsaW5nIHdpdGggYFdPUkRgIGFuZCBgU0VNSWAgZmllbGQgdHlwZXMsIHRoZSBjb2RlIGV4cGxpY2l0bHkgY2hlY2tzIHRoZSBib3VuZGFyaWVzIGJlZm9yZSBkZXRlcm1pbmluZyB0aGUgbGVuZ3RoIGFuZCBtb3ZpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IuIEJ1dCwgZm9yIGBGSVhEYCwgaXQgYXBwZWFycyB0byBza2lwIHRoYXQgaW5pdGlhbCBib3VuZGFyeSBjaGVjayBlbnRpcmVseS4gSXQganVzdCBnb2VzIHN0cmFpZ2h0IHRvIHJldHJpZXZpbmcgdGhlIGxlbmd0aCAoYGYtXHUwMDNlbGJgKSwgdGhlbiBpbmNyZW1lbnRzIHRoZSBiaXRzdHJlYW0gY3Vyc29yIChgYnMtXHUwMDNlY3VyYCkgYW5kIGJpdCBvZmZzZXQgKGBicy1cdTAwM2ViaXRgKSBiYXNlZCBvbiB0aGF0IGxlbmd0aCwgYW5kICp0aGVuKiBkb2VzIHRoZSBib3VuZGFyeSBjaGVjay5cblxuVGhhdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIHByb2JsZW0uIFdvdWxkbid0IHNraXBwaW5nIHRoZSBpbml0aWFsIGJvdW5kYXJ5IGNoZWNrIGZvciBgRklYRGAgY3JlYXRlIGEgcG9zc2libGUgb3Bwb3J0dW5pdHkgZm9yIHJlYWRpbmcgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlcj8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSXQgc2VlbXMgdG8gYXNzdW1lIHRoZSBsZW5ndGggc3BlY2lmaWVkIGluIGBmLVx1MDAzZWxiYCBpcyBhbHdheXMgdmFsaWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGBkZWNvZGVfbnVtc3RyYCBoYW5kbGVzIHRoaXMuIElzIGl0IGVtcGxveWluZyBhIHNpbWlsYXIgYXBwcm9hY2gsIHBvdGVudGlhbGx5IHdpdGggdGhlIHNhbWUgdnVsbmVyYWJpbGl0eT8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiB0b28gdG8gc2VlIGlmIHRoZXJlJ3MgYSBwYXR0ZXJuIGhlcmUuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQgaWYgaXQgbGVhZHMgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidXQgc2VyaW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgbmVlZCB0byBhbmFseXplIHRoaXMgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NDIsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDoyMy4yODI5MDE1MTlaIiwiU2VxIjo4NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNDpcXHRzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiA0MTU6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0LyogMiBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSAyNTUgKi9cXG4gNDIyOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxuIDQyMzpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNDI0OlxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCBmLVxcdTAwM2VzeikgKyBmLVxcdTAwM2VsYjtcXG4gNDI1OlxcdFxcbiA0MjY6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDQyNzpcXHRcXHRJTkNfQklUUyhicywgKGxlbiBcXHUwMDNjXFx1MDAzYyAyKSk7XFxuIDQyODpcXHRcXG4gNDI5OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gNDMwOlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiA0MzE6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gNDMyOlxcdH1cXG4gNDMzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDoyMy4yODMwMDUzMzlaIiwiU2VxIjo4NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY5MjI2MzY2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVnVsbmVyYWJpbGl0eSBEZWVwIERpdmU6IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIEguMzIzIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgSC4zMjMgcGFyc2luZyBjb2RlLCBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIGEgcHJldHR5IG5hc3R5IHZ1bG5lcmFiaWxpdHkuIExldCdzIGJyZWFrIGl0IGRvd24uIFRoZSBtYWluIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBib3VuZGFyeSBjaGVja3MgaW4gcmVsYXRpb24gdG8gYml0c3RyZWFtIHBhcnNpbmcgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkluaXRpYWxseSwgSSBub3RpY2VkIHRoYXQgc2V2ZXJhbCBmdW5jdGlvbnMsIGxpa2UgYGRlY29kZV9udW1zdHJgLCBgZGVjb2RlX3NlcWAsIGFuZCBgZGVjb2RlX2Nob2ljZWAsIGNvbnNpc3RlbnRseSBwZXJmb3JtIGJvdW5kYXJ5IGNoZWNrcyAqYmVmb3JlKiBjYWxsaW5nIGBnZXRfYml0KGJzKWAuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4gVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLlxuXG5Ib3dldmVyLCBgZGVjb2RlX2VudW1gIGFwcGVhcnMgdG8gYmUgdGhlIG91dGxpZXIuIEl0IGNhbGxzIGBnZXRfYml0KGJzKWAgKndpdGhvdXQqIGEgcHJpb3IgYm91bmRhcnkgY2hlY2suIFRoaXMgbG9va3MgbGlrZSBhIHByb2JsZW0hIExldCdzIHJldmlzaXQgaXQuXG5gYGBjXG5zdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxue1xuXHRQUklOVChcIiUqcyVzXFxuXCIsIGxldmVsICogVEFCX1NJWkUsIFwiIFwiLCBmLVx1MDAzZW5hbWUpO1xuXG5cdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuXHRcdElOQ19CSVRTKGJzLCA3KTtcblx0fSBlbHNlIHtcblx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG5cdH1cblxuXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG5cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5cdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG59XG5gYGBcblxuTm93LCBkaWdnaW5nIGZ1cnRoZXIsIGBnZXRfYml0KGJzKWAgaXMgdGhlIGN1bHByaXQuXG5gYGBjXG5zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpXG57XG5cdHVuc2lnbmVkIGludCBiID0gKCpicy1cdTAwM2VjdXIpIFx1MDAyNiAoMHg4MCBcdTAwM2VcdTAwM2UgYnMtXHUwMDNlYml0KTtcblxuXHRJTkNfQklUKGJzKTtcblxuXHRyZXR1cm4gYiA/IDEgOiAwO1xufVxuYGBgXG5cblRoaXMgcmVhZHMgYCpicy1cdTAwM2VjdXJgLiBJZiBgYnMtXHUwMDNlY3VyYCBoYXMgYmVlbiBhZHZhbmNlZCBwYXN0IHRoZSB2YWxpZCBkYXRhLCBzYXkgYnkgYSBwcmV2aW91cyBgZGVjb2RlX2ludGAsIHRoaXMgY2FuIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkISBUaGlzIHJlYWQgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIGBicy1cdTAwM2VjdXJgIHBvaW50ZXIgaXMgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBidXQgcG9pbnRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgKmFjdHVhbCogcGFja2V0IGRhdGEgKGBza2ItXHUwMDNlbGVuYCBvciBgZGF0YWxlbmApLiBBbmQgaWYgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhZmZlY3RzIGNvbnRyb2wgZmxvdywgd2UgaGF2ZSBhIHNlcmlvdXMgaXNzdWUhXG5cblNwZWNpZmljYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZ2V0X2JpdChicylgIGlzIHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggd2l0aGluIGBkZWNvZGVfZW51bWAuXG5gYGBjXG5cdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuXHRcdElOQ19CSVRTKGJzLCA3KTtcblx0fSBlbHNlIHtcblx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG5cdH1cbmBgYFxuVGhpcyBpcyBhIGNyaXRpY2FsIGNvbmRpdGlvbmFsIGJyYW5jaCEgVGhlIGV4ZWN1dGlvbiBwYXRoIGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdmFsdWUuIEtBU0FOICptaWdodCogbWlzcyB0aGlzLCBidXQgS01TQU4gKnNob3VsZCogZGVmaW5pdGVseSBjYXRjaCBpdC4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgaGF2ZSBoZXJlLiBUaGUgbWVtb3J5IHBhc3QgYHNrYi1cdTAwM2VsZW5gIG9yIGBkYXRhbGVuYCBpbiBgaDMyM19idWZmZXJgIGlzIHVuaW5pdGlhbGl6ZWQuXG5cbkFuZCBzaW5jZSBga21hbGxvY2AgZG9lcyBub3QgemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYGgzMjNfYnVmZmVyYCBpcyB1bmluaXRpYWxpemVkIHBhc3QgYGRhdGFsZW5gLiBJZiBgYnMtXHUwMDNlY3VyYCByZWFkcyBwYXN0IGBkYXRhbGVuYCwgaXQgcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdpbGwgcmVwb3J0IGEgdXNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUhXG5cbkxldCBtZSB2ZXJpZnkgdGhpcy4gSSd2ZSBhbHNvIGNoZWNrZWQgYGRlY29kZV9pbnRgLCBhbmQgd2hpbGUgaXQgY2hlY2tzIHRoZSBib3VuZGFyeSBiZWZvcmUgKnJlYWRpbmcqIGRhdGEgd2l0aCBgZ2V0X3VpbnRgLCBpdCBzdGlsbCBhZHZhbmNlcyBgYnMtXHUwMDNlY3VyYCBieSBgbGVuYCBieXRlcy4gSWYgdGhpcyBpcyBmb2xsb3dlZCBieSBhIGBkZWNvZGVfZW51bWAsIGl0J2xsIHJlYWQgZnJvbSBiZXlvbmQgdGhlIGJvdW5kYXJ5LCBhbHNvIHJlc3VsdGluZyBpbiB0aGUgc2FtZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIHRoYXQgYGRlY29kZV9lbnVtYCBpcyB0aGUgcHJpbWFyeSBjdWxwcml0LCBidXQgdGhlIHdheSBvdGhlciBmdW5jdGlvbnMgbGlrZSBgZGVjb2RlX2ludGAgaW50ZXJhY3Qgd2l0aCBzdWJzZXF1ZW50IHBhcnNpbmcgc3RlcHMgY2FuIGV4YWNlcmJhdGUgdGhlIGlzc3VlLiBLTVNBTiBpcyB0aGUga2V5IGhlcmUuIEl0IHNob3VsZCB0cmlnZ2VyIGFuZCBnaXZlIHVzIGEgcmVsaWFibGUgcmVwb3J0IG9uIGFueSBhdHRlbXB0cyB0byB1c2UgdGhpcyB1bmluaXRpYWxpemVkIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDEyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM0OjQwLjIwNTY0NDgyN1oiLCJTZXEiOjg2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjExLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjExOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXFxuIDIxMjpcXHR7XFxuIDIxMzpcXHRcXHR1bnNpZ25lZCBpbnQgdiwgbCwgc2hpZnQsIGJ5dGVzO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRpZiAoIWIpXFxuIDIxNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0bCA9IGJzLVxcdTAwM2ViaXQgKyBiO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRpZiAobCBcXHUwMDNjIDgpIHtcXG4gMjIxOlxcdFxcdFxcdHYgPSAodW5zaWduZWQgaW50KSgqYnMtXFx1MDAzZWN1cikgXFx1MDAzY1xcdTAwM2MgKGJzLVxcdTAwM2ViaXQgKyAyNCk7XFxuIDIyMjpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gbDtcXG4gMjIzOlxcdFxcdH0gZWxzZSBpZiAobCA9PSA4KSB7XFxuIDIyNDpcXHRcXHRcXHR2ID0gKHVuc2lnbmVkIGludCkoKmJzLVxcdTAwM2VjdXIrKykgXFx1MDAzY1xcdTAwM2MgKGJzLVxcdTAwM2ViaXQgKyAyNCk7XFxuIDIyNTpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gMDtcXG4gMjI2OlxcdFxcdH0gZWxzZSB7XFxuIDIyNzpcXHRcXHRcXHRmb3IgKGJ5dGVzID0gbCBcXHUwMDNlXFx1MDAzZSAzLCBzaGlmdCA9IDI0LCB2ID0gMDsgYnl0ZXM7XFxuIDIyODpcXHRcXHRcXHQgICAgIGJ5dGVzLS0sIHNoaWZ0IC09IDgpXFxuIDIyOTpcXHRcXHRcXHRcXHR2IHw9ICh1bnNpZ25lZCBpbnQpKCpicy1cXHUwMDNlY3VyKyspIFxcdTAwM2NcXHUwMDNjIHNoaWZ0O1xcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHRcXHRpZiAobCBcXHUwMDNjIDMyKSB7XFxuIDIzMjpcXHRcXHRcXHRcXHR2IHw9ICh1bnNpZ25lZCBpbnQpKCpicy1cXHUwMDNlY3VyKSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4gMjMzOlxcdFxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IGJzLVxcdTAwM2ViaXQ7XFxuIDIzNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGwgXFx1MDAzZSAzMikge1xcbiAyMzU6XFx0XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gYnMtXFx1MDAzZWJpdDtcXG4gMjM2OlxcdFxcdFxcdFxcdHYgfD0gKCpicy1cXHUwMDNlY3VyKSBcXHUwMDNlXFx1MDAzZSAoOCAtIGJzLVxcdTAwM2ViaXQpO1xcbiAyMzc6XFx0XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gbCBcXHUwMDI2IDB4NztcXG4gMjQwOlxcdFxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0diBcXHUwMDI2PSAweGZmZmZmZmZmIFxcdTAwM2NcXHUwMDNjICgzMiAtIGIpO1xcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRyZXR1cm4gdjtcXG4gMjQ1OlxcdH1cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0LypcXG4gMjQ4OlxcdCAqIEFzc3VtZSBicyBpcyBhbGlnbmVkIGFuZCBzaXplb2YodW5zaWduZWQgaW50KSA9PSA0XFxuIDI0OTpcXHQgKi9cXG4gMjUwOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDo0MC4yMDU3NTM5NzdaIiwiU2VxIjo4NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1NjI0MTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQml0bWFwIGFuZCBCaXQgUmV0cmlldmFsIGluIEguMzIzIERlY29kaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgc25pcHBldC4gSSdtIGZvY3VzaW5nIG9uIGhvdyBiaXRtYXBzIGFuZCBiaXRmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBILjMyMyBkZWNvZGluZyBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJIG5lZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBvY2N1ciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRoZSBgZ2V0X2JpdG1hcGAgZnVuY3Rpb24gY2FsbC5cIlxuXG5GaXJzdCwgYGdldF9iaXRtYXBgIGlzIHJlYWRpbmcgZGF0YSBwb2ludGVkIHRvIGJ5IGAqYnMtXHUwMDNlY3VyYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgYXJpc2VzIGlzIHdoZXRoZXIgYGdldF9iaXRtYXBgIGl0c2VsZiBpbmNvcnBvcmF0ZXMgcHJvcGVyIGJvdW5kYXJ5IGNoZWNraW5nLiBJcyBpdCByb2J1c3QgYWdhaW5zdCBhY2Nlc3NpbmcgZGF0YSBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIgYm91bmRhcmllcz9cblxuTG9va2luZyBhdCB0aGUgYGRlY29kZV9zZXFgIGZ1bmN0aW9uLCB0aGVyZSdzIGEgc2FmZXR5IGNoZWNrIGJlaW5nIHBlcmZvcm1lZCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgZ2V0X2JpdG1hcGAuIFRoZSBjb2RlIGNhbGxzIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVx1MDAzZXN6KWAsIHdoaWNoIHNlZW1zIHRvIHByZS12YWxpZGF0ZSB0aGUgaW5wdXQgcGFyYW1ldGVycyByZWxhdGl2ZSB0byB0aGUgYnVmZmVyLiBJZiBpdCBmYWlscywgYEgzMjNfRVJST1JfQk9VTkRgIGlzIHJldHVybmVkLiBBIHNlY29uZCBjaGVjayBpcyBhbHNvIHBlcmZvcm1lZCB0byBlbnN1cmUgYGYtXHUwMDNlc3pgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gVGhpcyBwcmV2ZW50cyBhbiBpbnRlZ2VyIG92ZXJmbG93IGZyb20gcG90ZW50aWFsbHkgY29ycnVwdGluZyBhIGJpdG1hcC5cblxuU28sIGluIHRoZSBjb250ZXh0IG9mIGBkZWNvZGVfc2VxYCwgdGhpcyBsb29rcyByZWFzb25hYmx5IHNhZmU6IGBnZXRfYml0bWFwYCBpcyBiZWluZyBjYWxsZWQgKmFmdGVyKiBhIGJvdW5kYXJ5IGNoZWNrIGFuZCBzaXplIHZhbGlkYXRpb24uXG5cbkhvd2V2ZXIsIHRoZSByZWFsIHB1enpsZSBpczogd2hhdCBhYm91dCBvdGhlciBwb3RlbnRpYWwgY2FsbHMgdG8gYGdldF9iaXRtYXBgIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlPyBBcmUgKnRoZXkqIGFsbCBzaW1pbGFybHkgcHJvdGVjdGVkPyBJIG5lZWQgdG8ga25vdyB3aGVyZSBlbHNlIGl0J3MgdXNlZC5cblxuVGhpcyBsZWFkcyBtZSB0byB0aGluayBhYm91dCBgZ2V0X2JpdHNgLiBJcyBgZ2V0X2JpdHNgIHVzZWQgd2l0aG91dCBzaW1pbGFyIGJvdW5kYXJ5IGNoZWNrcz8gVGhhdCdzIHRoZSBuZXh0IGtleSBhcmVhIHRvIGludmVzdGlnYXRlLCBhcyBwb3RlbnRpYWxseSB1bmNoZWNrZWQgYml0IHJldHJpZXZhbCBjYW4gYmUganVzdCBhcyBwcm9ibGVtYXRpYyBhcyB1bmNoZWNrZWQgYml0bWFwIHJldHJpZXZhbC4gVGhpcyB3b3VsZCBiZSBhIGNydWNpYWwgYXJlYSBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDo0Ny43NjIwMDAxNVoiLCJTZXEiOjg4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2Mjc3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2JpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTAyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTAzOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDQtc3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xNzY9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0KHN0cnVjdCBiaXRzdHIgKmJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg1LS8qIEFzc3VtZSBiIFxcdTAwM2M9IDggKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxODY6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMwLVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMzMTpcXHRcXHRsZW4gPSBnZXRfYml0cyhicywgMikgKyAxO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzMi1cXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTQxND1zdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDIzLVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQyNDpcXHRsZW4gPSBnZXRfYml0cyhicywgZi1cXHUwMDNlc3opICsgZi1cXHUwMDNlbGI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDI1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDM0PXN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00NjctXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDY4OlxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCBmLVxcdTAwM2VzeikgKyBmLVxcdTAwM2VsYjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00NjktXFx0XFx0QllURV9BTElHTihicyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz00ODI9c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5OC1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0OTk6XFx0XFx0bGVuID0gZ2V0X2JpdHMoYnMsIGYtXFx1MDAzZXN6KSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUwMC1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMT1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg2LVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU4NzpcXHRibXAyX2xlbiA9IGdldF9iaXRzKGJzLCA3KSArIDE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBibXAyX2xlbikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDQ9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjgxLVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY4MjpcXHRcXHRjb3VudCA9IGdldF9iaXRzKGJzLCBmLVxcdTAwM2Vzeik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjgzLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTktXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzYwOlxcdFxcdHR5cGUgPSBnZXRfYml0cyhicywgNykgKyBmLVxcdTAwM2VsYjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjEtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTc2NC1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3NjU6XFx0XFx0dHlwZSA9IGdldF9iaXRzKGJzLCBmLVxcdTAwM2Vzeik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzY2LVxcdFxcdGlmICh0eXBlIFxcdTAwM2U9IGYtXFx1MDAzZWxiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNDo0Ny44NTA2MzgxMjFaIiwiU2VxIjo4OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMjkzOTkzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSC4zMjMgUGFyc2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIEknbSBsb29raW5nIGF0IGhvdyB0aGUgSC4zMjMgcGFyc2VyIGhhbmRsZXMgYml0c3RyZWFtIGJvdW5kYXJpZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaXNzdWUgbGllcyBpbiB0aGUgYGRlY29kZV9lbnVtYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUgYml0c3RyZWFtIGBicy1cdTAwM2VjdXJgLlxuXG5UaGUgcGFyc2VyIGNoZWNrcyBib3VuZGFyaWVzIGJlZm9yZSBjYWxsaW5nIGBnZXRfYml0c2AgaW4gbW9zdCBjYXNlcyBhY3Jvc3MgYGRlY29kZV9pbnRgLCBgZGVjb2RlX251bXN0cmAsIGBkZWNvZGVfb2N0c3RyYCwgYGRlY29kZV9ibXBzdHJgLCBgZGVjb2RlX3NlcWAsIGBkZWNvZGVfc2Vxb2ZgLCBhbmQgYGRlY29kZV9jaG9pY2VgLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGl0ICpkb2Vzbid0KiBkbyB0aGlzIGJlZm9yZSB0aGUgaW5pdGlhbCBgZ2V0X2JpdChicylgIGNhbGwgKndpdGhpbiogYGRlY29kZV9lbnVtYCBpZiBhbiBgRVhUYCBhdHRyaWJ1dGUgaXMgc2V0LiAgSSd2ZSBjb25maXJtZWQgdGhhdCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgY2hlY2tlZCBiZWZvcmUgdGhlIG5lc3RlZCBgZ2V0X2JpdGAgY2FsbHMgaW5zaWRlIGBkZWNvZGVfY2hvaWNlYCBhbmQgYGRlY29kZV9zZXFgLlxuXG5UaGlzIG1lYW5zIHRoYXQgaWYgYSBwcmVjZWRpbmcgY2FsbCwgbGlrZSBhIGBkZWNvZGVfaW50YCB3aXRoIGEgXCJDT05TXCIgc2l6ZSBzcGVjaWZpZXIsIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyIChgYnMtXHUwMDNlZW5kYCksIGFuZCB0aGUgKm5leHQqIGZpZWxkIGlzIGEgYGRlY29kZV9lbnVtYCB3aXRoIGFuIGBFWFRgIGF0dHJpYnV0ZSwgYGRlY29kZV9lbnVtYCB3aWxsIGRpcmVjdGx5IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgY291bGQgYmUgaW4gdGhlIHRhaWxyb29tIG9mIGFuIFNLQiBvciBiZXlvbmQgYGRhdGFsZW5gIGluIGBoMzIzX2J1ZmZlcmAuXG5cbkNydWNpYWxseSwgYGdldF9iaXRgIHJldHVybnMgYSAwIG9yIDEsIGFuZCB0aGUgY29kZSBicmFuY2hlcyBiYXNlZCBvbiB0aGlzLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb2RlIGZsb3cgaXMgYWZmZWN0ZWQuIEtNU0FOIGlzIHRoZSB0b29sIHRoYXQncyByZWFsbHkgZ29pbmcgdG8gY2F0Y2ggdGhpcyBhcyBpdCBpcyBkZXNpZ25lZCB0byBjYXRjaCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB2YWx1ZXMgYW5kIHN1YnNlcXVlbnQgdXNhZ2UuIEtBU0FOIHdvbid0IGNhdGNoIGl0IGJlY2F1c2UgdGhlIHJlYWQgaXMgKndpdGhpbiogdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtNU0FOIGhhcyB0aGUgZWRnZSBoZXJlLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBgaDMyM19idWZmZXJgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2Agd2l0aG91dCBgX19HRlBfWkVST2AsIG1lYW5pbmcgaXQncyBub3QgemVyb2VkIG9uIGFsbG9jYXRpb24uIFRodXMsIGFueSBieXRlcyBiZXlvbmQgdGhlIGNvcGllZCBgZGF0YWxlbmAgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBgc2tiX2hlYWRlcl9wb2ludGVyYCBjb3BpZXMgdGhlIG5ldHdvcmsgZGF0YSwgc28gZGF0YSBpbiB0aGUgdGFpbHJvb20gb2YgYSBsaW5lYXIgU0tCIHdpbGwgYWxzbyBiZSB1bmluaXRpYWxpemVkLlxuXG5UaGUgc2NlbmFyaW8gaXMgdGhpczogYSBjcmFmdGVkIEguMzIzIG1lc3NhZ2UgY2F1c2VzIGEgYGRlY29kZV9pbnRgIHRvIG92ZXJydW4gdGhlIGlucHV0LiBTdWJzZXF1ZW50bHksIGBkZWNvZGVfZW51bWAgaXMgZW5jb3VudGVyZWQsIGFuZCBiZWNhdXNlIHRoZSBib3VuZGFyeSBjaGVjayBpcyBza2lwcGVkIHdpdGggdGhlIEVYVCBhdHRyaWJ1dGUsIGl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHJlYWQgdGhlbiBpbmZsdWVuY2VzIHByb2dyYW0gZmxvdy5cblxuSWYgdGhlIG92ZXJydW4gZ29lcyBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGF0IGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlIGRhdGFsZW4sIGFzIGlmIGl0IGFwcHJvYWNoZXMgYEgzMjNfTUFYX1NJWkUgKyAxYCwgdGhlIG92ZXJydW4gZnJvbSBgZGVjb2RlX2ludGAgd2lsbCBsaWtlbHkgZXhjZWVkIHRoZSBhbGxvY2F0aW9uIHNpemUuIEhvd2V2ZXIsIEtNU0FOIGlzIG1vcmUgcm9idXN0IGhlcmUgYmVjYXVzZSBpdCBjYW4gY2F0Y2ggdGhpcyBidWcgZXZlbiBpZiBgYnMtXHUwMDNlY3VyYCBsYW5kcyAqd2l0aGluKiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBidXQgcGFzdCB0aGUgaW5pdGlhbGl6ZWQgZGF0YS5cblxuSSd2ZSBhbHNvIGNoZWNrZWQgYElOQ19CSVRTYCBhbmQgb3RoZXIgYml0ZmllbGQgcmVhZHMgYW5kIGl0IGRvZXMgbm90IGRpcmVjdGx5IHJlYWQgYCpicy1cdTAwM2VjdXJgLiBUaGVyZWZvcmUsIG9ubHkgYGdldF9iaXQoYnMpYCBpcyB2dWxuZXJhYmxlLiBJdCBpcyB1bmxpa2VseSB0aGF0IGFub3RoZXIgZmllbGQgd2lsbCBiZSBhZmZlY3RlZCwgYnV0IGEgbWFsaWNpb3VzbHkgY3JhZnRlZCBtZXNzYWdlIHdvdWxkIGJlIGFibGUgdG8gY2F1c2UgYSBgZGVjb2RlX2ludGAgZm9sbG93ZWQgYnkgYW4gYGRlY29kZV9lbnVtYCwgZW5hYmxpbmcgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBicmFuY2guXG5cblRoZSBjb3JlIGNvbmNsdXNpb24gaGVyZSBpczogS01TQU4gaXMgZ29pbmcgdG8gcmVsaWFibHkgZmluZCB0aGlzIGJ1ZyBiZWNhdXNlIGl0IHRhcmdldHMgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTk1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNToxMy4wODAwNDE3ODRaIiwiU2VxIjo5MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4gMTg3OlxcdHtcXG4gMTg4OlxcdFxcdHVuc2lnbmVkIGludCB2LCBsO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHR2ID0gKCpicy1cXHUwMDNlY3VyKSBcXHUwMDI2ICgweGZmVSBcXHUwMDNlXFx1MDAzZSBicy1cXHUwMDNlYml0KTtcXG4gMTkxOlxcdFxcdGwgPSBiICsgYnMtXFx1MDAzZWJpdDtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0aWYgKGwgXFx1MDAzYyA4KSB7XFxuIDE5NDpcXHRcXHRcXHR2IFxcdTAwM2VcXHUwMDNlPSA4IC0gbDtcXG4gMTk1OlxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSBsO1xcbiAxOTY6XFx0XFx0fSBlbHNlIGlmIChsID09IDgpIHtcXG4gMTk3OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIrKztcXG4gMTk4OlxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbiAxOTk6XFx0XFx0fSBlbHNlIHtcXHRcXHQvKiBsIFxcdTAwM2UgOCAqL1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAyMDI6XFx0XFx0XFx0diArPSAqKCsrYnMtXFx1MDAzZWN1cik7XFxuIDIwMzpcXHRcXHRcXHR2IFxcdTAwM2VcXHUwMDNlPSAxNiAtIGw7XFxuIDIwNDpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gbCAtIDg7XFxuIDIwNTpcXHRcXHR9XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdHJldHVybiB2O1xcbiAyMDg6XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHQvKiBBc3N1bWUgYiBcXHUwMDNjPSAzMiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNToxMy4wODAyMjc3MjRaIiwiU2VxIjo5MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMwNzczOTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBnZXRfYml0c2AgZnVuY3Rpb24gYW5kIHNlZWluZyB0aGF0IGl0IHJlYWRzIGAqYnMtXHUwMDNlY3VyYC4gVGhhdCdzIHdoZXJlIHRoZSBwb3RlbnRpYWwgaXNzdWUgbGllcyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJIHJlbWVtYmVyIHRoYXQgYGdldF9iaXRzYCBpcyB1c2VkIGluIG11bHRpcGxlIGxvY2F0aW9ucywgc28gSSBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBzYWZldHkgaW4gZWFjaCBwbGFjZSBpdCBpcyBjYWxsZWQuXG5cbk15IHByZXZpb3VzIGFuYWx5c2lzIHNob3dzIHRoYXQgYWxsIG9mIHRob3NlIGxvY2F0aW9ucyBjYWxsIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCAqYmVmb3JlKiBjYWxsaW5nIGBnZXRfYml0c2AuIFRoaXMgaXMgZ29vZC4gVGhlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBmdW5jdGlvbiBjaGVja3MgaWYgYGJzLVx1MDAzZWN1ciArIGJ5dGVzIFx1MDAzZSBicy1cdTAwM2VlbmRgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS4gSWYgYGJzLVx1MDAzZWN1cmAgaXMgYWxyZWFkeSBncmVhdGVyIHRoYW4gYGJzLVx1MDAzZWVuZGAsIHRoZW4gYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIHdpbGwgcmV0dXJuIDEsIGFuZCBjcnVjaWFsbHksIGBnZXRfYml0c2AgKndvbid0KiBiZSBjYWxsZWQuIFNvLCBpbiB0aGVzZSBjYXNlcywgYGdldF9iaXRzYCB3aWxsIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ISBHb29kLlxuXG5CdXQgd2FpdCwgd2hhdCBhYm91dCBgZGVjb2RlX2Nob2ljZWA/IEFmdGVyIGEgY2xvc2VyIGxvb2ssIGBkZWNvZGVfY2hvaWNlYCBhbHNvIGNoZWNrcyBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgYmVmb3JlIGNhbGxpbmcgYGdldF9iaXQoYnMpYC4gVGhhdCBpcyBncmVhdCEgSWYgYGJzLVx1MDAzZWN1ciBcdTAwM2UgYnMtXHUwMDNlZW5kYCwgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIHJldHVybnMgMSwgYW5kIHNvIGl0IHJldHVybnMgYEgzMjNfRVJST1JfQk9VTkRgLiBUaGVyZWZvcmUsIGBnZXRfYml0KGJzKWAgaXMgbm90IGNhbGxlZC4gR29vZC5cblxuTm93IEknbSBkaWdnaW5nIGludG8gYGRlY29kZV9lbnVtYC4gSGVyZSB3ZSBoYXZlIGEgcHJvYmxlbS4gYGRlY29kZV9lbnVtYCBET0VTIE5PVCBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgKmJlZm9yZSogY2FsbGluZyBgZ2V0X2JpdChicylgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGJzLVx1MDAzZWN1ciBcdTAwM2UgYnMtXHUwMDNlZW5kYCwgaXQgV0lMTCBjYWxsIGBnZXRfYml0KGJzKWAuIEFuZCBndWVzcyB3aGF0PyBgZ2V0X2JpdChicylgICphbHNvKiByZWFkcyBgKmJzLVx1MDAzZWN1cmAuIFNvLCBgZGVjb2RlX2VudW1gIFdJTEwgcG90ZW50aWFsbHkgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSEgVGhpcyBuZWVkcyB0byBiZSBhZGRyZXNzZWQuXG5cbk5vdyBsZXQgbWUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMuLi5MZXQncyBsb29rIGF0IGBnZXRfbGVuYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0MzQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNToyMi4zODc5NjkxNzVaIiwiU2VxIjo5MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ0OlxcdCAqIEZ1bmN0aW9uc1xcbiAxNDU6XFx0ICovXFxuIDE0NjpcXHRcXG4gMTQ3OlxcdC8qIEFzc3VtZSBicyBpcyBhbGlnbmVkIFxcdTAwMjZcXHUwMDI2IHYgXFx1MDAzYyAxNjM4NCAqL1xcbiAxNDg6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGVuKHN0cnVjdCBiaXRzdHIgKmJzKVxcbiAxNDk6XFx0e1xcbiAxNTA6XFx0XFx0dW5zaWduZWQgaW50IHY7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdHYgPSAqYnMtXFx1MDAzZWN1cisrO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpZiAodiBcXHUwMDI2IDB4ODApIHtcXG4gMTU1OlxcdFxcdFxcdHYgXFx1MDAyNj0gMHgzZjtcXG4gMTU2OlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDE1NzpcXHRcXHRcXHR2ICs9ICpicy1cXHUwMDNlY3VyKys7XFxuIDE1ODpcXHRcXHR9XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdHJldHVybiB2O1xcbiAxNjE6XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRzdGF0aWMgaW50IG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoc3RydWN0IGJpdHN0ciAqYnMsIHNpemVfdCBieXRlcywgc2l6ZV90IGJpdHMpXFxuIDE2NDpcXHR7XFxuIDE2NTpcXHRcXHRiaXRzICs9IGJzLVxcdTAwM2ViaXQ7XFxuIDE2NjpcXHRcXHRieXRlcyArPSBiaXRzIC8gQklUU19QRVJfQllURTtcXG4gMTY3OlxcdFxcdGlmIChiaXRzICUgQklUU19QRVJfQllURSBcXHUwMDNlIDApXFxuIDE2ODpcXHRcXHRcXHRieXRlcysrO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRpZiAoYnMtXFx1MDAzZWN1ciArIGJ5dGVzIFxcdTAwM2UgYnMtXFx1MDAzZWVuZClcXG4gMTcxOlxcdFxcdFxcdHJldHVybiAxO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzU6MjIuMzg4MDU1MDA1WiIsIlNlcSI6OTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NTg4Mjg1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gSC4yMjUgUGFyc2VyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcGlucG9pbnRpbmcgd2hlcmUgdGhlIGNvZGUgKmNvdWxkKiBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoaXMgSC4yMjUgcGFyc2luZyBjb250ZXh0LlxuXG5Jbml0aWFsbHksIEknbSB0cmFjaW5nIGBnZXRfbGVuYCwgYW5kIHRoZSBjYWxscyB0byBpdCB3aXRoaW4gdGhlIHZhcmlvdXMgYGRlY29kZV8qYCBmdW5jdGlvbnMgKGBkZWNvZGVfaW50YCwgYGRlY29kZV9iaXRzdHJgLCBgZGVjb2RlX29jdHN0cmAsIGV0Yy4pLiBJdCdzIHByZXR0eSBjb25zaXN0ZW50OiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgY2FsbGVkICpiZWZvcmUqIGBnZXRfbGVuYCBpbiBhbGwgb2YgdGhvc2UuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgZ2V0X2xlbmAgaXRzZWxmIGlzbid0IGEgbGlrZWx5IHNvdXJjZSBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIGluICp0aG9zZSogY29udGV4dHMuIEknbSBmb2N1c2luZyBvbiB0aGUgKm9uZSogbm90YWJsZSBleGNlcHRpb246IHRoZSBgZGVjb2RlX29pZGAgY2FzZSByZWFkcyBgKmJzLVx1MDAzZWN1cisrYCB3aXRob3V0IGFueSBwcmlvciBib3VuZGFyeSBjaGVjay4gT2theSwgdGhhdCdzIHNvbWV0aGluZyB0byBtYWtlIGEgbm90ZSBvZiwgaG93ZXZlciBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgKmlzKiB1c2VkIGJlZm9yZSB0aGUgcmVhZC5cblxuVGhlbiB0aGVyZSdzIGBkZWNvZGVfYml0c3RyYC4gVGhlIGBXT1JEYCBjYXNlICpkb2VzKiBoYXZlIGEgYm91bmRhcnkgY2hlY2ssIGJ1dCBpdCdzIHVzZWQgYmVmb3JlIHJlYWRpbmcgYGxlbiA9ICgqYnMtXHUwMDNlY3VyKyspIFx1MDAzY1x1MDAzYyA4YC4gVGhpcyBtZWFucyBpdCAqYXBwZWFycyogdG8gaGF2ZSB0aGUgc2FtZSBwcm90ZWN0aW9ucy5cblxuU28sIEknbSBob25pbmcgaW4gb24gYGRlY29kZV9lbnVtYC4gVGhpcyBpcyB3aGVyZSBgZ2V0X2JpdChicylgIGlzIHVzZWQsIGFuZCAqdGhpcyogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgYml0LWxldmVsIHJlYWQgZnJvbSBgKmJzLVx1MDAzZWN1cmAuIE5vdywgaWYgYGRlY29kZV9lbnVtYCBpcyBjYWxsZWQgd2hlbiBgYnMtXHUwMDNlY3VyIFx1MDAzZSBicy1cdTAwM2VlbmRgLCAqdGhhdCdzKiBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kLCBjcml0aWNhbGx5LCBpdCBjb3VsZCBiZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHdoYXQgS01TQU4gc2hvdWxkIGNhdGNoLlxuXG5UaGUga2V5IGlzIHRoYXQgaWYgYGRlY29kZV9lbnVtYCByZWFkcyBwYXN0IHRoZSB2YWxpZCBwYWNrZXQgZGF0YSwgaXQncyByZWFkaW5nIGdhcmJhZ2UsIHdoaWNoIEtNU0FOIGNhbiBkZXRlY3QuIEtBU0FOIGlzIHVubGlrZWx5IHRvIGNhdGNoIHRoaXMgdW5sZXNzIGBicy1cdTAwM2VjdXJgIGdvZXMgcGFzdCB0aGUgKmFsbG9jYXRlZCogYnVmZmVyLCB3aGljaCBpcyBsZXNzIGxpa2VseSBpZiB0aGUgcGFja2V0IGlzIHNtYWxsLiBUaGlzIGltcGxpZXMgYSBzaWduaWZpY2FudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgY2F1Z2h0IGJ5IEtNU0FOLCB3aGljaCBpcyBpbXBvcnRhbnQuXG5cbkkgdGhlbiBnbyBvbiB0byBldmFsdWF0ZSB0aGUgZWZmZWN0IG9mIHRoZSBidWcgb24gYGRlY29kZV9pbnRgLCBtb3JlIHNwZWNpZmljYWxseSB3aGVuIGBiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpYCBpcyBmYWxzZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBwYXRjaC5cblxuSW5pdGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgYGRlY29kZV9pbnRgICpjb3VsZCogc2tpcCBkYXRhIHdoZW4gYGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSlgIGlzIGZhbHNlLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsIHJldmlldywgaXQncyBhcHBhcmVudCB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgY2FzZSB3aGVuIHRoZSBjb25kaXRpb24gaXMgKnRydWUqLCBjb3JyZWN0aW5nIGEgZG91YmxlLWluY3JlbWVudCBvZiBgYnMtXHUwMDNlY3VyYC4gVGh1cywgYGRlY29kZV9pbnRgIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gIE9OQ0Ugd2hlbiBgYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKWAgaXMgZmFsc2UuIE5vdywgd2hlbiB0aGUgY29uZGl0aW9uICppcyogdHJ1ZSwgaXQgYWR2YW5jZXMgYGJzLVx1MDAzZWN1cmAgVFdJQ0UuIFRoZSBwYXRjaCBjb3JyZWN0bHkgZW5zdXJlcyBgYnMtXHUwMDNlY3VyYCBpcyBhZHZhbmNlZCBieSBgbGVuYCAqb25jZSogaW4gYWxsIGNhc2VzLiBUaGlzIGNvcnJlY3RzIGRhdGEgcGFyc2luZyBpc3N1ZXMgKGJ1dCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkhKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzU6NDAuOTc2MzQ1NjVaIiwiU2VxIjo5NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg0MTY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUNPREVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz03PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3NbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4OlxcdHtGTkFNRShcXFwiaXBcXFwiKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOS1cXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MsIGlwKSwgTlVMTH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9UcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3NbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzozODpcXHR7Rk5BTUUoXFxcImlwXFxcIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgREVDT0RFLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0zOS1cXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzLCBpcCksIE5VTEx9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVHJhbnNwb3J0QWRkcmVzc1tdID0ge1xcdC8qIENIT0lDRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo2MjpcXHR7Rk5BTUUoXFxcImlwQWRkcmVzc1xcXCIpIFNFUSwgMCwgMiwgMiwgREVDT0RFLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02My1cXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzcywgaXBBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02Ny1cXHQgX1RyYW5zcG9ydEFkZHJlc3NfaXB4QWRkcmVzc30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjY4OlxcdHtGTkFNRShcXFwiaXA2QWRkcmVzc1xcXCIpIFNFUSwgMCwgMiwgMiwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy02OS1cXHQgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzcywgaXA2QWRkcmVzcyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NDg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbltdID0ge1xcdC8qIENIT0lDRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTQ4Ni1cXHQgX0gyNDVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo0ODc6XFx0e0ZOQU1FKFxcXCJ0MTIwXFxcIikgQ0hPSUNFLCAzLCA3LCAxNCwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy00ODgtXFx0IG9mZnNldG9mKERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb24sIHQxMjApLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTUxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo1MTI6XFx0e0ZOQU1FKFxcXCJhcHBsaWNhdGlvblxcXCIpIENIT0lDRSwgNCwgMTAsIDE0LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTUxMy1cXHQgb2Zmc2V0b2YoRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eSwgYXBwbGljYXRpb24pLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0RhdGFUeXBlW10gPSB7XFx0LyogQ0hPSUNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNTMwLVxcdCBfQXVkaW9DYXBhYmlsaXR5fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NTMxOlxcdHtGTkFNRShcXFwiZGF0YVxcXCIpIFNFUSwgMCwgMiwgMiwgREVDT0RFIHwgRVhULCBvZmZzZXRvZihEYXRhVHlwZSwgZGF0YSksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTUzMi1cXHQgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHl9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTYyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1VuaWNhc3RBZGRyZXNzX2lQQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjYyOTpcXHR7Rk5BTUUoXFxcIm5ldHdvcmtcXFwiKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNjMwLVxcdCBvZmZzZXRvZihVbmljYXN0QWRkcmVzc19pUEFkZHJlc3MsIG5ldHdvcmspLCBOVUxMfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz02NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9VbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NjQxOlxcdHtGTkFNRShcXFwibmV0d29ya1xcXCIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNjQyLVxcdCBvZmZzZXRvZihVbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzLCBuZXR3b3JrKSwgTlVMTH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NbXSA9IHtcXHQvKiBDSE9JQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NjY1OlxcdHtGTkFNRShcXFwiaVBBZGRyZXNzXFxcIikgU0VRLCAwLCAyLCAyLCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTY2Ni1cXHQgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQQWRkcmVzcyksIF9VbmljYXN0QWRkcmVzc19pUEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTY2OC1cXHQgX1VuaWNhc3RBZGRyZXNzX2lQWEFkZHJlc3N9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo2Njk6XFx0e0ZOQU1FKFxcXCJpUDZBZGRyZXNzXFxcIikgU0VRLCAwLCAyLCAyLCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTY3MC1cXHQgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQNkFkZHJlc3MpLCBfVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9Njk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfSDI0NV9UcmFuc3BvcnRBZGRyZXNzW10gPSB7XFx0LyogQ0hPSUNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjY5ODpcXHR7Rk5BTUUoXFxcInVuaWNhc3RBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA1LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTY5OS1cXHQgb2Zmc2V0b2YoSDI0NV9UcmFuc3BvcnRBZGRyZXNzLCB1bmljYXN0QWRkcmVzcyksIF9VbmljYXN0QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NzA0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTcwOC1cXHR7Rk5BTUUoXFxcImFzc29jaWF0ZWRTZXNzaW9uSURcXFwiKSBJTlQsIDgsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3MDk6XFx0e0ZOQU1FKFxcXCJtZWRpYUNoYW5uZWxcXFwiKSBDSE9JQ0UsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNzEwLVxcdCBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywgbWVkaWFDaGFubmVsKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03MTMtXFx0IE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3MTQ6XFx0e0ZOQU1FKFxcXCJtZWRpYUNvbnRyb2xDaGFubmVsXFxcIikgQ0hPSUNFLCAxLCAyLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTcxNS1cXHQgb2Zmc2V0b2YoSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsIG1lZGlhQ29udHJvbENoYW5uZWwpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTczMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNbXSA9IHtcXHQvKiBDSE9JQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03MzYtXFx0IF9WNzZMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3Mzc6XFx0e0ZOQU1FKFxcXCJoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1xcXCIpIFNFUSwgMTAsIDExLCAxNCwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03MzgtXFx0IG9mZnNldG9mXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03NDUtXFx0e0ZOQU1FKFxcXCJwb3J0TnVtYmVyXFxcIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6NzQ2OlxcdHtGTkFNRShcXFwiZGF0YVR5cGVcXFwiKSBDSE9JQ0UsIDMsIDYsIDksIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNzQ3LVxcdCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtNzQ4LVxcdFxcdCAgZGF0YVR5cGUpLCBfRGF0YVR5cGV9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3NDk6XFx0e0ZOQU1FKFxcXCJtdWx0aXBsZXhQYXJhbWV0ZXJzXFxcIikgQ0hPSUNFLCAyLCAzLCA1LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc1MC1cXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9NzU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc1tdID0ge1xcdC8qIENIT0lDRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc2Mi1cXHQgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjc2MzpcXHR7Rk5BTUUoXFxcImgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXFxcIikgU0VRLCAxMCwgMTEsIDE0LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc2NC1cXHQgb2Zmc2V0b2ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz03Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1tdID0ge1xcdC8qIFNFUVVFTkNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc3MC1cXHR7Rk5BTUUoXFxcImRhdGFUeXBlXFxcIikgQ0hPSUNFLCAzLCA2LCA5LCBTS0lQIHwgRVhULCAwLCBfRGF0YVR5cGV9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo3NzE6XFx0e0ZOQU1FKFxcXCJtdWx0aXBsZXhQYXJhbWV0ZXJzXFxcIikgQ0hPSUNFLCAxLCAyLCAzLCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTc3Mi1cXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9Nzk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfbmV0d29ya0FkZHJlc3NbXSA9IHtcXHQvKiBDSE9JQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy03OTgtXFx0e0ZOQU1FKFxcXCJlMTY0QWRkcmVzc1xcXCIpIE5VTURHVCwgNywgMSwgMCwgU0tJUCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjc5OTpcXHR7Rk5BTUUoXFxcImxvY2FsQXJlYUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtODAwLVxcdCBvZmZzZXRvZihOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzcywgbG9jYWxBcmVhQWRkcmVzcyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9ODA0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgwNi1cXHQgX05ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX2Rpc3RyaWJ1dGlvbn0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjgwNzpcXHR7Rk5BTUUoXFxcIm5ldHdvcmtBZGRyZXNzXFxcIikgQ0hPSUNFLCAyLCAzLCAzLCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgwOC1cXHQgb2Zmc2V0b2YoTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnMsIG5ldHdvcmtBZGRyZXNzKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz04MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MTctXFx0e0ZOQU1FKFxcXCJmb3J3YXJkTG9naWNhbENoYW5uZWxOdW1iZXJcXFwiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4MTg6XFx0e0ZOQU1FKFxcXCJmb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXFxcIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgxOS1cXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsLCBmb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjEtXFx0e0ZOQU1FKFxcXCJyZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXFxcIikgU0VRLCAxLCAyLCA0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4MjI6XFx0IERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjMtXFx0XFx0XFx0XFx0ICAgICAgcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTgyNC1cXHQgX09wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODI1OlxcdHtGTkFNRShcXFwic2VwYXJhdGVTdGFja1xcXCIpIFNFUSwgMiwgNCwgNSwgREVDT0RFIHwgRVhUIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MjYtXFx0IG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCwgc2VwYXJhdGVTdGFjayksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9ODMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfU2V0dXBfVVVJRV9mYXN0U3RhcnRbXSA9IHtcXHQvKiBTRVFVRU5DRSBPRiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4MzI6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MzMtXFx0IHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1NldHVwX1VVSUVbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04MzgtXFx0e0ZOQU1FKFxcXCJwcm90b2NvbElkZW50aWZpZXJcXFwiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4Mzk6XFx0e0ZOQU1FKFxcXCJoMjQ1QWRkcmVzc1xcXCIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04NDAtXFx0IG9mZnNldG9mKFNldHVwX1VVSUUsIGgyNDVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg0NS1cXHQgX1NldHVwX1VVSUVfZGVzdGluYXRpb25BZGRyZXNzfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODQ2OlxcdHtGTkFNRShcXFwiZGVzdENhbGxTaWduYWxBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg0Ny1cXHQgb2Zmc2V0b2YoU2V0dXBfVVVJRSwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg1OC1cXHR7Rk5BTUUoXFxcImNhbGxUeXBlXFxcIikgQ0hPSUNFLCAyLCA0LCA0LCBTS0lQIHwgRVhULCAwLCBfQ2FsbFR5cGV9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo4NTk6XFx0e0ZOQU1FKFxcXCJzb3VyY2VDYWxsU2lnbmFsQWRkcmVzc1xcXCIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy04NjAtXFx0IG9mZnNldG9mKFNldHVwX1VVSUUsIHNvdXJjZUNhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg2Ny1cXHR7Rk5BTUUoXFxcImNyeXB0b1Rva2Vuc1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6ODY4OlxcdHtGTkFNRShcXFwiZmFzdFN0YXJ0XFxcIikgU0VRT0YsIFNFTUksIDAsIDMwLCBERUNPREUgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg2OS1cXHQgb2Zmc2V0b2YoU2V0dXBfVVVJRSwgZmFzdFN0YXJ0KSwgX1NldHVwX1VVSUVfZmFzdFN0YXJ0fSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz04OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9DYWxsUHJvY2VlZGluZ19VVUlFX2Zhc3RTdGFydFtdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjg5NzpcXHR7Rk5BTUUoXFxcIml0ZW1cXFwiKSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTg5OC1cXHQgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQ2FsbFByb2NlZWRpbmdfVVVJRVtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTA1LVxcdCBfRW5kcG9pbnRUeXBlfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTA2OlxcdHtGTkFNRShcXFwiaDI0NUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTA3LVxcdCBvZmZzZXRvZihDYWxsUHJvY2VlZGluZ19VVUlFLCBoMjQ1QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MTItXFx0e0ZOQU1FKFxcXCJjcnlwdG9Ub2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjkxMzpcXHR7Rk5BTUUoXFxcImZhc3RTdGFydFxcXCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05MTQtXFx0IG9mZnNldG9mKENhbGxQcm9jZWVkaW5nX1VVSUUsIGZhc3RTdGFydCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQ29ubmVjdF9VVUlFX2Zhc3RTdGFydFtdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjkyMzpcXHR7Rk5BTUUoXFxcIml0ZW1cXFwiKSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTkyNC1cXHQgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQ29ubmVjdF9VVUlFW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTI5LVxcdHtGTkFNRShcXFwicHJvdG9jb2xJZGVudGlmaWVyXFxcIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTMwOlxcdHtGTkFNRShcXFwiaDI0NUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTMxLVxcdCBvZmZzZXRvZihDb25uZWN0X1VVSUUsIGgyNDVBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTkzOS1cXHR7Rk5BTUUoXFxcImNyeXB0b1Rva2Vuc1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6OTQwOlxcdHtGTkFNRShcXFwiZmFzdFN0YXJ0XFxcIikgU0VRT0YsIFNFTUksIDAsIDMwLCBERUNPREUgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk0MS1cXHQgb2Zmc2V0b2YoQ29ubmVjdF9VVUlFLCBmYXN0U3RhcnQpLCBfQ29ubmVjdF9VVUlFX2Zhc3RTdGFydH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9OTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnRbXSA9IHtcXHQvKiBTRVFVRU5DRSBPRiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo5NTc6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy05NTgtXFx0IHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0FsZXJ0aW5nX1VVSUVbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk2NS1cXHQgX0VuZHBvaW50VHlwZX0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjk2NjpcXHR7Rk5BTUUoXFxcImgyNDVBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTk2Ny1cXHQgb2Zmc2V0b2YoQWxlcnRpbmdfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTcyLVxcdHtGTkFNRShcXFwiY3J5cHRvVG9rZW5zXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzo5NzM6XFx0e0ZOQU1FKFxcXCJmYXN0U3RhcnRcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtOTc0LVxcdCBvZmZzZXRvZihBbGVydGluZ19VVUlFLCBmYXN0U3RhcnQpLCBfQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnR9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEwNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9GYWNpbGl0eV9VVUlFX2Zhc3RTdGFydFtdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEwNjA6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDYxLVxcdCBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xMDY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfRmFjaWxpdHlfVVVJRVtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEwNjYtXFx0e0ZOQU1FKFxcXCJwcm90b2NvbElkZW50aWZpZXJcXFwiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMDY3OlxcdHtGTkFNRShcXFwiYWx0ZXJuYXRpdmVBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEwNjgtXFx0IG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIGFsdGVybmF0aXZlQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMDcxLVxcdHtGTkFNRShcXFwiY29uZmVyZW5jZUlEXFxcIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEwNzI6XFx0e0ZOQU1FKFxcXCJyZWFzb25cXFwiKSBDSE9JQ0UsIDIsIDQsIDExLCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEwNzMtXFx0IG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIHJlYXNvbiksIF9GYWNpbGl0eVJlYXNvbn0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTA4MC1cXHR7Rk5BTUUoXFxcImNvbmZlcmVuY2VzXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMDgxOlxcdHtGTkFNRShcXFwiaDI0NUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTA4Mi1cXHQgb2Zmc2V0b2YoRmFjaWxpdHlfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEwODM6XFx0e0ZOQU1FKFxcXCJmYXN0U3RhcnRcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTA4NC1cXHQgb2Zmc2V0b2YoRmFjaWxpdHlfVVVJRSwgZmFzdFN0YXJ0KSwgX0ZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0fSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xMzAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUHJvZ3Jlc3NfVVVJRV9mYXN0U3RhcnRbXSA9IHtcXHQvKiBTRVFVRU5DRSBPRiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzA0OlxcdHtGTkFNRShcXFwiaXRlbVxcXCIpIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMwNS1cXHQgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1Byb2dyZXNzX1VVSUVbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzMTItXFx0IF9FbmRwb2ludFR5cGV9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzEzOlxcdHtGTkFNRShcXFwiaDI0NUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMxNC1cXHQgb2Zmc2V0b2YoUHJvZ3Jlc3NfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMyMi1cXHQgX1Byb2dyZXNzX1VVSUVfY3J5cHRvVG9rZW5zfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTMyMzpcXHR7Rk5BTUUoXFxcImZhc3RTdGFydFxcXCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzI0LVxcdCBvZmZzZXRvZihQcm9ncmVzc19VVUlFLCBmYXN0U3RhcnQpLCBfUHJvZ3Jlc3NfVVVJRV9mYXN0U3RhcnR9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9IMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keVtdID0ge1xcdC8qIENIT0lDRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzMxOlxcdHtGTkFNRShcXFwic2V0dXBcXFwiKSBTRVEsIDcsIDEzLCAzOSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzMyLVxcdCBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgc2V0dXApLCBfU2V0dXBfVVVJRX0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzMzM6XFx0e0ZOQU1FKFxcXCJjYWxsUHJvY2VlZGluZ1xcXCIpIFNFUSwgMSwgMywgMTIsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMzNC1cXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIGNhbGxQcm9jZWVkaW5nKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMzNS1cXHQgX0NhbGxQcm9jZWVkaW5nX1VVSUV9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzM2OlxcdHtGTkFNRShcXFwiY29ubmVjdFxcXCIpIFNFUSwgMSwgNCwgMTksIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTMzNy1cXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIGNvbm5lY3QpLCBfQ29ubmVjdF9VVUlFfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTMzODpcXHR7Rk5BTUUoXFxcImFsZXJ0aW5nXFxcIikgU0VRLCAxLCAzLCAxNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzM5LVxcdCBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgYWxlcnRpbmcpLCBfQWxlcnRpbmdfVVVJRX0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM0Mi1cXHQgX1JlbGVhc2VDb21wbGV0ZV9VVUlFfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTM0MzpcXHR7Rk5BTUUoXFxcImZhY2lsaXR5XFxcIikgU0VRLCAzLCA1LCAyMSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzQ0LVxcdCBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgZmFjaWxpdHkpLCBfRmFjaWxpdHlfVVVJRX0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzNDU6XFx0e0ZOQU1FKFxcXCJwcm9ncmVzc1xcXCIpIFNFUSwgNSwgOCwgMTEsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTM0Ni1cXHQgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIHByb2dyZXNzKSwgX1Byb2dyZXNzX1VVSUV9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZXF1ZXN0TWVzc2FnZVtdID0ge1xcdC8qIENIT0lDRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzNTctXFx0e0ZOQU1FKFxcXCJ0ZXJtaW5hbENhcGFiaWxpdHlTZXRcXFwiKSBTRVEsIDMsIDUsIDUsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxMzU4OlxcdHtGTkFNRShcXFwib3BlbkxvZ2ljYWxDaGFubmVsXFxcIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzNTktXFx0IG9mZnNldG9mKFJlcXVlc3RNZXNzYWdlLCBvcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xMzc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc1tdID0ge1xcdC8qIENIT0lDRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzNzYtXFx0IF9IMjIyTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTM3NzpcXHR7Rk5BTUUoXFxcImgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXFxcIikgU0VRLCAxMCwgMTEsIDE0LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzNzgtXFx0IG9mZnNldG9mXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTM4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xMzg1LVxcdHtGTkFNRShcXFwicG9ydE51bWJlclxcXCIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjEzODY6XFx0e0ZOQU1FKFxcXCJtdWx0aXBsZXhQYXJhbWV0ZXJzXFxcIikgQ0hPSUNFLCAwLCAxLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTEzODctXFx0IG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTEzOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9IMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc1tdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQwMC1cXHR7Rk5BTUUoXFxcInNlc3Npb25JRFxcXCIpIElOVCwgOCwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0MDE6XFx0e0ZOQU1FKFxcXCJtZWRpYUNoYW5uZWxcXFwiKSBDSE9JQ0UsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQwMi1cXHQgb2Zmc2V0b2YoSDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnMsIG1lZGlhQ2hhbm5lbCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MDMtXFx0IF9IMjQ1X1RyYW5zcG9ydEFkZHJlc3N9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDA0OlxcdHtGTkFNRShcXFwibWVkaWFDb250cm9sQ2hhbm5lbFxcXCIpIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhUIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDA1LVxcdCBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycywgbWVkaWFDb250cm9sQ2hhbm5lbCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTQxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja19mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVyc1tdID0ge1xcdC8qIENIT0lDRSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDEzOlxcdHtGTkFNRShcXFwiaDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnNcXFwiKSBTRVEsIDUsIDUsIDcsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQxNC1cXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE0MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxBY2tbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0MjEtXFx0e0ZOQU1FKFxcXCJyZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzXFxcIikgU0VRLCAyLCAzLCA0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDIyOlxcdCBERUNPREUgfCBFWFQgfCBPUFQsIG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbEFjayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQyMy1cXHRcXHRcXHRcXHQgICAgICByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQyNC1cXHQgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQyNTpcXHR7Rk5BTUUoXFxcInNlcGFyYXRlU3RhY2tcXFwiKSBTRVEsIDIsIDQsIDUsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQyNi1cXHQgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLCBzZXBhcmF0ZVN0YWNrKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDI4LVxcdHtGTkFNRShcXFwiZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnNcXFwiKSBDSE9JQ0UsIDAsIDEsIDEsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0Mjk6XFx0IERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDMwLVxcdFxcdFxcdFxcdCAgICAgIGZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNDM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVzcG9uc2VNZXNzYWdlW10gPSB7XFx0LyogQ0hPSUNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQ0My1cXHQgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0NDQ6XFx0e0ZOQU1FKFxcXCJvcGVuTG9naWNhbENoYW5uZWxBY2tcXFwiKSBTRVEsIDEsIDIsIDUsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQ0NS1cXHQgb2Zmc2V0b2YoUmVzcG9uc2VNZXNzYWdlLCBvcGVuTG9naWNhbENoYW5uZWxBY2spLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE0NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9NdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VbXSA9IHtcXHQvKiBDSE9JQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQ3MjpcXHR7Rk5BTUUoXFxcInJlcXVlc3RcXFwiKSBDSE9JQ0UsIDQsIDExLCAxNSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDczLVxcdCBvZmZzZXRvZihNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UsIHJlcXVlc3QpLCBfUmVxdWVzdE1lc3NhZ2V9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDc0OlxcdHtGTkFNRShcXFwicmVzcG9uc2VcXFwiKSBDSE9JQ0UsIDUsIDE5LCAyNCwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDc1LVxcdCBvZmZzZXRvZihNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UsIHJlc3BvbnNlKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNDgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfSDMyM19VVV9QRFVfaDI0NUNvbnRyb2xbXSA9IHtcXHQvKiBTRVFVRU5DRSBPRiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNDgyOlxcdHtGTkFNRShcXFwiaXRlbVxcXCIpIENIT0lDRSwgMiwgNCwgNCwgREVDT0RFIHwgT1BFTiB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTQ4My1cXHQgc2l6ZW9mKE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTQ4OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gzMjNfVVVfUERVW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTQ4OTpcXHR7Rk5BTUUoXFxcImgzMjMtbWVzc2FnZS1ib2R5XFxcIikgQ0hPSUNFLCAzLCA3LCAxMywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNDkwLVxcdCBvZmZzZXRvZihIMzIzX1VVX1BEVSwgaDMyM19tZXNzYWdlX2JvZHkpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0OTYtXFx0e0ZOQU1FKFxcXCJoMjQ1VHVubmVsaW5nXFxcIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE0OTc6XFx0e0ZOQU1FKFxcXCJoMjQ1Q29udHJvbFxcXCIpIFNFUU9GLCBTRU1JLCAwLCA0LCBERUNPREUgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE0OTgtXFx0IG9mZnNldG9mKEgzMjNfVVVfUERVLCBoMjQ1Q29udHJvbCksIF9IMzIzX1VVX1BEVV9oMjQ1Q29udHJvbH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTUwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0gzMjNfVXNlckluZm9ybWF0aW9uW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTUxMDpcXHR7Rk5BTUUoXFxcImgzMjMtdXUtcGR1XFxcIikgU0VRLCAxLCAyLCAxMSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTExLVxcdCBvZmZzZXRvZihIMzIzX1VzZXJJbmZvcm1hdGlvbiwgaDMyM191dV9wZHUpLCBfSDMyM19VVV9QRFV9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9HYXRla2VlcGVyUmVxdWVzdFtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTUxOS1cXHQgX05vblN0YW5kYXJkUGFyYW1ldGVyfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTUyMDpcXHR7Rk5BTUUoXFxcInJhc0FkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTUyMS1cXHQgb2Zmc2V0b2YoR2F0ZWtlZXBlclJlcXVlc3QsIHJhc0FkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0dhdGVrZWVwZXJDb25maXJtW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTQ0LVxcdHtGTkFNRShcXFwiZ2F0ZWtlZXBlcklkZW50aWZpZXJcXFwiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTQ1OlxcdHtGTkFNRShcXFwicmFzQWRkcmVzc1xcXCIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTQ2LVxcdCBvZmZzZXRvZihHYXRla2VlcGVyQ29uZmlybSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1NjA6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1NjEtXFx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTU2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RfcmFzQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1NjY6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1NjctXFx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTU3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1ODAtXFx0e0ZOQU1FKFxcXCJkaXNjb3ZlcnlDb21wbGV0ZVxcXCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTgxOlxcdHtGTkFNRShcXFwiY2FsbFNpZ25hbEFkZHJlc3NcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU4Mi1cXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uUmVxdWVzdCwgY2FsbFNpZ25hbEFkZHJlc3MpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTgzLVxcdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzc30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1ODQ6XFx0e0ZOQU1FKFxcXCJyYXNBZGRyZXNzXFxcIikgU0VRT0YsIFNFTUksIDAsIDEwLCBERUNPREUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1ODUtXFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHJhc0FkZHJlc3MpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTMtXFx0e0ZOQU1FKFxcXCJhbHRlcm5hdGVFbmRwb2ludHNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1OTQ6XFx0e0ZOQU1FKFxcXCJ0aW1lVG9MaXZlXFxcIikgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTUtXFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHRpbWVUb0xpdmUpLCBOVUxMfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNjIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uQ29uZmlybV9jYWxsU2lnbmFsQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2MjQ6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2MjUtXFx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2MzctXFx0IF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2Mzg6XFx0e0ZOQU1FKFxcXCJjYWxsU2lnbmFsQWRkcmVzc1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjM5LVxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCBjYWxsU2lnbmFsQWRkcmVzcyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0NS1cXHR7Rk5BTUUoXFxcImFsdGVybmF0ZUdhdGVrZWVwZXJcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XFx0e0ZOQU1FKFxcXCJ0aW1lVG9MaXZlXFxcIikgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDctXFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvbkNvbmZpcm0sIHRpbWVUb0xpdmUpLCBOVUxMfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNjY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzW10gPSB7XFx0LyogU0VRVUVOQ0UgT0YgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY3MDpcXHR7Rk5BTUUoXFxcIml0ZW1cXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY3MS1cXHQgc2l6ZW9mKFRyYW5zcG9ydEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc31cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNjc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfVW5yZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY3Ni1cXHR7Rk5BTUUoXFxcInJlcXVlc3RTZXFOdW1cXFwiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNjc3OlxcdHtGTkFNRShcXFwiY2FsbFNpZ25hbEFkZHJlc3NcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY3OC1cXHQgb2Zmc2V0b2YoVW5yZWdpc3RyYXRpb25SZXF1ZXN0LCBjYWxsU2lnbmFsQWRkcmVzcyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTcxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0FkbWlzc2lvblJlcXVlc3RbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE3MTktXFx0IF9BZG1pc3Npb25SZXF1ZXN0X2Rlc3RpbmF0aW9uSW5mb30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE3MjA6XFx0e0ZOQU1FKFxcXCJkZXN0Q2FsbFNpZ25hbEFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTcyMS1cXHQgb2Zmc2V0b2YoQWRtaXNzaW9uUmVxdWVzdCwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNzI2LVxcdCBfQWRtaXNzaW9uUmVxdWVzdF9zcmNJbmZvfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTcyNzpcXHR7Rk5BTUUoXFxcInNyY0NhbGxTaWduYWxBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE3MjgtXFx0IG9mZnNldG9mKEFkbWlzc2lvblJlcXVlc3QsIHNyY0NhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE3NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9BZG1pc3Npb25Db25maXJtW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNzYwLVxcdHtGTkFNRShcXFwiY2FsbE1vZGVsXFxcIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQIHwgRVhULCAwLCBfQ2FsbE1vZGVsfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTc2MTpcXHR7Rk5BTUUoXFxcImRlc3RDYWxsU2lnbmFsQWRkcmVzc1xcXCIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNzYyLVxcdCBvZmZzZXRvZihBZG1pc3Npb25Db25maXJtLCBkZXN0Q2FsbFNpZ25hbEFkZHJlc3MpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE3OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9Mb2NhdGlvblJlcXVlc3RbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4MDItXFx0IF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4MDM6XFx0e0ZOQU1FKFxcXCJyZXBseUFkZHJlc3NcXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTgwNC1cXHQgb2Zmc2V0b2YoTG9jYXRpb25SZXF1ZXN0LCByZXBseUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTgyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0xvY2F0aW9uQ29uZmlybVtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4MjEtXFx0e0ZOQU1FKFxcXCJyZXF1ZXN0U2VxTnVtXFxcIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTgyMjpcXHR7Rk5BTUUoXFxcImNhbGxTaWduYWxBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4MjMtXFx0IG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgY2FsbFNpZ25hbEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4MjQ6XFx0e0ZOQU1FKFxcXCJyYXNBZGRyZXNzXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4MjUtXFx0IG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xODQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfSW5mb1JlcXVlc3RSZXNwb25zZV9jYWxsU2lnbmFsQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4NDc6XFx0e0ZOQU1FKFxcXCJpdGVtXFxcIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4NDgtXFx0IHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTg1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX0luZm9SZXF1ZXN0UmVzcG9uc2VbXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4NTctXFx0e0ZOQU1FKFxcXCJlbmRwb2ludElkZW50aWZpZXJcXFwiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODU4OlxcdHtGTkFNRShcXFwicmFzQWRkcmVzc1xcXCIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODU5LVxcdCBvZmZzZXRvZihJbmZvUmVxdWVzdFJlc3BvbnNlLCByYXNBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODYwOlxcdHtGTkFNRShcXFwiY2FsbFNpZ25hbEFkZHJlc3NcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg2MS1cXHQgb2Zmc2V0b2YoSW5mb1JlcXVlc3RSZXNwb25zZSwgY2FsbFNpZ25hbEFkZHJlc3MpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE4NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SYXNNZXNzYWdlW10gPSB7XFx0LyogQ0hPSUNFICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4NzY6XFx0e0ZOQU1FKFxcXCJnYXRla2VlcGVyUmVxdWVzdFxcXCIpIFNFUSwgNCwgOCwgMTgsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg3Ny1cXHQgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgZ2F0ZWtlZXBlclJlcXVlc3QpLCBfR2F0ZWtlZXBlclJlcXVlc3R9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODc4OlxcdHtGTkFNRShcXFwiZ2F0ZWtlZXBlckNvbmZpcm1cXFwiKSBTRVEsIDIsIDUsIDE0LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4NzktXFx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGdhdGVrZWVwZXJDb25maXJtKSwgX0dhdGVrZWVwZXJDb25maXJtfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg4MC1cXHR7Rk5BTUUoXFxcImdhdGVrZWVwZXJSZWplY3RcXFwiKSBTRVEsIDIsIDUsIDExLCBTVE9QIHwgRVhULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTg4MTpcXHR7Rk5BTUUoXFxcInJlZ2lzdHJhdGlvblJlcXVlc3RcXFwiKSBTRVEsIDMsIDEwLCAzMSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODgyLVxcdCBvZmZzZXRvZihSYXNNZXNzYWdlLCByZWdpc3RyYXRpb25SZXF1ZXN0KSwgX1JlZ2lzdHJhdGlvblJlcXVlc3R9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODgzOlxcdHtGTkFNRShcXFwicmVnaXN0cmF0aW9uQ29uZmlybVxcXCIpIFNFUSwgMywgNywgMjQsIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg4NC1cXHQgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgcmVnaXN0cmF0aW9uQ29uZmlybSksIF9SZWdpc3RyYXRpb25Db25maXJtfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTg4NS1cXHR7Rk5BTUUoXFxcInJlZ2lzdHJhdGlvblJlamVjdFxcXCIpIFNFUSwgMiwgNSwgMTEsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODg2OlxcdHtGTkFNRShcXFwidW5yZWdpc3RyYXRpb25SZXF1ZXN0XFxcIikgU0VRLCAzLCA1LCAxNSwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODg3LVxcdCBvZmZzZXRvZihSYXNNZXNzYWdlLCB1bnJlZ2lzdHJhdGlvblJlcXVlc3QpLCBfVW5yZWdpc3RyYXRpb25SZXF1ZXN0fSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODg5LVxcdHtGTkFNRShcXFwidW5yZWdpc3RyYXRpb25SZWplY3RcXFwiKSBTRVEsIDEsIDMsIDgsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxODkwOlxcdHtGTkFNRShcXFwiYWRtaXNzaW9uUmVxdWVzdFxcXCIpIFNFUSwgNywgMTYsIDM0LCBERUNPREUgfCBFWFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE4OTEtXFx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIGFkbWlzc2lvblJlcXVlc3QpLCBfQWRtaXNzaW9uUmVxdWVzdH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE4OTI6XFx0e0ZOQU1FKFxcXCJhZG1pc3Npb25Db25maXJtXFxcIikgU0VRLCAyLCA2LCAyNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xODkzLVxcdCBvZmZzZXRvZihSYXNNZXNzYWdlLCBhZG1pc3Npb25Db25maXJtKSwgX0FkbWlzc2lvbkNvbmZpcm19LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE5MDAtXFx0e0ZOQU1FKFxcXCJkaXNlbmdhZ2VSZWplY3RcXFwiKSBTRVEsIDEsIDMsIDgsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxOTAxOlxcdHtGTkFNRShcXFwibG9jYXRpb25SZXF1ZXN0XFxcIikgU0VRLCAyLCA1LCAxNywgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTAyLVxcdCBvZmZzZXRvZihSYXNNZXNzYWdlLCBsb2NhdGlvblJlcXVlc3QpLCBfTG9jYXRpb25SZXF1ZXN0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTkwMzpcXHR7Rk5BTUUoXFxcImxvY2F0aW9uQ29uZmlybVxcXCIpIFNFUSwgMSwgNCwgMTksIERFQ09ERSB8IEVYVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTkwNC1cXHQgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgbG9jYXRpb25Db25maXJtKSwgX0xvY2F0aW9uQ29uZmlybX0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTkwNi1cXHR7Rk5BTUUoXFxcImluZm9SZXF1ZXN0XFxcIikgU0VRLCAyLCA0LCAxNSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE5MDc6XFx0e0ZOQU1FKFxcXCJpbmZvUmVxdWVzdFJlc3BvbnNlXFxcIikgU0VRLCAzLCA4LCAxNiwgREVDT0RFIHwgRVhULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xOTA4LVxcdCBvZmZzZXRvZihSYXNNZXNzYWdlLCBpbmZvUmVxdWVzdFJlc3BvbnNlKSwgX0luZm9SZXF1ZXN0UmVzcG9uc2V9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNTo0MS4wOTUxOTc4NjhaIiwiU2VxIjo5NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0OTcxODUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyB0aGUgYHRpbWVUb0xpdmVgIEZpZWxkKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGltZVRvTGl2ZWAgaXMgZGVmaW5lZCBhcyBhbiBgSU5UYCB3aXRoIGEgYERFQ09ERWAgYXR0cmlidXRlLiBHb3QgaXQsIGFuZCBpdCdzIGxvY2F0ZWQgd2l0aGluIHRoZSBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgc3RydWN0LiBNeSBxdWljayBnbGFuY2UgdGVsbHMgbWUgdGhhdCBpdCBpcyBhbHNvIHByZXNlbnQgaW4gYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLlxuXG5MZXQgbWUganVzdCBjb25maXJtIHRoYXQgdGhlIGRlZmluaXRpb24gaW4gYFJlZ2lzdHJhdGlvblJlcXVlc3RgIG1hdGNoZXMgd2hhdCBJIGV4cGVjdC4gQWggeWVzLCB0aGVyZSBpdCBpczogYHRpbWVUb0xpdmVgIGRlZmluZWQgYXMgYW4gYElOVGAgd2l0aCBgREVDT0RFIHwgT1BUYCwgYW5kIHRoZSBgb2Zmc2V0b2ZgIGlzIGFzIGV4cGVjdGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlIHN0cnVjdHVyZS4gSSBrbm93IHRoZSBmaWVsZCBpdHNlbGYsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgZmllbGRzIGluIHRoZSBzdHJ1Y3QuIEkgbmVlZCB0byBrbm93IHdoYXQgY29tZXMgKmFmdGVyKiBgdGltZVRvTGl2ZWAgaW4gYFJlZ2lzdHJhdGlvblJlcXVlc3RgLiBHb3R0YSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTE4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM1OjQ2LjA0NDkyMTM0MloiLCJTZXEiOjk2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4xNTc2OlxcdFxcdHtGTkFNRShcXFwicmVxdWVzdFNlcU51bVxcXCIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sXFxuMTU3NzpcXHRcXHR7Rk5BTUUoXFxcInByb3RvY29sSWRlbnRpZmllclxcXCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sXFxuMTU3ODpcXHRcXHR7Rk5BTUUoXFxcIm5vblN0YW5kYXJkRGF0YVxcXCIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCxcXG4xNTc5OlxcdFxcdCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LFxcbjE1ODA6XFx0XFx0e0ZOQU1FKFxcXCJkaXNjb3ZlcnlDb21wbGV0ZVxcXCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbjE1ODE6XFx0XFx0e0ZOQU1FKFxcXCJjYWxsU2lnbmFsQWRkcmVzc1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLFxcbjE1ODI6XFx0XFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIGNhbGxTaWduYWxBZGRyZXNzKSxcXG4xNTgzOlxcdFxcdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzc30sXFxuMTU4NDpcXHRcXHR7Rk5BTUUoXFxcInJhc0FkZHJlc3NcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcXG4xNTg1OlxcdFxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCByYXNBZGRyZXNzKSxcXG4xNTg2OlxcdFxcdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF9yYXNBZGRyZXNzfSxcXG4xNTg3OlxcdFxcdHtGTkFNRShcXFwidGVybWluYWxUeXBlXFxcIikgU0VRLCA2LCA4LCAxMCwgU0tJUCB8IEVYVCwgMCwgX0VuZHBvaW50VHlwZX0sXFxuMTU4ODpcXHRcXHR7Rk5BTUUoXFxcInRlcm1pbmFsQWxpYXNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCxcXG4xNTg5OlxcdFxcdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF90ZXJtaW5hbEFsaWFzfSxcXG4xNTkwOlxcdFxcdHtGTkFNRShcXFwiZ2F0ZWtlZXBlcklkZW50aWZpZXJcXFwiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbjE1OTE6XFx0XFx0e0ZOQU1FKFxcXCJlbmRwb2ludFZlbmRvclxcXCIpIFNFUSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCxcXG4xNTkyOlxcdFxcdCBfVmVuZG9ySWRlbnRpZmllcn0sXFxuMTU5MzpcXHRcXHR7Rk5BTUUoXFxcImFsdGVybmF0ZUVuZHBvaW50c1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG4xNTk0OlxcdFxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbjE1OTU6XFx0XFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIHRpbWVUb0xpdmUpLCBOVUxMfSxcXG4xNTk2OlxcdFxcdHtGTkFNRShcXFwidG9rZW5zXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE1OTc6XFx0XFx0e0ZOQU1FKFxcXCJjcnlwdG9Ub2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTU5ODpcXHRcXHR7Rk5BTUUoXFxcImludGVncml0eUNoZWNrVmFsdWVcXFwiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE1OTk6XFx0XFx0e0ZOQU1FKFxcXCJrZWVwQWxpdmVcXFwiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSxcXG4xNjAwOlxcdFxcdHtGTkFNRShcXFwiZW5kcG9pbnRJZGVudGlmaWVyXFxcIikgQk1QU1RSLCA3LCAxLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcXG4xNjAxOlxcdFxcdHtGTkFNRShcXFwid2lsbFN1cHBseVVVSUVzXFxcIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sXFxuMTYwMjpcXHRcXHR7Rk5BTUUoXFxcIm1haW50YWluQ29ubmVjdGlvblxcXCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LFxcbjE2MDM6XFx0XFx0e0ZOQU1FKFxcXCJhbHRlcm5hdGVUcmFuc3BvcnRBZGRyZXNzZXNcXFwiKSBTRVEsIDEsIDEsIDEsIFNUT1AgfCBFWFQgfCBPUFQsXFxuMTYwNDpcXHRcXHQgMCwgTlVMTH0sXFxuMTYwNTpcXHRcXHR7Rk5BTUUoXFxcImFkZGl0aXZlUmVnaXN0cmF0aW9uXFxcIikgTlVMLCBGSVhELCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcXG4xNjA2OlxcdFxcdHtGTkFNRShcXFwidGVybWluYWxBbGlhc1BhdHRlcm5cXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCxcXG4xNjA3OlxcdFxcdCBOVUxMfSxcXG4xNjA4OlxcdFxcdHtGTkFNRShcXFwic3VwcG9ydHNBbHRHS1xcXCIpIE5VTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTYwOTpcXHRcXHR7Rk5BTUUoXFxcInVzYWdlUmVwb3J0aW5nQ2FwYWJpbGl0eVxcXCIpIFNFUSwgMywgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwgMCxcXG4xNjEwOlxcdFxcdCBOVUxMfSxcXG4xNjExOlxcdFxcdHtGTkFNRShcXFwibXVsdGlwbGVDYWxsc1xcXCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE2MTI6XFx0XFx0e0ZOQU1FKFxcXCJzdXBwb3J0ZWRIMjQ4UGFja2FnZXNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCxcXG4xNjEzOlxcdFxcdCBOVUxMfSxcXG4xNjE0OlxcdFxcdHtGTkFNRShcXFwiY2FsbENyZWRpdENhcGFiaWxpdHlcXFwiKSBTRVEsIDIsIDIsIDIsIFNUT1AgfCBFWFQgfCBPUFQsIDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM1OjQ2LjA0NTE1NzAzMloiLCJTZXEiOjk3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI2Njk5MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBEZWR1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLiBXZSdyZSBkZWFsaW5nIHdpdGggdGhlc2UgZmllbGRzIGFmdGVyIGB0aW1lVG9MaXZlYCwgYW5kIEkgc2VlIHRoZSBgU1RPUGAgYXR0cmlidXRlIGFwcGxpZWQuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBoZXJlOlxuXG5gYGBjXG5cdHtGTkFNRShcInRva2Vuc1wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXG5gYGBcblxuUmlnaHQsIGlmIGEgZmllbGQgaGFzIHRoYXQgYFNUT1BgIGZsYWcgc2V0LCBgZGVjb2RlX3NlcWAgaGFuZGxlcyBpdCBsaWtlIHRoaXM6XG5cbmBgYGNcblx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IFNUT1ApIHtcblx0XHRcdFBSSU5UKFwiJSpzJXNcXG5cIiwgKGxldmVsICsgMSkgKiBUQUJfU0laRSwgXCIgXCIsXG5cdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG5cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9TVE9QO1xuXHRcdH1cbmBgYFxuXG5TbywgZXNzZW50aWFsbHksIGl0IHN0b3BzIHBhcnNpbmcgdGhlIG1vbWVudCBpdCBoaXRzIGEgZmllbGQgd2l0aCB0aGF0IGBTVE9QYCBhdHRyaWJ1dGUuIFRoZSBjb2RlIHByaW50cyB0aGUgbmFtZSBvZiB0aGUgZmllbGQgYW5kIHJldHVybnMgYEgzMjNfRVJST1JfU1RPUGAuIFdoaWNoIG1lYW5zLCBpZiBgU1RPUGAgaXMgc2V0IGFmdGVyIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQsIHdlJ3JlIGN1dHRpbmcgb2ZmIHRoZSBwYXJzaW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoYXQhXG5cbldhaXQgYSBtaW51dGUuLi4gSWYgaXQncyBzdG9wcGluZyAqaW1tZWRpYXRlbHkqLCB0aGF0IG1lYW5zIGBkZWNvZGVfZW51bWAgYW5kIHdoYXRldmVyIGlzIHN1cHBvc2VkIHRvIGhhcHBlbiBhZnRlciBgdGltZVRvTGl2ZWAgd291bGQgKm5ldmVyKiBnZXQgY2FsbGVkLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBgUmVnaXN0cmF0aW9uQ29uZmlybWAgbWVzc2FnZSBzdHJ1Y3R1cmUgdG8gc2VlIHdoYXQgY29tZXMgYWZ0ZXIgdGltZSB0byBsaXZlIHRvIHVuZGVyc3RhbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MjcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNTo1MS4zNzE4NjExNjhaIiwiU2VxIjo5OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjMzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjMzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uQ29uZmlybVtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuMTYzNDpcXHRcXHR7Rk5BTUUoXFxcInJlcXVlc3RTZXFOdW1cXFwiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbjE2MzU6XFx0XFx0e0ZOQU1FKFxcXCJwcm90b2NvbElkZW50aWZpZXJcXFwiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LFxcbjE2MzY6XFx0XFx0e0ZOQU1FKFxcXCJub25TdGFuZGFyZERhdGFcXFwiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBPUFQsIDAsXFxuMTYzNzpcXHRcXHQgX05vblN0YW5kYXJkUGFyYW1ldGVyfSxcXG4xNjM4OlxcdFxcdHtGTkFNRShcXFwiY2FsbFNpZ25hbEFkZHJlc3NcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSxcXG4xNjM5OlxcdFxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCBjYWxsU2lnbmFsQWRkcmVzcyksXFxuMTY0MDpcXHRcXHQgX1JlZ2lzdHJhdGlvbkNvbmZpcm1fY2FsbFNpZ25hbEFkZHJlc3N9LFxcbjE2NDE6XFx0XFx0e0ZOQU1FKFxcXCJ0ZXJtaW5hbEFsaWFzXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsXFxuMTY0MjpcXHRcXHQgX1JlZ2lzdHJhdGlvbkNvbmZpcm1fdGVybWluYWxBbGlhc30sXFxuMTY0MzpcXHRcXHR7Rk5BTUUoXFxcImdhdGVrZWVwZXJJZGVudGlmaWVyXFxcIikgQk1QU1RSLCA3LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG4xNjQ0OlxcdFxcdHtGTkFNRShcXFwiZW5kcG9pbnRJZGVudGlmaWVyXFxcIikgQk1QU1RSLCA3LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSxcXG4xNjQ1OlxcdFxcdHtGTkFNRShcXFwiYWx0ZXJuYXRlR2F0ZWtlZXBlclxcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG4xNjQ2OlxcdFxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbjE2NDc6XFx0XFx0IG9mZnNldG9mKFJlZ2lzdHJhdGlvbkNvbmZpcm0sIHRpbWVUb0xpdmUpLCBOVUxMfSxcXG4xNjQ4OlxcdFxcdHtGTkFNRShcXFwidG9rZW5zXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE2NDk6XFx0XFx0e0ZOQU1FKFxcXCJjcnlwdG9Ub2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTY1MDpcXHRcXHR7Rk5BTUUoXFxcImludGVncml0eUNoZWNrVmFsdWVcXFwiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE2NTE6XFx0XFx0e0ZOQU1FKFxcXCJ3aWxsUmVzcG9uZFRvSVJSXFxcIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sXFxuMTY1MjpcXHRcXHR7Rk5BTUUoXFxcInByZUdyYW50ZWRBUlFcXFwiKSBTRVEsIDAsIDQsIDgsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LFxcbjE2NTM6XFx0XFx0e0ZOQU1FKFxcXCJtYWludGFpbkNvbm5lY3Rpb25cXFwiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSxcXG4xNjU0OlxcdFxcdHtGTkFNRShcXFwic2VydmljZUNvbnRyb2xcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTY1NTpcXHRcXHR7Rk5BTUUoXFxcInN1cHBvcnRzQWRkaXRpdmVSZWdpc3RyYXRpb25cXFwiKSBOVUwsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsXFxuMTY1NjpcXHRcXHQgTlVMTH0sXFxuMTY1NzpcXHRcXHR7Rk5BTUUoXFxcInRlcm1pbmFsQWxpYXNQYXR0ZXJuXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsXFxuMTY1ODpcXHRcXHQgTlVMTH0sXFxuMTY1OTpcXHRcXHR7Rk5BTUUoXFxcInN1cHBvcnRlZFByZWZpeGVzXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxcbjE2NjA6XFx0XFx0e0ZOQU1FKFxcXCJ1c2FnZVNwZWNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTY2MTpcXHRcXHR7Rk5BTUUoXFxcImZlYXR1cmVTZXJ2ZXJBbGlhc1xcXCIpIENIT0lDRSwgMSwgMiwgNywgU1RPUCB8IEVYVCB8IE9QVCwgMCxcXG4xNjYyOlxcdFxcdCBOVUxMfSxcXG4xNjYzOlxcdFxcdHtGTkFNRShcXFwiY2FwYWNpdHlSZXBvcnRpbmdTcGVjXFxcIikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhUIHwgT1BULCAwLFxcbjE2NjQ6XFx0XFx0IE5VTEx9LFxcbjE2NjU6XFx0XFx0e0ZOQU1FKFxcXCJmZWF0dXJlU2V0XFxcIikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSxcXG4xNjY2OlxcdFxcdHtGTkFNRShcXFwiZ2VuZXJpY0RhdGFcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuMTY2NzpcXHR9O1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1VucmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzc1tdID0ge1xcdC8qIFNFUVVFTkNFIE9GICovXFxuMTY3MDpcXHRcXHR7Rk5BTUUoXFxcIml0ZW1cXFwiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCxcXG4xNjcxOlxcdFxcdCBzaXplb2YoVHJhbnNwb3J0QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfVxcbjE2NzI6XFx0XFx0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNTo1MS4zNzIxNDY5NThaIiwiU2VxIjo5OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMTA0NDMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyBEaWxlbW1hIGluIFJlZ2lzdHJhdGlvbkNvbmZpcm0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBSZWdpc3RyYXRpb25Db25maXJtYCBzdHJ1Y3R1cmUsIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJbiB0aGUgZGVmaW5pdGlvbiwgdGhlIGB0aW1lVG9MaXZlYCBmaWVsZCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBgdG9rZW5zYCB3aGljaCBoYXMgdGhlIGBTVE9QYCBhdHRyaWJ1dGUuIFRoYXQgbWVhbnMgdGhlIHBhcnNpbmcganVzdCAqc3RvcHMqIHJpZ2h0IHRoZXJlISBJIG1lYW4sIGl0IGxpdGVyYWxseSBiYWlscyBvdXQgYWZ0ZXIgcHJvY2Vzc2luZyBgdGltZVRvTGl2ZWAuIFRoYXQgYWxzbyBtZWFucyB0aGF0IGBkZWNvZGVfZW51bWAgbmV2ZXIgZ2V0cyBjYWxsZWQgYWZ0ZXIgYHRpbWVUb0xpdmVgLiBJZiB0aGUgcGFyc2VyIGJhaWxzIHRoZXJlLCB0aGVuIHRoZSBzdWJzZXF1ZW50IGZpZWxkcyB3b24ndCBldmVuICpiZSogZGVjb2RlZCEgXG5cbkhhbmcgb24gYSBtaW51dGUuLi4gYXJlIHRoZXJlICphbnkqIG90aGVyIGZpZWxkcyBpbiB0aGlzIHRoaW5nIHRoYXQgaGF2ZSB0aGlzIGNvbWJpbmF0aW9uIG9mIGBJTlRgIGFuZCBgREVDT0RFYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXNuJ3QgYSBwcm9ibGVtIGVsc2V3aGVyZSBpbiB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBJTlRgIGFuZCBgREVDT0RFYCB0byBzZWUgd2hhdCBvdGhlciBzdHJ1Y3R1cmVzIG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMgZGVzaWduIHBhdHRlcm4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBhIHdpZGVyIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjMwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNTo1Ni43MDMxOTgyNDNaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAzMTczMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5ULipERUNPREVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uUmVxdWVzdFtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5My1cXHR7Rk5BTUUoXFxcImFsdGVybmF0ZUVuZHBvaW50c1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NDpcXHR7Rk5BTUUoXFxcInRpbWVUb0xpdmVcXFwiKSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5NS1cXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uUmVxdWVzdCwgdGltZVRvTGl2ZSksIE5VTEx9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE2MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25Db25maXJtW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjQ1LVxcdHtGTkFNRShcXFwiYWx0ZXJuYXRlR2F0ZWtlZXBlclxcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY0NjpcXHR7Rk5BTUUoXFxcInRpbWVUb0xpdmVcXFwiKSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0Ny1cXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uQ29uZmlybSwgdGltZVRvTGl2ZSksIE5VTEx9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNTo1Ni44MDM1MjAzNTJaIiwiU2VxIjoxMDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDUyNTM3NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29kaW5nIHRoZSBSZWdpc3RyYXRpb25SZXF1ZXN0OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gIHN0cnVjdHVyZXMsIGFuZCBpdCdzIHN0cmlraW5nIG1lIHRoYXQgYHRpbWVUb0xpdmVgIGlzIHRoZSBPTkxZIGludGVnZXIgZmllbGQgKGBJTlRgKSB3aXRoaW4gYm90aCB0aGF0IGhhcyB0aGUgYERFQ09ERWAgYXR0cmlidXRlLiBBbmQgZ2V0IHRoaXMsIGl0J3MgKmltbWVkaWF0ZWx5KiBmb2xsb3dlZCBieSBhIGZpZWxkIHdpdGggdGhlIGBTVE9QYCBhdHRyaWJ1dGUuICBUaGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgYnVnXCIgdG8gbWUuXG5cbk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhlIGNvZGUuICBgZGVjb2RlX2ludGAgd2lsbCBhZHZhbmNlIHRoZSBiaXRzdHJlYW0gY3Vyc29yIGBicy1cdTAwM2VjdXJgIGJ5IGAyICogbGVuYCAoYXNzdW1pbmcgYSAyLWJ5dGUgaW50ZWdlcikuIFRoZW4sIHRoZSBgZGVjb2RlX3NlcWAgbG9vcCBraWNrcyBpbiwgbW92aW5nIHRvIHRoZSBuZXh0IGZpZWxkLiAgVGhhdCBuZXh0IGZpZWxkIGlzIGB0b2tlbnNgLlxuXG5gYGBjXG57Rk5BTUUoXCJ0b2tlbnNcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LFxuYGBgXG5cbk5vdywgdGhlIGBTVE9QYCBhdHRyaWJ1dGUgaW4gYHRva2Vuc2AgaXMgdGhlIGNsdWUhIEluIGBkZWNvZGVfc2VxYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgSDMyM19FUlJPUl9TVE9QYCBpZiBpdCBlbmNvdW50ZXJzIGEgZmllbGQgbWFya2VkIHdpdGggYFNUT1BgLlxuXG5gYGBjXG5cdFx0Zm9yIChpID0gb3B0ID0gMCwgc29uID0gZi1cdTAwM2VmaWVsZHM7IGkgXHUwMDNjIGYtXHUwMDNlbGI7IGkrKywgc29uKyspIHtcblx0XHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgU1RPUCkge1xuXHRcdFx0XHRQUklOVChcIiUqcyVzXFxuXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsIFwiIFwiLFxuXHRcdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG5cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX1NUT1A7XG5cdFx0XHR9XG5gYGBcblxuSG9sZCBvbi4uLiBgdG9rZW5zYCAqaXNuJ3QqIGEgcm9vdCBjb21wb25lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBpcyBhY3R1YWxseSB1c2VkLlxuXG5MZXQncyBjaGVjayBgZi1cdTAwM2VsYmAgZm9yIGBSZWdpc3RyYXRpb25SZXF1ZXN0YC5cblxuYGBgY1xue0ZOQU1FKFwiUmVnaXN0cmF0aW9uUmVxdWVzdFwiKSBTRVEsIDUsIDEyLCAyNywgREVDT0RFIHwgRVhULFxuYGBgXG5cbldhaXQsIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBpdHNlbGYgaXNuJ3QgYSBkaXJlY3QgZmllbGQ7IGl0J3MgYSAqc2VxdWVuY2UqIG9mIGZpZWxkcy4gUmlnaHQsIEkgcmVtZW1iZXIgbm93ISBXaGVyZSBpcyBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgZGVmaW5lZD9cblxuYGBgY1xuc3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SYXNNZXNzYWdlW10gPSB7XHQvKiBDSE9JQ0UgKi9cblx0Ly8gLi4uXG5cdHtGTkFNRShcInJlZ2lzdHJhdGlvblJlcXVlc3RcIikgU0VRLCAzLCAxMCwgMzEsIERFQ09ERSB8IEVYVCxcblx0IG9mZnNldG9mKFJhc01lc3NhZ2UsIHJlZ2lzdHJhdGlvblJlcXVlc3QpLCBfUmVnaXN0cmF0aW9uUmVxdWVzdH0sXG5gYGBcblxuQWghIFNvLCBgUmVnaXN0cmF0aW9uUmVxdWVzdGAgaXMgcGFydCBvZiB0aGUgYF9SYXNNZXNzYWdlYCBDSE9JQ0UuICBJdHMgYGYtXHUwMDNlbGJgIGlzIDEwLCB3aGljaCBtZWFucyB0aGUgcm9vdCBjb21wb25lbnRzIGFyZTpcblxuMS4gYHJlcXVlc3RTZXFOdW1gXG4yLiBgcHJvdG9jb2xJZGVudGlmaWVyYFxuMy4gYG5vblN0YW5kYXJkRGF0YWBcbjQuIGBkaXNjb3ZlcnlDb21wbGV0ZWBcbjUuIGBjYWxsU2lnbmFsQWRkcmVzc2BcbjYuIGByYXNBZGRyZXNzYFxuNy4gYHRlcm1pbmFsVHlwZWBcbjguIGB0ZXJtaW5hbEFsaWFzYFxuOS4gYGdhdGVrZWVwZXJJZGVudGlmaWVyYFxuMTAuIGBlbmRwb2ludFZlbmRvcmBcblxuVGhlIDExdGggZmllbGQgaXMgYGFsdGVybmF0ZUVuZHBvaW50c2AsIGFuZCB0aGUgMTJ0aCBpcyBgdGltZVRvTGl2ZWAuICBBaGEhIGB0aW1lVG9MaXZlYCBpcyBhbiAqRVhURU5TSU9OKiBjb21wb25lbnQuICBUaGlzIGNoYW5nZXMgdGhpbmdzLiAgSSBuZWVkIHRvIHJldmlldyBgZGVjb2RlX3NlcWAncyBoYW5kbGluZyBvZiBleHRlbnNpb25zLi4uIHRoaXMgaXMgYSBwb3RlbnRpYWwgaXNzdWUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTgxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM2OjA2Ljg1NjA2MjUxNVoiLCJTZXEiOjEwMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXG4gNTUxOlxcdFxcdFxcdC8qIERlY29kZSAqL1xcbiA1NTI6XFx0XFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IE9QRU4pIHtcXHQvKiBPcGVuIGZpZWxkICovXFxuIDU1MzpcXHRcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTU1OlxcdFxcdFxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbiA1NTY6XFx0XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxuIDU1NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTU4OlxcdFxcdFxcdFxcdGlmICghYmFzZSB8fCAhKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpIHtcXG4gNTU5OlxcdFxcdFxcdFxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgKGxldmVsICsgMSkgKiBUQUJfU0laRSxcXG4gNTYwOlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCIgXFxcIiwgc29uLVxcdTAwM2VuYW1lKTtcXG4gNTYxOlxcdFxcdFxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiA1NjI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU2MzpcXHRcXHRcXHRcXHR9XFxuIDU2NDpcXHRcXHRcXHRcXHRiZWcgPSBicy1cXHUwMDNlY3VyO1xcbiA1NjU6XFx0XFxuIDU2NjpcXHRcXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG4gNTY3OlxcdFxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbiA1Njg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZXZlbCArIDEpKSBcXHUwMDNjXFxuIDU2OTpcXHRcXHRcXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbiA1NzA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciA9IGJlZyArIGxlbjtcXG4gNTczOlxcdFxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbiA1NzQ6XFx0XFx0XFx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxldmVsICsgMSkpIFxcdTAwM2NcXG4gNTc2OlxcdFxcdFxcdFxcdCAgIEgzMjNfRVJST1JfTk9ORSlcXG4gNTc3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDU3ODpcXHRcXHR9XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdC8qIE5vIGV4dGVuc2lvbj8gKi9cXG4gNTgxOlxcdFxcdGlmICghZXh0KVxcbiA1ODI6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXFxuIDU4NTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXFxuIDU4NjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTg3OlxcdFxcdGJtcDJfbGVuID0gZ2V0X2JpdHMoYnMsIDcpICsgMTtcXG4gNTg4OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBibXAyX2xlbikpXFxuIDU4OTpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzY6MDYuODU2MjkxMjM1WiIsIlNlcSI6MTAzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc1NzQ0NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGVjb2RpbmcgRXh0ZW5zaW9uIENvbXBvbmVudHMqKlxuXG5BaCwgcmlnaHQsIGB0aW1lVG9MaXZlYC4gVGhhdCdzIGFuICpleHRlbnNpb24gY29tcG9uZW50Ki4gTGV0J3MgcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSB0eXBpY2FsbHkgaGFuZGxlZCBpbiB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBzdGVwcyBpbnZvbHZlZCBpbiBwYXJzaW5nIGV4dGVuc2lvbiBjb21wb25lbnRzIOKAkyBhcmUgd2UgbG9va2luZyBhdCBhIHNwZWNpZmljIHN0cnVjdHVyZSwgZGVmaW5lZCB3aXRoaW4gYSBzdGFuZGFyZCBvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24sIG9yIGlzIHRoaXMgc29tZXRoaW5nIG1vcmUgY3VzdG9tPyBJIG5lZWQgdG8ga25vdyB0aGUgcHJvcGVyIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGRlY29kZWQgY29ycmVjdGx5LiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzLCB0aGUgZmxhZ3MsIHRoZSBwYXlsb2FkIGZvcm1hdCwgYWxsIHRoYXQgamF6ej8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRvIGRlYWwgd2l0aCB0aGUgc3RydWN0dXJlIGFuZCBjb250ZXh0IG9mIHRoaXMgYHRpbWVUb0xpdmVgIGVsZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTEzLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNjoxMC42MzIwNDA0MDJaIiwiU2VxIjoxMDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0XFx0aWYgKGJtcDJfbGVuIFxcdTAwM2UgMzIpXFxuIDU5MTpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9SQU5HRTtcXG4gNTkyOlxcdFxcdGJtcDIgPSBnZXRfYml0bWFwKGJzLCBibXAyX2xlbik7XFxuIDU5MzpcXHRcXHRibXAgfD0gYm1wMiBcXHUwMDNlXFx1MDAzZSBmLVxcdTAwM2VzejtcXG4gNTk0OlxcdFxcdGlmIChiYXNlKVxcbiA1OTU6XFx0XFx0XFx0Kih1bnNpZ25lZCBpbnQgKiliYXNlID0gYm1wO1xcbiA1OTY6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdC8qIERlY29kZSB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudHMgKi9cXG4gNTk5OlxcdFxcdGZvciAob3B0ID0gMDsgb3B0IFxcdTAwM2MgYm1wMl9sZW47IG9wdCsrLCBpKyssIHNvbisrKSB7XFxuIDYwMDpcXHRcXHRcXHQvKiBDaGVjayBSYW5nZSAqL1xcbiA2MDE6XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gZi1cXHUwMDNldWIpIHtcXHQvKiBOZXdlciBWZXJzaW9uPyAqL1xcbiA2MDI6XFx0XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiA2MDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDYwNDpcXHRcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gNjA1OlxcdFxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiA2MDY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDYwNzpcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gNjA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2MDk6XFx0XFx0XFx0fVxcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRcXHRpZiAoc29uLVxcdTAwM2VhdHRyIFxcdTAwMjYgU1RPUCkge1xcbiA2MTI6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsXFxuIDYxMzpcXHRcXHRcXHRcXHQgICAgICBzb24tXFx1MDAzZW5hbWUpO1xcbiA2MTQ6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcXG4gNjE1OlxcdFxcdFxcdH1cXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0aWYgKCEoKDB4ODAwMDAwMDAgXFx1MDAzZVxcdTAwM2Ugb3B0KSBcXHUwMDI2IGJtcDIpKVxcdC8qIE5vdCBwcmVzZW50ICovXFxuIDYxODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiA2MjE6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDYyMjpcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gNjIzOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiA2MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDYyNTpcXHRcXHRcXHRpZiAoIWJhc2UgfHwgIShzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFxuIDYyNjpcXHRcXHRcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsIFxcXCIgXFxcIixcXG4gNjI3OlxcdFxcdFxcdFxcdCAgICAgIHNvbi1cXHUwMDNlbmFtZSk7XFxuIDYyODpcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gNjI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNjoxMC42MzIyMjcxMTJaIiwiU2VxIjoxMDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTIxOTI3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGVjb2RpbmcgTG9naWMgRGVlcCBEaXZlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgTG9va2luZyBhdCB0aGlzIGV4dGVuc2lvbiBjb21wb25lbnQgZGVjb2RpbmcsIHRoZXJlJ3Mgc29tZXRoaW5nIGNyaXRpY2FsIGhlcmUuICBJIHNlZSB0aGUgY29kZSdzIHBhdHRlcm46IHdlJ3JlIGNoZWNraW5nIGZvciBlcnJvcnMgd2l0aCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAsIHRoZW4gZ2V0dGluZyB0aGUgbGVuZ3RoIHdpdGggYGdldF9sZW4oYnMpYC4gV2Ugc2tpcCB0aGUgZGVjb2RlIGlmIGBiYXNlYCBpcyBudWxsIG9yIGlmIHRoZSBgREVDT0RFYCBhdHRyaWJ1dGUgaXNuJ3Qgc2V0LCB0aGF0J3MgZXhwZWN0ZWQuIEJ1dCAqdGhlbiogdGhlcmUncyB0aGlzIGJpdC4uLiBgYmVnID0gYnMtXHUwMDNlY3VyYC4gV2Ugc2F2ZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24sIGBicy1cdTAwM2VjdXJgLlxuXG5BaCwgeWVzLCAqbm93KiBJIHNlZSBpdC4gVGhlIGNydWNpYWwgcGFydDogYGJzLVx1MDAzZWN1cmAgaXMgUkVTVE9SRUQgYWZ0ZXIgZGVjb2RpbmchIFRoZSBsaW5lIGBicy1cdTAwM2VjdXIgPSBiZWcgKyBsZW47YCBUaGF0J3MgdGhlIGtleS5cblxuVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgYSBsb3dlci1sZXZlbCBkZWNvZGVyLCBsaWtlIGBkZWNvZGVfaW50YCwgaW5zaWRlIHRoZSBgRGVjb2RlcnNgIGFycmF5LCB3ZXJlIHRvIHNvbWVob3cgYWR2YW5jZSBgYnMtXHUwMDNlY3VyYCBiZXlvbmQgd2hhdCdzIGV4cGVjdGVkIOKAkyBzYXksIGJ5IGAyICogbGVuYCDigJMgIGBkZWNvZGVfc2VxYCBpcyBnb2luZyB0byBPVkVSV1JJVEUgaXQgd2l0aCB0aGUgKmNvcnJlY3QqIHBvc2l0aW9uLCBgYmVnICsgbGVuYC4gV2UncmUgdXNpbmcgYGJlZyArIGxlbmAgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBjdXJyZW50IGV4dGVuc2lvbiBwbHVzIHRoZSBleHBlY3RlZCBsZW5ndGggd2UgZ2V0IGZyb20gdGhlIGhlYWRlciEgIFxuXG5TbywgdGhlIHZhcmlhYmxlIGBsZW5gIGlzIHRoZSAqbGVuZ3RoIG9mIHRoZSBlbnRpcmUgZXh0ZW5zaW9uIGNvbXBvbmVudCogYXMgcmVhZCB1c2luZyBgZ2V0X2xlbihicylgLiBUaGUgdmFsdWUgb2YgYGJzLVx1MDAzZWN1cmAgaXMgc2V0IHRvIGBiZWcgKyBsZW5gLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwb3NpdGlvbiB3ZSAqc2hvdWxkKiBiZSBhdCBhZnRlciBkZWNvZGluZyB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCwgbm8gbWF0dGVyIHdoYXQgaW50ZXJuYWwgY2hhbmdlcyBgZGVjb2RlX2ludGAgbWFkZSB0byB0aGUgYGJzLVx1MDAzZWN1cmAgcG9pbnRlciFcblxuTGV0J3MganVzdCBkb3VibGUgY2hlY2sgdGhhdCwgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4MTYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNjoxNy43ODQ0MjQ4MjdaIiwiU2VxIjoxMDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0XFx0XFx0fVxcbiA2MzE6XFx0XFx0XFx0YmVnID0gYnMtXFx1MDAzZWN1cjtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0XFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxuIDYzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4gNjM1OlxcdFxcdFxcdCAgICBIMzIzX0VSUk9SX05PTkUpXFxuIDYzNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA2Mzc6XFx0XFxuIDYzODpcXHRcXHRcXHRicy1cXHUwMDNlY3VyID0gYmVnICsgbGVuO1xcbiA2Mzk6XFx0XFx0XFx0YnMtXFx1MDAzZWJpdCA9IDA7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiA2NDI6XFx0fVxcbiA2NDM6XFx0XFxuIDY0NDpcXHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDY0NTpcXHQgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGVmZmVjdGl2ZV9jb3VudCA9IDAsIGksIGxlbiA9IDA7XFxuIDY0ODpcXHRcXHRpbnQgZXJyO1xcbiA2NDk6XFx0XFx0Y29uc3Qgc3RydWN0IGZpZWxkX3QgKnNvbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzY6MTcuNzg0NjI5MTU3WiIsIlNlcSI6MTA3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM2NDU0MDU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBEb3VibGUgQWR2YW5jZSBpbiBgZGVjb2RlX2ludGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBmb2N1c2luZyBvbiBob3cgdGhpcyBgZGVjb2RlX2ludGAgYnVnIGltcGFjdHMgcGFyc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRvdWJsZSBhZHZhbmNlIG9mIGBicy1cdTAwM2VjdXJgLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IGJlY2F1c2UgYGJzLVx1MDAzZWN1cmAgd2FzIG92ZXJ3cml0dGVuIGluIHRoZSBgZGVjb2RlX3NlcWAgdGhhdCBjYWxsZWQgYGRlY29kZV9pbnRgLCB0aGUgaXNzdWUgd2FzIGNvbXBsZXRlbHkgbmVnYXRlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZXhpc3RzIGR1ZSB0byB0aGlzIHBvdGVudGlhbCBidWcuXG5cblRoZSBrZXkgaXMgZmlndXJpbmcgb3V0ICp3aGVyZSogYGRlY29kZV9pbnRgIGlzIGNhbGxlZC4gTGV0J3MgbG9vayBhdCBgUmVnaXN0cmF0aW9uUmVxdWVzdGAuIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBzaG93cyB0aGF0IGB0aW1lVG9MaXZlYCBpcyBhbiBgSU5UYCBhbmQgbWFya2VkIGFzIGBERUNPREVgLiBUaGUgZmllbGQgaW5kZXggYGYtXHUwMDNlbGJgIGlzIDEyLCBzbyB0aGUgZmlyc3QgMTIgZmllbGRzIGFyZSByb290IGNvbXBvbmVudHMuIENvdW50aW5nIHRoZSByb290IGNvbXBvbmVudHMsIGB0aW1lVG9MaXZlYCBJUyB0aGUgMTJ0aCBmaWVsZCwgY29uZmlybWluZyBpdCBhcyBhIHJvb3QgZWxlbWVudC4gVGhpcyBtZWFucyBgdGltZVRvTGl2ZWAgaXMgZGVjb2RlZCBpbiB0aGUgcHJpbWFyeSBsb29wLiBTaW5jZSBgdGltZVRvTGl2ZWAgaXMgTk9UIGBPUEVOYCwgaXQgZXhlY3V0ZXMgdGhlIGBlbHNlIGlmYCBwYXRoIGFuZCBjYWxscyBgRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdYC4gSXQgd2lsbCBjYWxsIGBkZWNvZGVfaW50YC4gVGhpcyBpcyBhIGNvbmNlcm4gYmVjYXVzZSB0aGUgY29kZSBkb2VzIE5PVCBvdmVyd3JpdGUgYGJzLVx1MDAzZWN1cmAsIHNvIGBkZWNvZGVfaW50YCAqV0lMTCogYWZmZWN0IHRoZSBwb3NpdGlvbiBvZiB0aGUgYml0c3RyZWFtIHBvaW50ZXIuXG5cblRoZSAqbmV4dCogZmllbGQsIGFmdGVyIGB0aW1lVG9MaXZlYCwgaXMgYHRva2Vuc2AsIHdoaWNoIGlzIGBTVE9QYC4gRm9ydHVuYXRlbHksIHNpbmNlIGBmLVx1MDAzZWxiYCBpcyAxMiwgdGhlIGZpcnN0IGxvb3Agb25seSBnb2VzIHVwIHRvIHRoZSAxMnRoIGZpZWxkLCBhbmQgYHRpbWVUb0xpdmVgIGlzIHRoZSBsYXN0IG9uZS4gU28sIHRoZSBmaXJzdCBsb29wIGNvbXBsZXRlcy5cblxuQWZ0ZXIgdGhlIGZpcnN0IGxvb3AsIHRoZSBjb2RlIGNoZWNrcyB0aGUgYGV4dGAgZmxhZy4gSWYgaXQncyB0cnVlLCBpdCBnZXRzIHRoZSBleHRlbnNpb24gYml0bWFwIGxlbmd0aCB1c2luZyBgZ2V0X2JpdHMoYnMsIDcpYC4gQ3JpdGljYWxseSwgaXQgY2hlY2tzIHRoZSBib3VuZGFyeSAqYmVmb3JlKiBjYWxsaW5nIGBnZXRfYml0c2AgdXNpbmcgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLiBTbywgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGFkdmFuY2VkIHBhc3QgdGhlIGBicy1cdTAwM2VlbmRgLCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgd2lsbCBkZXRlY3QgaXQgYW5kIHJldHVybiBhbiBlcnJvciBiZWZvcmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwcmV2ZW50cyB0aGUgcHJpbWFyeSBidWcuXG5cbkhvd2V2ZXIsIGlmIHRoZSBkb3VibGUgYWR2YW5jZSBieSBgZGVjb2RlX2ludGAgKmRvZXMqIGtlZXAgYGJzLVx1MDAzZWN1cmAgd2l0aGluIGJvdW5kcywgYGdldF9iaXRzYCAqd2lsbCogcmVhZCBmcm9tIHRoZSBwYWNrZXQgYnVmZmVyLCBwb3RlbnRpYWxseSBza2lwcGluZyBieXRlcy4gVGhhdCB3b3VsZCBiZSBpbmNvcnJlY3QgcGFyc2luZywgYnV0IGl0IHdvbid0IGJlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZW4gdGhlIGNvZGUgcHJvY2VlZHMgd2l0aCBwYXJzaW5nIGV4dGVuc2lvbiBjb21wb25lbnRzLlxuXG5JbiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCBwcm9jZXNzaW5nLCB0aGUgY29kZSByZWFkcyBgbGVuID0gZ2V0X2xlbihicylgIGFuZCBhZHZhbmNlcyBgYnMtXHUwMDNlY3VyICs9IGxlbmAuIEluIHRoaXMgc2NlbmFyaW8sIGl0IHdpbGwgc2ltcGx5IHBhcnNlIGdhcmJhZ2UsIGJ1dCBubyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuU28sIHRoZSBpc3N1ZSBpc24ndCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByb2JsZW0gaXMgaW5jb3JyZWN0IHBhcnNpbmcgaWYgdGhlIHBvaW50ZXIgYWR2YW5jZXMgaW5jb3JyZWN0bHkgKmJ1dCByZW1haW5zIHdpdGhpbiBib3VuZHMqLlxuXG5MZXQncyBsb29rIGF0IGFub3RoZXIgZXhhbXBsZTogYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLiBUaGUgZmlyc3QgNyBmaWVsZHMgYXJlIHJvb3QgY29tcG9uZW50cywgYHRpbWVUb0xpdmVgIGlzIHRoZSA5dGguIFNvLCBgdGltZVRvTGl2ZWAgaXMgbm93IGFuIGV4dGVuc2lvbiBjb21wb25lbnQsIGFuZCB3aGVuIHRoYXQgaXMgdGhlIGNhc2UsIHRoZSBjYWxsIHRvIGBkZWNvZGVfc2VxYCByZXNldHMgYGJzLVx1MDAzZWN1cmAgKmFmdGVyKiBgZGVjb2RlX2ludGAgaXMgY2FsbGVkLCBwcmV2ZW50aW5nIGZ1cnRoZXIgcGFyc2luZyBlcnJvcnMuIFRoaXMgbmVnYXRlcyB0aGUgZG91YmxlIGFkdmFuY2UuXG5cbkxvb2tpbmcgYmFjaywgYW5kIGFmdGVyIGdyZXBwaW5nIHRoZSBgSU5ULipERUNPREVgIGV4cHJlc3Npb25zLCBgdGltZVRvTGl2ZWAgaXMgdGhlIG9ubHkgZmllbGQgb2YgdGhhdCB0eXBlLiBUaGlzIHJlZHVjZXMgdGhlIHN1cmZhY2UgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4OTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MzY6MzYuMTQ5MTczODI2WiIsIlNlcSI6MTA4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNjEzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5ULipERUNPREVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYz0xNTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBfUmVnaXN0cmF0aW9uUmVxdWVzdFtdID0ge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5My1cXHR7Rk5BTUUoXFxcImFsdGVybmF0ZUVuZHBvaW50c1xcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NDpcXHR7Rk5BTUUoXFxcInRpbWVUb0xpdmVcXFwiKSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5NS1cXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uUmVxdWVzdCwgdGltZVRvTGl2ZSksIE5VTEx9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE2MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25Db25maXJtW10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNjQ1LVxcdHtGTkFNRShcXFwiYWx0ZXJuYXRlR2F0ZWtlZXBlclxcXCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY0NjpcXHR7Rk5BTUUoXFxcInRpbWVUb0xpdmVcXFwiKSBJTlQsIENPTlMsIDEsIDAsIERFQ09ERSB8IE9QVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0Ny1cXHQgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uQ29uZmlybSwgdGltZVRvTGl2ZSksIE5VTEx9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozNjozNi4yMTAzNDE4NTlaIiwiU2VxIjoxMDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Njg5NDUwMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkhhcm1sZXNzIERvdWJsZSBBZHZhbmNlIGluIEguMzIzIERlY29kZXI6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEV4cG9zdXJlKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsOiBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggdGhhdCBzdXBwb3NlZGx5IGZpeGVzIGEgYnVnIGluIHRoZSBILjMyMyBkZWNvZGVyLiBUaGUgY29yZSBpc3N1ZSBpcyBhIGRvdWJsZSBhZHZhbmNlIG9mIHRoZSBiaXRzdHJlYW0gcG9pbnRlciAoYGJzLVx1MDAzZWN1cmApIHdpdGhpbiB0aGUgYGRlY29kZV9pbnRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGhhcHBlbnMgd2hlbiBkZWNvZGluZyB0aGUgYHRpbWVUb0xpdmVgIGZpZWxkICh3aGljaCwgYXMgaXQgdHVybnMgb3V0LCBpcyB0aGUgT05MWSBJTlQgZmllbGQgd2l0aCBgREVDT0RFYCBhbmQgdGhlcmVmb3JlIHRoZSBvbmx5IGZpZWxkIHRoYXQgdHJpZ2dlcnMgdGhpcyBsb2dpYykgd2hpY2ggaXMgYWx3YXlzIGFuIGV4dGVuc2lvbiBjb21wb25lbnQuICBcblxuSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgbWF5YmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IGFmdGVyIGEgdGhvcm91Z2ggYW5hbHlzaXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyBoYXJtbGVzcy4gSGVyZSdzIHdoeTpcblxuMS4gICoqQWx3YXlzIFJlc3RvcmVkOioqIEJlY2F1c2UgYHRpbWVUb0xpdmVgIGlzIGFuIGV4dGVuc2lvbiBjb21wb25lbnQsIHRoZSBgZGVjb2RlX3NlcWAgZnVuY3Rpb24gKHRoZSBjYWxsZXIpICphbHdheXMqIHJlc3RvcmVzIGBicy1cdTAwM2VjdXJgIHRvIGl0cyBvcmlnaW5hbCBwb3NpdGlvbiBhZnRlciBkZWNvZGluZyB0aGUgZXh0ZW5zaW9uLiBUaGlzIGVmZmVjdGl2ZWx5IHVuZG9lcyB0aGUgZG91YmxlIGFkdmFuY2UgY2F1c2VkIGJ5IGBkZWNvZGVfaW50YC4gVGhlIGBsZW5gIG9mIHRoZSBpbnRlZ2VyIHJlYWQgaW4gYGRlY29kZV9pbnRgIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBgbGVuYCBvZiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCByZWFkIGJ5IGBkZWNvZGVfc2VxYC4gVGhlIGRvdWJsZSBhZHZhbmNlICpjYW4qIGJlIGZyb20gYGJlZyArIGxlbl9pbnRgIHRvIGBiZWcgKyBsZW5faW50ICogMmAsIGJ1dCB0aGUgYGRlY29kZV9zZXFgIHJlc2V0cyBpdCB0byBgYmVnICsgbGVuX2V4dGAuXG5cbjIuICAqKk5vIE91dC1vZi1Cb3VuZHMgQWNjZXNzOioqIFdoaWxlIHRoZSBkb3VibGUgYWR2YW5jZSBtaWdodCBzZWVtIGNvbmNlcm5pbmcsIHRoZSBhY3R1YWwgZGF0YSByZWFkIGhhcHBlbnMgKmJlZm9yZSogdGhlIHNlY29uZCBhZHZhbmNlIG9mIHRoZSBwb2ludGVyLiBGdXJ0aGVybW9yZSwgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYGRlY29kZV9pbnRgIHBlcmZvcm1zIGJvdW5kcyBjaGVja3MsIHNvIGl0J3MgaW1wb3NzaWJsZSB0byBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZXZlbiBpZiB0aGUgcG9pbnRlciBpcyBhZHZhbmNlZCBiZXlvbmQgYGJzLVx1MDAzZWVuZGAuIFRoZSBleHRlbnNpb24gY29tcG9uZW50J3MgbGVuZ3RoIChyZWFkIGJ5IGBkZWNvZGVfc2VxYCB1c2luZyBgZ2V0X2xlbmApIGlzIGFsd2F5cyBjb3JyZWN0LiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoIHRoZSBkb3VibGUgcG9pbnRlciBhZHZhbmNlLlxuXG4zLiAgKipObyBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBUaGUgZG91YmxlIGFkdmFuY2UgaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0IGRvZXNuJ3QgY2F1c2UgdGhlIGNvZGUgdG8gYWNjZXNzIG1lbW9yeSBpdCBzaG91bGRuJ3QsIG9yIHRvIHNraXAgb3ZlciBtZW1vcnkgYm91bmRhcmllcy4gVGhlIGJpdHN0cmVhbSBwb2ludGVyIGlzIHNpbXBseSBtb3ZlZCBmb3J3YXJkIHR3aWNlLCBhbmQgdGhlbiBpbW1lZGlhdGVseSByZXNldC4gSWYgdGhlIGV4dGVuc2lvbiBjb21wb25lbnQgbGVuZ3RoIHJlYWQgYnkgYGRlY29kZV9zZXFgIGhhcHBlbnMgdG8gYmUgc2hvcnRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGludGVnZXIsIHRoYXQgaXMgZmluZS4gVGhlIG9ubHkgcG9zc2libGUgbWFsZm9ybWF0aW9uIGluIHRoZSBjb2RlIGlzIGlmIHRoZSBjb2RlIGFkdmFuY2VzIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0LCBidXQgdGhlIGBicy1cdTAwM2VjdXJgIHBvaW50ZXIgZG9lcyBub3QgZ2V0IGRlcmVmZXJlbmNlZCB0byBjYXVzZSBhIGNyYXNoLlxuXG40LiAgKipObyBPdGhlciBWdWxuZXJhYmlsaXRpZXM6KiogVGhpcyBjb2RlIGlzIGxpbWl0ZWQgdG8gYHRpbWVUb0xpdmVgLiBUaGUgcGFyc2luZyBvZiB0aGUgSC4zMjMgZGF0YSBzdHJlYW0gaXMgZml4ZWQsIHNvIHRoZXJlIGlzIG5vIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgYHRpbWVUb0xpdmVgIGNvdWxkIGhhdmUgYmVlbiBjb3JydXB0ZWQuXG5cbkluIHN1bW1hcnksIHRoaXMgYnVnIGlzIGEgcHVyZWx5IGxvZ2ljYWwgZXJyb3IuIEl0IGhhcyBubyBlZmZlY3Qgb24gcHJvZ3JhbSBiZWhhdmlvciBiZWNhdXNlIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBpcyByZXNldCB0byBhIHZhbGlkIGxvY2F0aW9uLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCBuZWNlc3NhcnksIGJlY2F1c2UgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSB0aGVyZSBkdWUgdG8gc3RhdGljIGFuYWx5c2lzIG9yIGEgY29kZSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzExLCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM4OjEyLjg5OTc5NjAxMVoiLCJTZXEiOjExMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGRlY29kZV9pbnRgIHdoZXJlIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBgYnMtXFx1MDAzZWN1cmAgaXMgYWR2YW5jZWQgdHdpY2UgYnkgYGxlbmAgd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGggdGhlIGBERUNPREVgIGF0dHJpYnV0ZSAod2hpY2ggb25seSBhcHBsaWVzIHRvIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgaW4gdGhlIEguMzIzIEFTTi4xIHNjaGVtYSkuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpbWVUb0xpdmVgIGlzIGFsd2F5cyBhbiBleHRlbnNpb24gY29tcG9uZW50IGluIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLCB0aGUgY2FsbGVyIGBkZWNvZGVfc2VxYCBzYXZlcyB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYmVmb3JlIGRlY29kaW5nIHRoZSBjb21wb25lbnQgYW5kIHVuY29uZGl0aW9uYWxseSByZXN0b3JlcyBpdCB0byBgYmVnICsgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCkgYWZ0ZXJ3YXJkcy4gQXMgYSByZXN1bHQsIHRoZSBkb3VibGUgYWR2YW5jZSBpbiBgZGVjb2RlX2ludGAgaXMgaW1tZWRpYXRlbHkgdW5kb25lIGJ5IHRoZSBjYWxsZXIgYW5kIGhhcyBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiBzdWJzZXF1ZW50IHBhcnNpbmcuXFxuXFxuRnVydGhlcm1vcmUsIHRoZSBhY3R1YWwgbWVtb3J5IHJlYWQgaW4gYGdldF91aW50YCBvY2N1cnMgYmVmb3JlIHRoZSBlcnJvbmVvdXMgc2Vjb25kIGFkdmFuY2UgYW5kIGlzIHByb3Blcmx5IGJvdW5kcy1jaGVja2VkIGJ5IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBjYXVzZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQsIGxlYWtlZCwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGRlY29kZV9pbnRgIHdoZXJlIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBgYnMtXFx1MDAzZWN1cmAgaXMgYWR2YW5jZWQgdHdpY2UgYnkgYGxlbmAgd2hlbiBkZWNvZGluZyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGggdGhlIGBERUNPREVgIGF0dHJpYnV0ZSAod2hpY2ggb25seSBhcHBsaWVzIHRvIHRoZSBgdGltZVRvTGl2ZWAgZmllbGQgaW4gdGhlIEguMzIzIEFTTi4xIHNjaGVtYSkuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpbWVUb0xpdmVgIGlzIGFsd2F5cyBhbiBleHRlbnNpb24gY29tcG9uZW50IGluIGBSZWdpc3RyYXRpb25SZXF1ZXN0YCBhbmQgYFJlZ2lzdHJhdGlvbkNvbmZpcm1gLCB0aGUgY2FsbGVyIGBkZWNvZGVfc2VxYCBzYXZlcyB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYmVmb3JlIGRlY29kaW5nIHRoZSBjb21wb25lbnQgYW5kIHVuY29uZGl0aW9uYWxseSByZXN0b3JlcyBpdCB0byBgYmVnICsgbGVuYCAodGhlIGxlbmd0aCBvZiB0aGUgZXh0ZW5zaW9uIGNvbXBvbmVudCkgYWZ0ZXJ3YXJkcy4gQXMgYSByZXN1bHQsIHRoZSBkb3VibGUgYWR2YW5jZSBpbiBgZGVjb2RlX2ludGAgaXMgaW1tZWRpYXRlbHkgdW5kb25lIGJ5IHRoZSBjYWxsZXIgYW5kIGhhcyBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiBzdWJzZXF1ZW50IHBhcnNpbmcuXFxuXFxuRnVydGhlcm1vcmUsIHRoZSBhY3R1YWwgbWVtb3J5IHJlYWQgaW4gYGdldF91aW50YCBvY2N1cnMgYmVmb3JlIHRoZSBlcnJvbmVvdXMgc2Vjb25kIGFkdmFuY2UgYW5kIGlzIHByb3Blcmx5IGJvdW5kcy1jaGVja2VkIGJ5IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBjYXVzZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQsIGxlYWtlZCwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3csIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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:nil,}