Name: series-workflowd4vxt Phase: Succeeded StartedAt: 2026-07-13 22:14:36 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[0] Phase: Succeeded StartedAt: 2026-07-13 22:14:36 +0000 UTC FinishedAt: 2026-07-13 22:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 22:14:36 +0000 UTC FinishedAt: 2026-07-13 22:53:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_IP", "IP_SET_HASH_NET", "NETFILTER_XT_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_IP", "IP_SET_HASH_NET", "NETFILTER_XT_SET" ], "series_id": "bc05cd38-238d-45da-8307-8a0d42a98c38" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_ip4_del", "hash_ip6_del", "hash_net4_del", "hash_net6_del", "hash_ip4_resize", "hash_ip6_resize", "hash_net4_resize", "hash_net6_resize", "ip_set_comment_free" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NDA4MDI1NThmZmIxZWUyYTJhOThjZjBjODczOGFiNjA0OTllZDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMjI6NTE6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMTEyLDcgJiM0MzsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxuIFx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuICNlbmRpZlxuLVx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiYjNDM7XHRcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xuJiM0MztcdFx0aWYgKGV4dClcbiYjNDM7XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4gXG4gXHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbiBcdFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0MDgwMjU1OGZmYjFlZTJhMmE5OGNmMGM4NzM4YWI2MDQ5OWVkMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAyMjo1MToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCkBAIC0xMTEyLDcgJiM0MzsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCiAJCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKICNlbmRpZgotCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKJiM0MzsJCS8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqLwomIzQzOwkJaWYgKGV4dCkKJiM0MzsJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAogCQlpZiAodC0mZ3Q7cmVzaXppbmcgJmFtcDsmYW1wOyBleHQgJmFtcDsmYW1wOyBleHQtJmd0O3RhcmdldCkgewogCQkJLyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgaXBzZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIEl0IGFwcGVhcnMgdGhleSYjMzk7dmUgYWRkZWQgYSBzaW1wbGUgY2hlY2s6IGBpZiAoZXh0KWAgYmVmb3JlIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO2Agd2l0aGluIHRoZSBgbXR5cGVfZGVsYCBmdW5jdGlvbi4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc21hbGwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGNvbnRleHQgb2YgYG10eXBlX2RlbGAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGNoZWNrIGhhcyBiZWVuIGFkZGVkLCBhbmQgd2h5LiBUaW1lIHRvIHB1bGwgdXAgYGdyZXBwZXJgIGFuZCBmaW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gcHJldmVudCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE3Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNjojdW5kZWYgbXR5cGVfZGVsX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA3LSN1bmRlZiBtdHlwZV9haGFzaF9tZW1zaXplXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTQtI3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTU6I3VuZGVmIG10eXBlX2RlbFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1MC0jZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1MTojZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Mi0jZGVmaW5lIG10eXBlX2FoYXNoX21lbXNpemVcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1OS0jZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjYwOiNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjEtI2RlZmluZSBtdHlwZV90ZXN0X2NpZHJzXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNTgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyMC1cdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1MjE6XHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyMi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjYyNDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjI1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYzMj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODYtXHRcdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc4NzpcdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODgtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1MS1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5NTI6XHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEwNjM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExMS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBqJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4MC1cdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODE6XHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNDgyLVx0XHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcHNldCBIYXNoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtdHlwZV9kZWxgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgaXMgYSAqdGVtcGxhdGUqIGZpbGUsIHVzZWQgYnkgYWxsIHRob3NlIGlwc2V0IGhhc2ggdHlwZXMg4oCTIGBpcF9zZXRfaGFzaF9pcC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBidWcgaXMgdGhhdCBgaXBfc2V0X2V4dF9kZXN0cm95YCB3YXMgYmVpbmcgY2FsbGVkIHdoZW4gYGV4dGAgd2FzIE5VTEwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgb2NjdXJzIHNwZWNpZmljYWxseSBkdXJpbmcgYSByZXNpemUgcmVwbGF5LgoKTGV0IG1lIHNlZSwgYGlwX3NldF9leHRfZGVzdHJveWAgdGFrZXMgYGRhdGFgIGFzIGFuIGFyZ3VtZW50IOKAkyB0aGUgZWxlbWVudCBkYXRhIOKAkyBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGUgY29kZSBuZWVkcyB0byBmcmVlIHRoYXQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0ICYjMzQ7T24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuJiMzNDsgU28gdGhlIGNoZWNrIGBpZiAoZXh0KWAgaXMgdGhlIGtleS4gSXQgcHJldmVudHMgY2FsbGluZyBgaXBfc2V0X2V4dF9kZXN0cm95YCB3aGVuIGBleHRgIGlzIGFscmVhZHkgTlVMTC4gR29vZCwgaXQmIzM5O3MgYSBudWxsIHBvaW50ZXIgY2hlY2suIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBhcHByb3ByaWF0ZSBmaXggZm9yIGEgcmVzaXplIHJlcGxheSBzY2VuYXJpby4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgcHJvcGVybHkuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgSVBfU0VUX0hBU0hgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz00Nj1jb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0cyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gaGluZ2VzIG9uIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgd2hlcmUgd291bGQgSSBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgSVBfU0VUYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbT8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gSXQgY291bGQgYmUgZGlyZWN0bHkgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGBpcHNldGAgcGFydCBvZiBuZXRmaWx0ZXIuIFNvLCBJJiMzOTtsbCBjaGVjayBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbGF0dGVyIGFzIGl0IHNlZW1zIG1vcmUgZm9jdXNlZCB0byB0aGlzIHRhc2ssIGJ1dCBpZiBJIGRvbiYjMzk7dCBmaW5kIGl0IHRoZXJlLCBJJiMzOTtsbCBicmFuY2ggb3V0IHRvIHRoZSBicm9hZGVyIG5ldGZpbHRlciBLY29uZmlnLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaHVudCAtIHRoZSBnb2FsIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IEtjb25maWcgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI6bWVudWNvbmZpZyBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ9aWYgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY6Y29uZmlnIElQX1NFVF9NQVhcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI4OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo3NDpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTAzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTMwOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXHR0cmlzdGF0ZSBcJiMzNDtsaXN0OnNldCBzZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIElQIFNldCBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHN1cHBvcnQgYElQX1NFVGAgYW5kIHRoZSBgSVBfU0VUX0hBU0hfSVBgIG1ldGhvZCAob3IgYW55IG9mIHRoZSBvdGhlciBoYXNoaW5nIHZhcmlhdGlvbnMpIGluIG15IGN1cnJlbnQgc2V0dXAuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSByZXF1aXJlbWVudHMuIE9rYXksIEkmIzM5O2xsIGFkZCBgSVBfU0VUYCBhbmQgYElQX1NFVF9IQVNIX0lQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgd2F5LCB0aGUgc3lzdGVtIHdpbGwga25vdyB0aGF0IEkgaW50ZW5kIHRvIGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBkdXJpbmcgY29tcGlsYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgYmFzaWMgZW5hYmxpbmcgc3RlcC4KCk5vdywgdGhhdCBgbXR5cGVfZGVsYCBmdW5jdGlvbi4uLnRoYXQmIzM5O3MgYSBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBnZW5lcmF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb25zIHdvcmsgZm9yIGVmZmVjdGl2ZSBkZWJ1Z2dpbmcgYW5kIHBvdGVudGlhbCBjdXN0b21pemF0aW9uIGxhdGVyIG9uLiBMZXQgbWUgdHJhY2UgYmFjayBhbmQgc2VlIGV4YWN0bHkgaG93IHRoYXQgbWFjcm8gZXhwYW5kcyBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGNvZGUgbG9va3MgbGlrZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgYW55IHNpZGUgZWZmZWN0cy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA1LSN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy0jdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE1OiN1bmRlZiBtdHlwZV9kZWxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE2LSN1bmRlZiBtdHlwZV90ZXN0X2NpZHJzXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTAtI2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTE6I2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTktI2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjYxLSNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzU2PXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM1NzptdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ5MD1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjAtXHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTIxOlx0XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBrKSksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MjM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYyNS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVx0XHR9IGVsc2Uge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XHRcdFx0bXR5cGVfZGVsKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBOVUxMLCBOVUxMLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD04Njg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlx0XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTMtXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDYzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA2NDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTI6XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cdFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBgbXR5cGVfZGVsYCBNYWNybyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgbXR5cGVfZGVsYCBpcyBjbGVhcmx5IGEgbWFjcm8sIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAuICBUaGF0IGBJUFNFVF9UT0tFTmAgbGlrZWx5IGp1c3QgY29uY2F0ZW5hdGVzIGl0cyBhcmd1bWVudHMuICBUaGVyZWZvcmUsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRpbmcgZnVuY3Rpb25zLCBhbmQganVkZ2luZyBieSB0aGUgZXhhbXBsZSBuYW1lcywgdGhleSYjMzk7cmUgcHJvYmFibHkgZGVsZXRpb24gZnVuY3Rpb25zOiBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldF9kZWxgLCBhbmQgc28gb24uIFRoZXkgd2lsbCBiZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBgTVRZUEVgIHBhc3NlZCB0byBpdC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE1UWVBFYCBhY3R1YWxseSAqaXMqIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCB0aGVyZS4gVGhhdCBzaG91bGQgdGVsbCBtZSB0aGUgdHlwZSB0aGVzZSBkZWxldGlvbiBmdW5jdGlvbnMgYXJlIGFjdGluZyB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA1LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwNjojdW5kZWYgTVRZUEVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDctI3VuZGVmIEhPU1RfTUFTS1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMDk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIxMC0jZGVmaW5lIEhPU1RfTUFTS1x0MTI4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIEZ1bmN0aW9ucyBmb3IgUG90ZW50aWFsIFJlc2l6ZSBSZXBsYXkgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSByZW1vdmFsIGZ1bmN0aW9ucyDigJMgYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYW5kIHRoZSBsaWtlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFkZCBgaGFzaF9pcDRfZGVsYCBhbmQgYGhhc2hfaXA2X2RlbGAgdG8gYEZvY3VzU3ltYm9sc2AuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcmVwb3J0IGlzIGFib3V0IGEgcmVzaXplIHJlcGxheS4gUmlnaHQsIGxldCBtZSBjaGVjayBpZiBgbXR5cGVfcmVzaXplYCBpcyBhbHNvIGJlaW5nIGdlbmVyYXRlZC4gWXVwLCBpdCBpcy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbXR5cGVfcmVzaXplYCBpcyBoYW5kbGVkLCBhbmQgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBtdHlwZV9yZXNpemVgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE4LSN1bmRlZiBtdHlwZV91cmVmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxOTojdW5kZWYgbXR5cGVfcmVzaXplXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIxOiN1bmRlZiBtdHlwZV9yZXNpemVfYWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIyLSN1bmRlZiBtdHlwZV9oZWFkXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjMtI2RlZmluZSBtdHlwZV91cmVmXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY0OiNkZWZpbmUgbXR5cGVfcmVzaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjUtI2RlZmluZSBtdHlwZV9leHRfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjY6I2RlZmluZSBtdHlwZV9yZXNpemVfYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2Ny0jZGVmaW5lIG10eXBlX2hlYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjkzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTUtLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE2OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTctXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MzI6bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjQ1LVx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDY6XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NDctXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc4Mi1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODM6XHRcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODQtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAyOC1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTAyOTpcdFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAzMC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTAzMTpcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDMyLVx0XHRpZiAoIXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cdHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDcyOlx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNzMtXHRpbnQgaSwgaiwgaywgciwgcmV0ID0gLUlQU0VUX0VSUl9FWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXHRcdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjM6XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI0LVx0XHRcdGlmICh4KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4OC1cdC51cmVmXHQ9IG10eXBlX3VyZWYsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODk6XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ5MC1cdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFJlc2l6ZSBJc3N1ZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHByb2JsZW0gaXMgY3JvcHBpbmcgdXAgZHVyaW5nIGEgcmVzaXplIG9wZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX3Jlc2l6ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24gYmVpbmcgYWN0aXZlIHdoZW4gdGhlIGJ1ZyBtYW5pZmVzdHMuIE5vdywgdGhlIGtleSBpcyB3aGVyZSB0aGlzIGBtdHlwZV9yZXNpemVgIGdldHMgY2FsbGVkIGZyb20sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCBmcm9tIGEgcmVwbGF5IHNjZW5hcmlvLiBUaGUgcmVhbCBjdWxwcml0LCB0aG91Z2gsIGlzIGxpa2VseSBpbiBgbXR5cGVfZGVsYCwgc2luY2UgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgKmJ5KiBgbXR5cGVfcmVzaXplYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtdHlwZV9yZXNpemVgIGFuZCBgbXR5cGVfZGVsYC4gQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUuIEkgbmVlZCB0byBiZSBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHNlZWluZyBgbXR5cGVfcmVzaXplYCBhcm91bmQgbGluZSA3ODcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdC8qIFRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3RoZXIgd3JpdGVyLiAqL1xuIDc3MTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNldGFibGUsIHQpO1xuIDc3MjpcdFxuIDc3MzpcdFx0LyogR2l2ZSB0aW1lIHRvIG90aGVyIHJlYWRlcnMgb2YgdGhlIHNldCAqL1xuIDc3NDpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNzc1Olx0XG4gNzc2Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzZXQgJXMgcmVzaXplZCBmcm9tICV1ICglcCkgdG8gJXUgKCVwKVxcblwmIzM0Oywgc2V0LVx1MDAzZW5hbWUsXG4gNzc3Olx0XHRcdCBvcmlnLVx1MDAzZWh0YWJsZV9iaXRzLCBvcmlnLCB0LVx1MDAzZWh0YWJsZV9iaXRzLCB0KTtcbiA3Nzg6XHRcdC8qIEFkZC9kZWxldGUgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBTRVQgdGFyZ2V0IGR1cmluZyByZXNpemUuXG4gNzc5Olx0XHQgKiBLZXJuZWwtc2lkZSBhZGQgY2Fubm90IHRyaWdnZXIgYSByZXNpemUgYW5kIHVzZXJzcGFjZSBhY3Rpb25zXG4gNzgwOlx0XHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXG4gNzgxOlx0XHQgKi9cbiA3ODI6XHRcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuIDc4MzpcdFx0XHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcbiA3ODQ6XHRcdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG4gNzg1Olx0XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbiA3ODY6XHRcdFx0fSBlbHNlIHtcbiA3ODc6XHRcdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xuIDc4ODpcdFx0XHR9XG4gNzg5Olx0XHRcdGxpc3RfZGVsKGwpO1xuIDc5MDpcdFx0XHRrZnJlZShsKTtcbiA3OTE6XHRcdH1cbiA3OTI6XHRcdC8qIElmIHRoZXJlJiMzOTtzIG5vYm9keSBlbHNlIHVzaW5nIHRoZSB0YWJsZSwgZGVzdHJveSBpdCAqL1xuIDc5MzpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2b3JpZy1cdTAwM2V1cmVmKSkge1xuIDc5NDpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUYWJsZSBkZXN0cm95IGJ5IHJlc2l6ZSAlcFxcblwmIzM0Oywgb3JpZyk7XG4gNzk1Olx0XHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCBvcmlnLCBmYWxzZSk7XG4gNzk2Olx0XHR9XG4gNzk3Olx0XG4gNzk4Olx0b3V0OlxuIDc5OTpcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gYG10eXBlX2RlbGAgd2l0aCBhIE5VTEwgYGV4dGAqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgbWFraW5nIGEgY2FsbCB0byBgbXR5cGVfZGVsKHNldCwgJmFtcDt4LSZndDtkLCBOVUxMLCBOVUxMLCAwKTtgLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBgZXh0YCBpcyBiZWluZyBwYXNzZWQgYXMgYE5VTExgLiAgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHdoYXQgdGhhdCBpbXBsaWVzIHdpdGhpbiB0aGUgZnVuY3Rpb24gYG10eXBlX2RlbGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTEyLiBUaGUgYGV4dGAgcGFyYW1ldGVyLCBmcm9tIHdoYXQgSSByZWNhbGwsIHVzdWFsbHkgaGFuZGxlcyBzb21lIHNvcnQgb2YgZXh0ZXJuYWwgZGF0YSBvciBjb250ZXh0IHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHByb2Nlc3MuIFBhc3NpbmcgYE5VTExgIGltcGxpZXMgYSBzcGVjaWZpYywgcGVyaGFwcyBzaW1wbGVyLCBkZWxldGlvbiBzY2VuYXJpby4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpYWwgbG9naWMsIG9yIGxhY2sgdGhlcmVvZiwgaXMgdHJpZ2dlcmVkIGJ5IGEgTlVMTCBgZXh0YCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIElzIHRoZXJlIGEgZGVmYXVsdCBkZWxldGlvbiBwcm9jZWR1cmUgd2l0aG91dCBleHRlcm5hbCBob29rcyB0aGF0IGlzIGluaXRpYXRlZD8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgYXQgcGxheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGJyYW5jaCBvZiBleGVjdXRpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIG15IGFuYWx5c2lzLiBXaGF0IGRvZXMgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBgZXh0ID09IE5VTExgIChvciwgYGV4dCAhPSBOVUxMYCkgZW50YWlsPyBXaGF0IGRvZXMgbGluZSAxMTEyIGFjdHVhbGx5IGRvIGluIHRoaXMgY2FzZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGBOVUxMYCBgZXh0YCBwYXJhbWV0ZXIsIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGludGVudGlvbmFsIG9yIGEgcG90ZW50aWFsIGZsYXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdFx0XHRcdGNvbnRpbnVlO1xuMTEwMTpcdFx0XHRpZiAoU0VUX0VMRU1fRVhQSVJFRChzZXQsIGRhdGEpKVxuMTEwMjpcdFx0XHRcdGdvdG8gb3V0O1xuMTEwMzpcdFxuMTEwNDpcdFx0XHRyZXQgPSAwO1xuMTEwNTpcdFx0XHRjbGVhcl9iaXQoaSwgbi1cdTAwM2V1c2VkKTtcbjExMDY6XHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbjExMDc6XHRcdFx0aWYgKGkgJiM0MzsgMSA9PSBwb3MpXG4xMTA4Olx0XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbjExMDk6XHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4xMTEwOlx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuMTExMTpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuMTExMjpcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbjExMTM6XHRcdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbjExMTQ6XHQjZW5kaWZcbjExMTU6XHRcdFx0LyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovXG4xMTE2Olx0XHRcdGlmIChleHQpXG4xMTE3Olx0XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4xMTE4Olx0XG4xMTE5Olx0XHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbjExMjA6XHRcdFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxuMTEyMTpcdFx0XHRcdCAqIHNhdmUgdmFsdWVzXG4xMTIyOlx0XHRcdFx0ICovXG4xMTIzOlx0XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xuMTEyNDpcdFx0XHRcdGlmICh4KSB7XG4xMTI1Olx0XHRcdFx0XHR4LVx1MDAzZWFkID0gSVBTRVRfREVMO1xuMTEyNjpcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlZCwgdmFsdWUsXG4xMTI3Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4xMTI4Olx0XHRcdFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4xMTI5Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQZXJzaXN0ZW50IEJ1ZyoqCgpPa2F5LCBzbyB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpZiAoZXh0KSBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3RlbXMgZnJvbSBgbXR5cGVfZGVsYCBiZWluZyBjYWxsZWQgZnJvbSBgbXR5cGVfcmVzaXplYCBkdXJpbmcgYSByZXBsYXkgc2NlbmFyaW8uIFNvLCB0aG9zZSB0d28gZnVuY3Rpb25zLCBgbXR5cGVfcmVzaXplYCBhbmQgYG10eXBlX2RlbGAsIGFyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKU2luY2UgdGhlc2UgYXJlIGdlbmVyYXRlZCBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIGBNVFlQRWAgbWFjcm8sIEkmIzM5O20gcmVhbGx5IGxvb2tpbmcgYXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb25zIGxpa2UgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfcmVzaXplYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgdGhlIGxpa2UuIE15IG5leHQgc3RlcCBpcyB0byBsb2NhdGUgYWxsIHRob3NlIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgdGhlIGBNVFlQRWAgbWFjcm8gdGhhdCBlbmQgaW4gYF9yZXNpemVgIGFuZCBgX2RlbGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIGFuZCBvdGhlciByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYxPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzY4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI0PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDMzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU3RyYXRlZ3kgZm9yIEd1aWRpbmcgdGhlIEZ1enplcioqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoZXNlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbnM6IGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX25ldHBvcnQ0X2RlbGAsIGBoYXNoX25ldHBvcnQ2X2RlbGAsIGFuZCB0aGVpciByZXNpemluZyBjb3VudGVycGFydHMuIFRoZW4gd2UgaGF2ZSB0aGUgcmVzaXppbmcgZnVuY3Rpb25zLCBsaWtlIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9pcDZfcmVzaXplYCwgZXRjLgoKTXkgcGxhbiBpcyB0byBzdHJhdGVnaWNhbGx5IGFkZCBzb21lIG9mIHRoZXNlIHRvIGBGb2N1c1N5bWJvbHNgLiBGb2N1c2luZyBvbiBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIGBoYXNoX25ldDRfcmVzaXplYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBkaXJlY3QgdGhlIGZ1enplciB0b3dhcmRzIHRoZSByZWxldmFudCBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgaXQgZW5vdWdoIGd1aWRhbmNlLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBJUF9TRVRgLCBgSVBfU0VUX0hBU0hfSVBgLCBhbmQgYElQX1NFVF9IQVNIX05FVGAgc3BlY2lmaWNhbGx5LgoKV2FpdCwgSSBuZWVkIHRvIHJlY2FsaWJyYXRlIGhlcmUuIFRoZSBidWcgcmVwb3J0IHdhcyBhYm91dCBleHRlbnNpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgdGhlIGNvcnJlY3QgY29kZSBwYXRocy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0IG1lIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgIG9yIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBsb29rIGZvciBzb21ldGhpbmcgbGlrZSBgSVBfU0VUX0VYVGAuIFRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6ZXIgaXMgcHJvcGVybHkgZXhwbG9yaW5nIHRoZSBleHRlbnNpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgaXBzZXQgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpBbHJpZ2h0LCBzbyB0aGUgdXNlciBpcyBhc2tpbmcgYWJvdXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGlwc2V0IGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBleHRlbnNpb25zIGFyZW4mIzM5O3QgaGFuZGxlZCBhcyBzZXBhcmF0ZSBjb25maWcgZmlsZXMgb3IgbW9kdWxlcywgdGhleSYjMzk7cmUgYmFrZWQgcmlnaHQgaW50byB0aGUgaXBzZXQgY29yZS4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNsZWFuZXIgb3ZlcmFsbC4gTm93LCBpZiBJIG5lZWQgdG8gY29uZmlybSBob3cgZXh0ZW5zaW9uIGZ1bmN0aW9uYWxpdHkgaXMgbWFuYWdlZCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgQyBjb2RlLiBNeSBpbnR1aXRpb24gcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGZ1bmN0aW9uIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjbGVhbmluZyB1cCBvciBkZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBleHRlbnNpb25zLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBnaXZlcyB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfZXh0X2Rlc3Ryb3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9NDg9bXR5cGVfZXh0X2NsZWFudXAoc3RydWN0IGlwX3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC01NC1cdFx0aWYgKHRlc3RfYml0KGlkLCBtYXAtXHUwMDNlbWVtYmVycykpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6NTU6XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZ2V0X2V4dChzZXQsIG1hcCwgaWQpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC01Ni19XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTQ3LVx0XHQvKiBFbGVtZW50IGlzIHJlLWFkZGVkLCBjbGVhbnVwIGV4dGVuc2lvbnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNDg6XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE0OS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTc2PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg2Olx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTg3LVx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTI2Nj1tdHlwZV9nYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgyLVx0XHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyODM6XHRcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCB4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yODQtXHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM5MD1tdHlwZV9leHRfY2xlYW51cChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBoYnVja2V0ICpuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzk2LVx0XHRpZiAodGVzdF9iaXQoaSwgbi1cdTAwM2V1c2VkKSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mzk3Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGFoYXNoX2RhdGEobiwgaSwgc2V0LVx1MDAzZWRzaXplKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM5OC19XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00OTA9bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTI1LVx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1MjY6XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyNy1cdFx0XHRkJiM0MzsmIzQzOztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1NS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTU2Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTctXHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cdFx0aWYgKGV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExNzpcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE0Mz1fX2xpc3Rfc2V0X2RlbF9yY3Uoc3RydWN0IHJjdV9oZWFkICogcmN1KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTQ3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxNDg6XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBlKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTQ5LVx0a2ZyZWUoZSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzY9bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjY5LVx0XHQvKiBVcGRhdGUgZXh0ZW5zaW9ucyAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyNzA6XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIG4pO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yNzEtXHRcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTk2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgYG10eXBlX2RlbGAgQnVnKioKCk9rYXksIHNvIHRoZSBidWcmIzM5O3MgbmVzdGxlZCBkZWVwIHdpdGhpbiBgbXR5cGVfZGVsYCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjaywgYW4gYGlmIChleHQpYCwgYmVmb3JlIHRoZSBjYWxsIHRvIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIFRoYXQgc2hvdWxkIHByZXZlbnQgYW55IG5hc3R5IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2ltaWxhciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiBgZXh0YCBoYXBwZW5zIHRvIGJlIE5VTEwsIHdoaWNoIGlzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBgaXBfc2V0X2V4dF9kZXN0cm95YCB0YWtlcyBgc2V0YCBhbmQgYGRhdGFgIGFzIGFyZ3VtZW50cywgcmlnaHQ/IExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLCBlaXRoZXIgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2Agb3IgcGVyaGFwcyB0aGUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRob3NlIHBhcmFtZXRlcnMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZml4IHByb3Blcmx5IGFkZHJlc3NlcyB0aGUgaXNzdWUuIEkgaGF2ZSBhIGh1bmNoLCBidXQgSSBhbHdheXMgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgd2l0aCB0aGUgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9leHRfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0yODU9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDoyODY6aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTI4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gc3lzdGVtIHByb2dyYW1taW5nIGFuZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBmb2N1c2VkIG9uIG5ldHdvcmtpbmcgY29uY2VwdHM6CgoqKkRpc3NlY3RpbmcgYGlwX3NldF9leHRfZGVzdHJveWAqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVsdmUgaW50byBgaXBfc2V0X2V4dF9kZXN0cm95YC4gTXkgaW1tZWRpYXRlIG1lbnRhbCBmcmFtZXdvcmsga2lja3MgaW4g4oCTIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZXMgdG8gdGhlIHRlYXJkb3duIG9mIGFuIElQIHNldCwgbGlrZWx5IHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAmIzM5O2V4dCYjMzk7IHN1Z2dlc3RzIHNvbWUgZXh0ZW5kZWQgb3IgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHNldC4gJiMzOTtEZXN0cm95JiMzOTsgaW1wbGllcyBtZW1vcnkgZGVhbGxvY2F0aW9uIGFuZCBjbGVhbnVwLiYjMzQ7CgpJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIGNvbnNpZGVyOiB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBJcyBpdCBhIGhhc2ggdGFibGUsIGEgcmFkaXggdHJlZSwgYSBiaXRtYXA/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IHRocmVhZC1zYWZlPyBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYW4gSVAgc2V0IHRoYXQmIzM5O3Mgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBsaWtlbHkgaW5jbHVkZXMgZnJlZWluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCBwb3NzaWJseSBkZWNyZW1lbnRpbmcgcmVmZXJlbmNlIGNvdW50ZXJzLCBhbmQgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy4KClRoaXMgcmVxdWlyZXMgY2FyZWZ1bCBhdHRlbnRpb24uIEltcHJvcGVyIGNsZWFudXAgaW4gdGhpcyBhcmVhIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIG11bHRpcGxlIHJlZmVyZW5jZXMsIGlmIGFueSwgYW5kIGNvbnNpZGVyIHdoYXQgaGFwcGVucyBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLiBJcyBpdCBncmFjZWZ1bD8gRG9lcyBpdCBsb2cgZXJyb3JzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlPyBBbnkgZGV0YWlscyBvbiB0aGVzZSBjb25jZXB0cyB3aWxsIGJlIGltcG9ydGFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyB0aG9yb3VnaGx5LCBzbyB0aGF0IEkgY2FuIGFuYWx5emUsIG1vZGlmeSwgb3IgZXh0ZW5kIHRoZSByZWxhdGVkIGNvZGUgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAyODY6XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpkYXRhKVxuIDI4NzpcdHtcbiAyODg6XHRcdC8qIENoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBlbmFibGVkIGZvciB0aGUgc2V0IGFuZFxuIDI4OTpcdFx0ICogY2FsbCBpdCYjMzk7cyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cbiAyOTA6XHRcdCAqL1xuIDI5MTpcdFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xuIDI5MjpcdFx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmMgPSBleHRfY29tbWVudChkYXRhLCBzZXQpO1xuIDI5MzpcdFxuIDI5NDpcdFx0XHRpcF9zZXRfZXh0ZW5zaW9uc1tJUFNFVF9FWFRfSURfQ09NTUVOVF0uZGVzdHJveShzZXQsIGMpO1xuIDI5NTpcdFx0fVxuIDI5NjpcdH1cbiAyOTc6XHRcbiAyOTg6XHRpbnQgaXBfc2V0X3B1dF9mbGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xuIDI5OTpcdFxuIDMwMDpcdC8qIE5ldGxpbmsgQ0IgYXJncyAqL1xuIDMwMTpcdGVudW0ge1xuIDMwMjpcdFx0SVBTRVRfQ0JfTkVUID0gMCxcdC8qIG5ldCBuYW1lc3BhY2UgKi9cbiAzMDM6XHRcdElQU0VUX0NCX1BST1RPLFx0XHQvKiBpcHNldCBwcm90b2NvbCAqL1xuIDMwNDpcdFx0SVBTRVRfQ0JfRFVNUCxcdFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBEb3VibGUtRnJlZSBpbiBJUHNldCBFeHRlbnNpb24gSGFuZGxpbmcqKgoKT2theSwgc28gYGlwX3NldF9leHRfZGVzdHJveWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgZGVzdHJveWluZyB0aGUgY29tbWVudCBleHRlbnNpb24uIFRoZSBidWcgcmVwb3J0IGlzIHBvaW50aW5nIHRvIGEgc2NlbmFyaW8gd2hlcmUgYGV4dGAgaXMgTlVMTCwgYnV0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzIGJlaW5nIGNhbGxlZCB3aXRoIGBkYXRhYCBhbnl3YXkuIEhtbSwgdGhhdCYjMzk7cyBub3QgcmlnaHQuIElmIGBleHRgIGlzIE5VTEwsIHRoZW4gc2hvdWxkbiYjMzk7dCB0aGUgY2FsbCB0byBgaXBfc2V0X2V4dF9kZXN0cm95YCBiZSBza2lwcGVkIGFsdG9nZXRoZXI/IEFuZCBub3cgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5ICphZGRzKiB0aGUgYGlmIChleHQpYCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGJsb2NrIGFnYWluLiBBaCwgaXQgbWVudGlvbnMgYSAmIzM0O3Jlc2l6ZSByZXBsYXkuJiMzNDsgT2theSwgdGhhdCYjMzk7cyB0aGUga2V5LiBJZiBgZXh0YCBpcyBOVUxMLCBpdCYjMzk7cyBsaWtlbHkgYSByZXNpemUgcmVwbGF5IHNjZW5hcmlvLiBEdXJpbmcgYSByZXNpemUgcmVwbGF5LCB0aGUgZXh0ZW5zaW9ucyBhcmUgKmFscmVhZHkqIGRlc3Ryb3llZC4gU28sIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpYCBhZ2FpbiB3aXRoaW4gYSByZXNpemUgcmVwbGF5IHdvdWxkIGJlIHRoZSBwcm9ibGVtLiBJdCB3b3VsZCB2ZXJ5IGxpa2VseSBjYXVzZSBhIGRvdWJsZS1mcmVlIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBiZWNhdXNlIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGNhbGxzIHRoZSBgZGVzdHJveWAgZnVuY3Rpb24gb24gdGhlIGNvbW1lbnQgZXh0ZW5zaW9uLCB3aGljaCBJIHN0cm9uZ2x5IHN1c3BlY3QgZnJlZXMgdGhlIGNvbW1lbnQgc3RyaW5nIGl0c2VsZi4gSSBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYGlwX3NldF9jb21tZW50X2ZyZWVgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBteSBodW5jaC4gSSYjMzk7bGwgY2hlY2sgYGlwX3NldF9leHRlbnNpb25zW0lQU0VUX0VYVF9JRF9DT01NRU5UXS5kZXN0cm95YCBkaXJlY3RseS4gWWVwLCBpdCYjMzk7cyBwcm9iYWJseSBgaXBfc2V0X2NvbW1lbnRfZnJlZWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AsIGFzIEkgc3VzcGVjdGVkLiBFeGNlbGxlbnQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQU0VUX0VYVF9JRF9DT01NRU5UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMz1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyMC1cdH0sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDIxOlx0W0lQU0VUX0VYVF9JRF9DT01NRU5UXSA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjItXHRcdC50eXBlXHQgPSBJUFNFVF9FWFRfQ09NTUVOVCB8IElQU0VUX0VYVF9ERVNUUk9ZLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI1OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaXBfc2V0X2NvcmUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhpcyBhcmVhIGlzIHJlbGV2YW50IHRvIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGNvbnRleHQsIGUuZy4sICYjMzQ7dGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2V0IHR5cGVzIGFuZCB0aGUgZ2VuZXJpYyBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLCYjMzQ7ICYjMzQ7dGhlIGhhbmRsaW5nIG9mIHNldCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIHRyYWNraW5nIHVwZGF0ZXMsJiMzNDsgb3IgJiMzNDtob3cgc2V0IGxvb2t1cHMgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUmIzM0O10uIExpbmUgNDIxIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBbc3BlY3VsYXRlIG9uIGxpa2VseSBjb2RlIGJsb2NrIGZ1bmN0aW9uLCBlLmcuICYjMzQ7c2V0IGVsZW1lbnQgYWRkaXRpb24vcmVtb3ZhbCYjMzQ7LCAmIzM0O3NldCBsb29rdXBzJiMzNDssICYjMzQ7aXRlcmF0aW9uIGxvZ2ljJiMzNDtdLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsLCBhcyBjb250ZXh0IGlzIGtleSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGlwc2V0IGxvZ2ljLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiBzcGVjaWZpYyBjb2RlIHN0cnVjdHVyZSB0byBzZWFyY2gsIGUuZy4sICYjMzQ7ZnVuY3Rpb24gY2FsbHMmIzM0OywgJiMzNDtkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24mIzM0OywgJiMzNDttZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24mIzM0O10sIGFuZCBJJiMzOTtsbCBrZWVwIHRoZSBicm9hZGVyIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBpbiBtaW5kLiBTcGVjaWZpY2FsbHksIEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGlwc2V0IGNvcmUgaW50ZXJmYWNlcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiBbaWRlbnRpZnkgc3BlY2lmaWMgcG90ZW50aWFsIGNvbmNlcm5zLCBlLmcuLCAmIzM0O2NvbmN1cnJlbmN5IGlzc3VlcywmIzM0OyAmIzM0O21lbW9yeSBsZWFrcywmIzM0OyBvciAmIzM0O3BvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyYjMzQ7XSBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdFx0W0lQU0VUX0VYVF9JRF9TS0JJTkZPXSA9IHtcbiA0MTY6XHRcdFx0LnR5cGVcdD0gSVBTRVRfRVhUX1NLQklORk8sXG4gNDE3Olx0XHRcdC5mbGFnXHQ9IElQU0VUX0ZMQUdfV0lUSF9TS0JJTkZPLFxuIDQxODpcdFx0XHQubGVuXHQ9IHNpemVvZihzdHJ1Y3QgaXBfc2V0X3NrYmluZm8pLFxuIDQxOTpcdFx0XHQuYWxpZ25cdD0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9za2JpbmZvKSxcbiA0MjA6XHRcdH0sXG4gNDIxOlx0XHRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdID0ge1xuIDQyMjpcdFx0XHQudHlwZVx0ID0gSVBTRVRfRVhUX0NPTU1FTlQgfCBJUFNFVF9FWFRfREVTVFJPWSxcbiA0MjM6XHRcdFx0LmZsYWdcdCA9IElQU0VUX0ZMQUdfV0lUSF9DT01NRU5ULFxuIDQyNDpcdFx0XHQubGVuXHQgPSBzaXplb2Yoc3RydWN0IGlwX3NldF9jb21tZW50KSxcbiA0MjU6XHRcdFx0LmFsaWduXHQgPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQpLFxuIDQyNjpcdFx0XHQuZGVzdHJveSA9IGlwX3NldF9jb21tZW50X2ZyZWUsXG4gNDI3Olx0XHR9LFxuIDQyODpcdH07XG4gNDI5Olx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2V4dGVuc2lvbnMpO1xuIDQzMDpcdFxuIDQzMTpcdHN0YXRpYyBib29sXG4gNDMyOlx0YWRkX2V4dGVuc2lvbihlbnVtIGlwX3NldF9leHRfaWQgaWQsIHUzMiBmbGFncywgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiA0MzM6XHR7XG4gNDM0Olx0XHRyZXR1cm4gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmZsYWcgP1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIGBpcF9zZXRfY29tbWVudF9mcmVlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgaXBfc2V0X2NvbW1lbnRfZnJlZWAgaXMgdGhlICpkZXN0cm95KiBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBtZW1vcnkgYW5kIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIElQIHNldCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlc2UgY29tbWVudHMgYXJlIGJlaW5nIGZyZWVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlLCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IGFuZCBmaW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM4Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM4NzppcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMz1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyNS1cdFx0LmFsaWduXHQgPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQpLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQyNjpcdFx0LmRlc3Ryb3kgPSBpcF9zZXRfY29tbWVudF9mcmVlLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBgaXBfc2V0X2NvbW1lbnRfZnJlZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGZyZWVpbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBjb21tZW50cyBpbiBhbiBJUCBzZXQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3M/IEVycm9yIGhhbmRsaW5nPyBQYXJ0IG9mIGEgYnJvYWRlciBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHNldC4KCkkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24sIGF0IGEgbWluaW11bSwgdG8gaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbi4gTGlrZWx5IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGNvbW1lbnQgc3RyaW5nIGl0c2VsZi4gSSBhbHNvIGFudGljaXBhdGUgaXQgaGFuZGxpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyBpZiB0aGUgY29tbWVudCBpcyBOVUxMPyBEb2VzIGl0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIG1lbW9yeSBiZWluZyBmcmVlZCBpcyBhY3R1YWxseSB2YWxpZD8gQW5kIHdoYXQgYWJvdXQgY29uY3VycmVuY3k/IElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgYSByYWNlIGNvbmRpdGlvbiBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBzZXQgb3BlcmF0aW9ucz8gVGhvc2UgYXJlIHRoZSB0aGluZ3MgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBvZmYgdGhlIGJhdCwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY2xlYW5lZCB1cCwgaG93IGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLiBGcm9tIGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NjpcdHN0YXRpYyB2b2lkXG4gMzg3Olx0aXBfc2V0X2NvbW1lbnRfZnJlZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnB0cilcbiAzODg6XHR7XG4gMzg5Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQgPSBwdHI7XG4gMzkwOlx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjO1xuIDM5MTpcdFxuIDM5MjpcdFx0YyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzOTM6XHRcdGlmICh1bmxpa2VseSghYykpXG4gMzk0Olx0XHRcdHJldHVybjtcbiAzOTU6XHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMTtcbiAzOTY6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIDM5NzpcdFx0a2ZyZWVfcmN1KGMsIHJjdSk7XG4gMzk4Olx0fVxuIDM5OTpcdFxuIDQwMDpcdHR5cGVkZWYgdm9pZCAoKmRlc3Ryb3llcikoc3RydWN0IGlwX3NldCAqLCB2b2lkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtdHlwZV9kZWxgIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgRG91YmxlLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZS4gSXQgKnNlZW1zKiBsaWtlIGZyZWVpbmcgdGhlIGNvbW1lbnQgc3RyaW5nIGlzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgc2V0LSZndDtleHRfc2l6ZWAgdG8gYmUgZGVjcmVtZW50ZWQgdHdpY2UgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2VzbiYjMzk7dCBoYXBwZW4uIE9oIHdhaXQsIGByY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC0mZ3Q7YywgTlVMTCk7YCBpcyBpbiB0aGVyZS4gUmlnaHQsIHNvIGlmIGl0JiMzOTtzIGNhbGxlZCBhIHNlY29uZCB0aW1lLCBgY29tbWVudC0mZ3Q7Y2Agd2lsbCBiZSBOVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZWFybHksIG1pdGlnYXRpbmcgdGhhdCByaXNrLiBQaGV3LCB0aGF0JiMzOTtzIG9uZSBjaGVjayBkb25lLgoKSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSBzZWUgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggdGhlIGBkYXRhYCBmcm9tIHRoZSBoYXNoIHRhYmxlLiBCdXQgd2FpdCwgaXQmIzM5O3MgYWxzbyBjYWxsZWQgd2l0aCBgJmFtcDt4LSZndDtkYCBpbiBgbXR5cGVfcmVzaXplYCEgTGV0IG1lIGdyYWIgdGhhdCBjb2RlIGJsb2NrLi4uCgpgYGBjCgkJaWYgKHgtJmd0O2FkID09IElQU0VUX0FERCkgewoJCQltdHlwZV9hZGQoc2V0LCAmYW1wO3gtJmd0O2QsICZhbXA7eC0mZ3Q7ZXh0LCAmYW1wO3gtJmd0O21leHQsIHgtJmd0O2ZsYWdzKTsKCQl9IGVsc2UgewoJCQltdHlwZV9kZWwoc2V0LCAmYW1wO3gtJmd0O2QsIE5VTEwsIE5VTEwsIDApOwoJCX0KYGBgCgpPa2F5LCBzbyBgJmFtcDt4LSZndDtkYCBpcyB0aGUgZWxlbWVudCBkYXRhIHNhdmVkIGR1cmluZyBhIHJlc2l6ZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGAgaXMsIHNwZWNpZmljYWxseSBob3cgYHgtJmd0O2RgIGlzIHBvcHVsYXRlZC4gSGFuZyBvbiwgSSBzZWUgd2hlcmUgYHhgIGlzIGFsbG9jYXRlZC4gTGV0JiMzOTtzIHNlZToKCmBgYGMKCQkJaWYgKHQtJmd0O3Jlc2l6aW5nICZhbXA7JmFtcDsgZXh0ICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKCQkJCS8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsCgkJCQkgKiBzYXZlIHZhbHVlcwoJCQkJICovCgkJCQl4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7CgkJCQlpZiAoeCkgewoJCQkJCXgtJmd0O2FkID0gSVBTRVRfREVMOwoJCQkJCW1lbWNweSgmYW1wO3gtJmd0O2QsIHZhbHVlLAoJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTsKCQkJCQl4LSZndDtmbGFncyA9IGZsYWdzOwoJCQkJfQpgYGAKCldhaXQgYSBzZWNvbmQuLi5gbWVtY3B5KCZhbXA7eC0mZ3Q7ZCwgdmFsdWUsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO2Agb25seSBjb3BpZXMgdGhlIGtleSBkYXRhLiBUaGUgZWxlbWVudCBrZXksIGJ1dCBub3QgYW55IGV4dGVuc2lvbnMhIFRoaXMgbWVhbnMgd2UmIzM5O3JlICpvbmx5KiBjb3B5aW5nIGBtdHlwZV9lbGVtYCwgdGhlIGtleSwgbm90IHRoZSBleHRlbnNpb25zLi4uIEdvb2QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG10eXBlX2VsZW1gIGluIHBhcnRpY3VsYXIgY29udGFpbnMganVzdCB0aGUga2V5LiBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSB3aGF0IGZpZWxkcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHZlcnkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjYtI2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI3OiNkZWZpbmUgbXR5cGVfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2VsZW0pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTk2PXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk3Om10eXBlX2lzX2ZpbGxlZChjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqeClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTczPXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwMC0jdW5kZWYgbXR5cGVfZGF0YV9uZXh0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwMTojdW5kZWYgbXR5cGVfZWxlbVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDItXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kYXRhX25leHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX25leHQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojZGVmaW5lIG10eXBlX2VsZW1cdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzYtI2lmbmRlZiBIS0VZX0RBVEFMRU5cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjc3OiNkZWZpbmUgSEtFWV9EQVRBTEVOXHRcdHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc4LSNlbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjkzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTEtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzEyOlx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzEzLX07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTY9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTgtXHRlbnVtIGlwc2V0X2FkdCBhZDtcdC8qIEFERHxERUwgZWxlbWVudCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTk6XHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1x0LyogRWxlbWVudCB2YWx1ZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMjAtXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM4MD1tdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM4Ni0jZGVmaW5lIGFoYXNoX2RhdGEobiwgaSwgZHNpemUpXHRcXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozODc6XHQoKHN0cnVjdCBtdHlwZV9lbGVtICopKChuKS1cdTAwM2V2YWx1ZSAmIzQzOyAoKGkpICogKGRzaXplKSkpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zODgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00OTA9bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkyLVx0c3RydWN0IGhidWNrZXQgKm4sICp0bXA7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ5MzpcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00OTQtXHR1MzIgaSwgaiwgZDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYzMj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzktXHR1OCBmbGFncztcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjQwOlx0c3RydWN0IG10eXBlX2VsZW0gKnRtcDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjQxLSNlbmRpZlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDI6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjQzOlx0c3RydWN0IG10eXBlX2VsZW0gKmQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NC1cdHN0cnVjdCBoYnVja2V0ICpuLCAqbTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTgzNT1tdHlwZV9leHRfc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiAqZWxlbWVudHMsIHNpemVfdCAqZXh0X3NpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzktXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODQwOlx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0MS1cdHUzMiBpLCBqLCByO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODcyLVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODczOlx0Y29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmQgPSB2YWx1ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODc0Olx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg3NS1cdHN0cnVjdCBoYnVja2V0ICpuLCAqb2xkID0gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMDAtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMDE6XHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMDItb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDM1LVx0XHR4LVx1MDAzZWFkID0gSVBTRVRfQUREO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDM2Olx0XHRtZW1jcHkoXHUwMDI2eC1cdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzctXHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWV4dCwgZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEwNjQ9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY4LVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA2OTpcdGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNzA6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cdHN0cnVjdCBoYnVja2V0ICpuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyNi1cdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTI3Olx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI4LVx0XHRcdFx0eC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTE3Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNzg6bXR5cGVfZGF0YV9tYXRjaChzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE3OS1cdFx0IHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExOTE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTkyOm10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5My1cdFx0IGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTk4LVx0c3RydWN0IGhidWNrZXQgKm47XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTk6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIwMC0jaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIwMTpcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIwMi1cdGludCByZXQsIGksIGogPSAwLCBrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTI1MD1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU0LVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NTpcdHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyNTYtXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NzpcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU4LVx0aW50IGksIHJldCA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzkwPW10eXBlX2xpc3QoY29uc3Qgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTM5NS1cdGNvbnN0IHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzk2Olx0Y29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOTctXHR1MzIgZmlyc3QgPSBjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX0FSRzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQc2V0IEhhc2ggRGVsZXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgZml4IGhlcmUuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG10eXBlX2VsZW1gIGlzLCBhcyBleHBlY3RlZCwganVzdCB0aGUga2V5LiBUaGUgZXh0ZW5zaW9ucyBhcmUgc3RvcmVkIHJpZ2h0IGFmdGVyIHRoZSBrZXkgaW4gdGhlIGhhc2ggYnVja2V0LiBUaGUgYGFoYXNoX2RhdGFgIGZ1bmN0aW9uIGdyYWJzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbmNsdWRpbmcgdGhvc2UgZXh0ZW5zaW9ucywgYW5kIHRoYXQmIzM5O3MgY3J1Y2lhbC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IGluIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHksIGBkYXRhID0gYWhhc2hfZGF0YShuLCBpLCBzZXQtJmd0O2RzaXplKTtgIGNvbmZpcm1zIHRoaXMuCgpUaGUga2V5IHBvaW50IGlzIHRoaXMgY29uZGl0aW9uYWw6IGBpZiAoZXh0KSBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtgLiBXaGVuIGNhbGxlZCBmcm9tIGBtdHlwZV9yZXNpemVgLCB0aGUgYGV4dGAgdmFyaWFibGUgaXMgTlVMTCwgd2hpY2ggbWVhbnMgYGlwX3NldF9leHRfZGVzdHJveWAgaXMgKm5vdCogY2FsbGVkLiBUaGlzIGlzIHRoZSBmaXgsIGFzIHRoZSBleHRlbnNpb25zIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcgcmVzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4KCk5vdywgbGV0IG1lIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydHMgY2FwdHVyZSB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aHMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWZpYyBleHRlbnNpb24gY29uZmlncyB0byB3b3JyeSBhYm91dCwgc28gdGhvc2UgdGhyZWUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOZXh0LCBJIG5lZWQgdG8gbGlzdCB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBhbmQgYGhhc2hfaXA2X3Jlc2l6ZWAgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRlZCBmb3IgYWxsIGhhc2ggdHlwZXMsIHNvIHRoYXQgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcuCgpJIHNob3VsZCBhZGQgYWxsIHRob3NlIGZ1bmN0aW9ucyB0byB0aGUgbGlzdDsgYGhhc2hfaXA0X2RlbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogaXQgaWYgaXQmIzM5O3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4gU3l6a2FsbGVyIGlzIGNvdmVyYWdlIGZvY3VzZWQsIHNvIGlmIEkgaW5jbHVkZSB0aGVzZSBzeW1ib2xzLCBpdCB3aWxsIHRyeSB0byBoaXQgdGhlbS4gTGV0IG1lIGNvbmZpcm0gdGhhdCBgaGFzaF9pcDRfZGVsYCBpcyBpbmRlZWQgZ2VuZXJhdGVkLCBieSBjaGVja2luZyB0aGUgc291cmNlIGZpbGUuIEl0JiMzOTtzIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIG5vdyB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIE1hY3JvLUdlbmVyYXRlZCBTeW1ib2xzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoeSBpc24mIzM5O3QgYGhhc2hfaXA0X2RlbGAgc2hvd2luZyB1cCBpbiBteSBgZ3JlcGAgc2VhcmNoPyBPaCByaWdodCwgaXQmIzM5O3MgYSBtYWNybyEgTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYCNkZWZpbmUgbXR5cGVfZGVsIElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAgYW5kIHRoZW4gYCAjZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpIGEjI2JgLiBTbywgYE1UWVBFYCBpcyBgaGFzaF9pcDRgIGFuZCBgX2RlbGAgaXMsIHdlbGwsIGBfZGVsYC4gVGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBnZW5lcmF0ZSBgaGFzaF9pcDRfZGVsYC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBkZWZpbml0ZWx5IGJlIGluIHRoZSBjb21waWxlZCBiaW5hcnkuIEdvdCBpdC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIExldCBtZSB0aGluay4uLiBgaXBfc2V0X2V4dF9kZXN0cm95YC4gV2FpdCwgdGhhdCYjMzk7cyBhbiBgaW5saW5lYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAuIFNpbmNlIGl0JiMzOTtzIGlubGluZSwgaXQgcHJvYmFibHkgd29uJiMzOTt0IGJlIGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBjb21waWxlZCBvdXRwdXQuIFdoYXQgYWJvdXQgYGlwX3NldF9jb21tZW50X2ZyZWVgPyBBaCwgdGhhdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYC4gSSBjb3VsZCBhZGQgdGhhdCB0byBgRm9jdXNTeW1ib2xzYCwgYnV04oCmCgpIb2xkIG9uLiBUaGUgYnVnIGlzbiYjMzk7dCBzcGVjaWZpY2FsbHkgYWJvdXQgY29tbWVudHM7IGl0JiMzOTtzIGFib3V0IGV4dGVuc2lvbnMgaW4gZ2VuZXJhbCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUgbGlzdCB0aGUgZXh0ZW5zaW9uczogYGlwX3NldF9za2JpbmZvYCwgYGlwX3NldF9jb3VudGVyYCwgYGlwX3NldF90aW1lb3V0YC4gQnV0LCBkYW1uIGl0LCBgaXBfc2V0X2V4dF9kZXN0cm95YCBvbmx5IGZyZWVzIGNvbW1lbnRzLiBTbyBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byByZXZpc2l0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGF0IGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0c3RhdGljIGlubGluZSB2b2lkXG4gMjg2Olx0aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcbiAyODc6XHR7XG4gMjg4Olx0XHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcbiAyODk6XHRcdCAqIGNhbGwgaXQmIzM5O3MgZGVzdHJveSBmdW5jdGlvbiBmb3IgaXRzIGV4dGVuc2lvbiBwYXJ0IGluIGRhdGEuXG4gMjkwOlx0XHQgKi9cbiAyOTE6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpIHtcbiAyOTI6XHRcdFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcbiAyOTM6XHRcbiAyOTQ6XHRcdFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcbiAyOTU6XHRcdH1cbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcbiAyOTk6XHRcbiAzMDA6XHQvKiBOZXRsaW5rIENCIGFyZ3MgKi9cbiAzMDE6XHRlbnVtIHtcbiAzMDI6XHRcdElQU0VUX0NCX05FVCA9IDAsXHQvKiBuZXQgbmFtZXNwYWNlICovXG4gMzAzOlx0XHRJUFNFVF9DQl9QUk9UTyxcdFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cbiAzMDQ6XHRcdElQU0VUX0NCX0RVTVAsXHRcdC8qIGR1bXAgc2luZ2xlIHNldC9hbGwgc2V0cyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI3OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERvdWJsZSBGcmVlIEJ1ZyBpbiBpcHNldCBSZXNpemUqKgoKT2theSwgc28gdGhlIGNvZGUgb25seSBjYWxscyBgZGVzdHJveWAgZm9yIGNvbW1lbnRzLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gYSBkb3VibGUtZnJlZSBzY2VuYXJpbyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY29tbWVudCBzdHJpbmcgZHVyaW5nIHJlc2l6ZSByZXBsYXkuIFRvIHJlcHJvZHVjZSB0aGlzLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN0ZXBzOiBhbiBpcHNldCB3aXRoIHRoZSBjb21tZW50IGV4dGVuc2lvbiBlbmFibGVkLCBhZGQgYW4gZWxlbWVudCB3aXRoIGEgY29tbWVudCwgdHJpZ2dlciBhIHJlc2l6ZSBvZiB0aGUgaXBzZXQsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGhhdmUgYSBjb25jdXJyZW50IGRlbGV0ZSBvZiB0aGUgZWxlbWVudCBoYXBwZW4gZHVyaW5nIHRoYXQgcmVzaXplIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHJlc2l6ZSByZXBsYXkgaGFuZGxlcyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgbWVudGlvbnM6CgpgYGBjCgkJLyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovCgkJaWYgKGV4dCkKCQkJaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7CmBgYAoKYW5kIHRoZSBgbXR5cGVfcmVzaXplYCBmdW5jdGlvbiB0aGF0IHJlcGxheXMgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZToKCmBgYGMKCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsICZhbXA7b3JpZy0mZ3Q7YWQpIHsKCQkJeCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7CgkJCWlmICh4LSZndDthZCA9PSBJUFNFVF9BREQpIHsKCQkJCW10eXBlX2FkZChzZXQsICZhbXA7eC0mZ3Q7ZCwgJmFtcDt4LSZndDtleHQsICZhbXA7eC0mZ3Q7bWV4dCwgeC0mZ3Q7ZmxhZ3MpOwoJCQl9IGVsc2UgewoJCQkJbXR5cGVfZGVsKHNldCwgJmFtcDt4LSZndDtkLCBOVUxMLCBOVUxMLCAwKTsKCQkJfQoJCQlsaXN0X2RlbChsKTsKCQkJa2ZyZWUobCk7CgkJfQpgYGAKCk9rYXksIHNvIGl0IHJlcGxheXMgQUREIGFuZCBERUwgb3BlcmF0aW9ucyByZWNvcmRlZCBkdXJpbmcgdGhlIHJlc2l6ZSBpbiBgb3JpZy0mZ3Q7YWRgLiBJZiBhIERFTCBoYXBwZW5lZCAqZHVyaW5nKiB0aGUgcmVzaXplLCBgbXR5cGVfZGVsYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHJlcGxheS4gVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggYGV4dCA9PSBOVUxMYC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGBtdHlwZV9kZWxgIHdvdWxkIHRoZW4gbmFpdmVseSBjYWxsIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIEFuZCB0aGF0IGlzIHRoZSBwcm9ibGVtLiBgZGF0YWAgaXMgdGhlIGVsZW1lbnQgZnJvbSB0aGUgKm5ldyogaGFzaCB0YWJsZSBgdGAsIHRoYXQgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZGVsZXRlZCAod2l0aCB0aGUgY29tbWVudCkgZHVyaW5nIHRoZSByZXNpemUgd2FzIGNvcGllZCB0by4gSG93ZXZlciwgaWYgdGhlIGVsZW1lbnQgd2FzIGRlbGV0ZWQgZHVyaW5nIHJlc2l6ZSwgaXQgd2FzIGluIHRoZSAqb2xkKiBoYXNoIHRhYmxlIGBvcmlnYC4KCkR1cmluZyByZXNpemUsIHRoZSBvcmlnaW5hbCBlbGVtZW50cyBmcm9tIHRoZSBvbGQgaGFzaCB0YWJsZSwgYG9yaWdgLCBhcmUgY29waWVkIHRvIHRoZSBuZXcgaGFzaCB0YWJsZSwgYHRgLiBUaGVuLCB0aGlzIHJlcGxheXMgdGhlIG9wZXJhdGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZS4gSWYgYSBkZWxldGUgaXMgcmVwbGF5ZWQsIHRoYXQgZGVsZXRlIHRhcmdldHMgdGhlIGVsZW1lbnQgaW4gYHRgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbS4gSXQgaXMgc3VwcG9zZWQgdG8gZGVsZXRlIGZyb20gYHRgLgoKRHVyaW5nIHRoZSBkZWxldGUgZnJvbSBgdGAsIGl0IGNhbGxzIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIEJ1dCB3YWl0Li4uIHRoZSBjb21tZW50IHN0YXRlcyB0aGF0ICYjMzQ7dGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZCYjMzQ7LiBTbywgKndoZW4qIHdlcmUgdGhleSBkZXN0cm95ZWQ/CgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBtdHlwZV9kZWxgIHdoZW4gaXQmIzM5O3MgY2FsbGVkICpkdXJpbmcqIHRoZSByZXNpemUgb3BlcmF0aW9uIGl0c2VsZiwgdG8gdHJhY2sgd2hlbiB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGRlc3Ryb3llZC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgcmFjZSBjb25kaXRpb24gb3IgYSBsb2dpYyBmbGF3IHdoZXJlIHRoZSBleHRlbnNpb25zIGFyZSBjbGVhbmVkIHVwIGluIG9uZSBwYXJ0IG9mIHRoZSByZXNpemUgcHJvY2VzcyBidXQgbm90IGhhbmRsZWQgY29ycmVjdGx5IGR1cmluZyB0aGUgc3Vic2VxdWVudCByZXBsYXkuIFRoZSByZXBsYXkgbWlnaHQgYmUgY2xlYW5pbmcgdXAgYSBzdHJ1Y3R1cmUgYWxyZWFkeSBjbGVhbmVkIHVwLiBUaGF0IGRvdWJsZS1mcmVlIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTE1Olx0XHRcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xuMTExNjpcdFx0XHRpZiAoZXh0KVxuMTExNzpcdFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuMTExODpcdFxuMTExOTpcdFx0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4xMTIwOlx0XHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbjExMjE6XHRcdFx0XHQgKiBzYXZlIHZhbHVlc1xuMTEyMjpcdFx0XHRcdCAqL1xuMTEyMzpcdFx0XHRcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcbjExMjQ6XHRcdFx0XHRpZiAoeCkge1xuMTEyNTpcdFx0XHRcdFx0eC1cdTAwM2VhZCA9IElQU0VUX0RFTDtcbjExMjY6XHRcdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxuMTEyNzpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xuMTEyODpcdFx0XHRcdFx0eC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuMTEyOTpcdFx0XHRcdH1cbjExMzA6XHRcdFx0fVxuMTEzMTpcdFx0XHRmb3IgKDsgaSBcdTAwM2MgcG9zOyBpJiM0MzsmIzQzOykge1xuMTEzMjpcdFx0XHRcdGlmICghdGVzdF9iaXQoaSwgbi1cdTAwM2V1c2VkKSlcbjExMzM6XHRcdFx0XHRcdGsmIzQzOyYjNDM7O1xuMTEzNDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzk1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25jdXJyZW50IEVsZW1lbnQgTW9kaWZpY2F0aW9uIER1cmluZyBSZXNpemluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIGB0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0YCBpcyB0cnVlLCB0aGVuIHdlJiMzOTt2ZSBnb3QgYSBrZXJuZWwtc2lkZSBkZWxldGUgaGFwcGVuaW5nIGNvbmN1cnJlbnRseSB3aXRoIGEgcmVzaXplIG9wZXJhdGlvbi4gQnV0IHdoYXQgYWJvdXQgdXNlci1zaWRlIGRlbGV0ZXM/IEkgbmVlZCB0byBjb25zaWRlciBib3RoIHBvc3NpYmlsaXRpZXMuCgpMb29raW5nIGF0IGBtdHlwZV9yZXNpemVgLCB0aGUgY29tbWVudCBzcGVjaWZpY2FsbHkgc2F5cyB0aGF0IGtlcm5lbC1zaWRlIGFkZHMvZGVsZXRlcyBhcmUgdGhlIG9ubHkgYWN0aW9ucyB0aGF0IGNhbiBoYXBwZW4gZHVyaW5nIHJlc2l6ZS4gVXNlci1zcGFjZSBhY3Rpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBtdXRleCwgc28gdGhleSBzaG91bGRuJiMzOTt0IGJlIGNvbmN1cnJlbnQuIFRoaXMgY2xhcmlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIGEga2VybmVsLXNpZGUgREVMIGR1cmluZyBhIHJlc2l6ZSB3aWxsIHRyaWdnZXIgYG10eXBlX2RlbGAuCgpJbnNpZGUgYG10eXBlX2RlbGAsIGl0JiMzOTtzIGdvaW5nIHRvIGZpbmQgdGhlIGVsZW1lbnQgaW4gYG9yaWdgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGB0YCAodGhlIHRhcmdldCB0YWJsZSBiZWluZyByZXNpemVkKSBpc24mIzM5O3QgeWV0IHB1Ymxpc2hlZC4gSXQgd2lsbCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYG9yaWdgLCBhbmQgdGhlbiBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50ICppbiBgb3JpZ2AqLiBDcnVjaWFsbHksIGl0IHNhdmVzIHRoZSBERUwgb3BlcmF0aW9uIGluIGBvcmlnLSZndDthZGAuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzOiBhZnRlciBgbXR5cGVfcmVzaXplYCBmaW5pc2hlcyBjb3B5aW5nIGV2ZXJ5dGhpbmcgZnJvbSBgb3JpZ2AgdG8gYHRgLCB3aGF0IGhhcHBlbnMgdG8gdGhhdCBkZWxldGVkIGVsZW1lbnQ/IElmIHRoZSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgLCB3aWxsIGl0IGJlIGNvcGllZCB0byBgdGAgZHVyaW5nIHRoZSByZXNpemUgcHJvY2Vzcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgY29weSBsb29wIHdpdGhpbiBgbXR5cGVfcmVzaXplYCB0byBjb25maXJtIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNsZWFyZWQgYml0IGluIGBvcmlnYCBwcmV2ZW50cyB0aGUgZWxlbWVudCBmcm9tIGJlaW5nIGNvcGllZCBvciBpZiBpdCYjMzk7cyBoYW5kbGVkIGRpZmZlcmVudGx5LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gNjkxOlx0XHRwcl9kZWJ1ZyhcJiMzNDthdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcblwmIzM0OyxcbiA2OTI6XHRcdFx0IHNldC1cdTAwM2VuYW1lLCBvcmlnLVx1MDAzZWh0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7XG4gNjkzOlx0XHRmb3IgKHIgPSAwOyByIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhvcmlnLVx1MDAzZWh0YWJsZV9iaXRzKTsgciYjNDM7JiM0MzspIHtcbiA2OTQ6XHRcdFx0LyogRXhwaXJlIG1heSByZXBsYWNlIGEgaGJ1Y2tldCB3aXRoIGFub3RoZXIgb25lICovXG4gNjk1Olx0XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiA2OTY6XHRcdFx0Zm9yIChpID0gYWhhc2hfYnVja2V0X3N0YXJ0KHIsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpO1xuIDY5NzpcdFx0XHQgICAgIGkgXHUwMDNjIGFoYXNoX2J1Y2tldF9lbmQociwgb3JpZy1cdTAwM2VodGFibGVfYml0cyk7IGkmIzQzOyYjNDM7KSB7XG4gNjk4Olx0XHRcdFx0biA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaGJ1Y2tldChvcmlnLCBpKSk7XG4gNjk5Olx0XHRcdFx0aWYgKCFuKVxuIDcwMDpcdFx0XHRcdFx0Y29udGludWU7XG4gNzAxOlx0XHRcdFx0cG9zID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuLVx1MDAzZXBvcyk7XG4gNzAyOlx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcG9zOyBqJiM0MzsmIzQzOykge1xuIDcwMzpcdFx0XHRcdFx0aWYgKCF0ZXN0X2JpdF9hY3F1aXJlKGosIG4tXHUwMDNldXNlZCkpXG4gNzA0Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDcwNTpcdFx0XHRcdFx0ZGF0YSA9IGFoYXNoX2RhdGEobiwgaiwgZHNpemUpO1xuIDcwNjpcdFx0XHRcdFx0aWYgKFNFVF9FTEVNX0VYUElSRUQoc2V0LCBkYXRhKSlcbiA3MDc6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNzA4Olx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIDcwOTpcdFx0XHRcdFx0LyogV2UgaGF2ZSByZWFkZXJzIHJ1bm5pbmcgcGFyYWxsZWwgd2l0aCB1cyxcbiA3MTA6XHRcdFx0XHRcdCAqIHNvIHRoZSBsaXZlIGRhdGEgY2Fubm90IGJlIG1vZGlmaWVkLlxuIDcxMTpcdFx0XHRcdFx0ICovXG4gNzEyOlx0XHRcdFx0XHRmbGFncyA9IDA7XG4gNzEzOlx0XHRcdFx0XHRtZW1jcHkodG1wLCBkYXRhLCBkc2l6ZSk7XG4gNzE0Olx0XHRcdFx0XHRkYXRhID0gdG1wO1xuIDcxNTpcdFx0XHRcdFx0bXR5cGVfZGF0YV9yZXNldF9mbGFncyhkYXRhLCBcdTAwMjZmbGFncyk7XG4gNzE2Olx0I2VuZGlmXG4gNzE3Olx0XHRcdFx0XHRrZXkgPSBIS0VZKGRhdGEsIGgtXHUwMDNlaW5pdHZhbCwgaHRhYmxlX2JpdHMpO1xuIDcxODpcdFx0XHRcdFx0bSA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaGJ1Y2tldCh0LCBrZXkpKTtcbiA3MTk6XHRcdFx0XHRcdG5yID0gYWhhc2hfcmVnaW9uKGtleSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpczogRG91YmxlIEZyZWUgaW4gQ29uY3VycmVudCBERUwgYW5kIFJlc2l6ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi0mZ3Q7dXNlZCkpIGNvbnRpbnVlO2AgaXMga2V5LiBJdCBtZWFucyB0aGF0IGlmIGEgYml0IHdhcyBjbGVhcmVkIGluIGBvcmlnYCBkdWUgdG8gYSBjb25jdXJyZW50IERFTCBvcGVyYXRpb24gKmJlZm9yZSogaXQgd2FzIGNvcGllZCB0byBgdGAsIHdlICpkb24mIzM5O3QqIGNvcHkgdGhhdCBlbGVtZW50LiBCdXQgd2h5IGRvZXMgYG10eXBlX3Jlc2l6ZWAgcmVwbGF5IHRoZSBERUwgb24gYHRgIGlmIGl0IHdhc24mIzM5O3QgY29waWVkPyBBaCwgaWYgaXQmIzM5O3Mgbm90IGNvcGllZCB0byBgdGAsIGBtdHlwZV9kZWxgIG9uIGB0YCB3b24mIzM5O3QgZmluZCB0aGUgZWxlbWVudC4gU28sIGxldCYjMzk7cyBjb25maXJtIHRoYXQuCgpMb29raW5nIGF0IHRoZSBgbXR5cGVfZGVsYCByZXBsYXkgbG9vcDogaWYgYW4gZWxlbWVudCB3YXNuJiMzOTt0IGNvcGllZCwgdGhlIGBtdHlwZV9kZWxgIGNhbGwgd2lsbCBsaWtlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBhIHNpbWlsYXIgZXJyb3IuIEJ1dCB3YWl0LCB3aGF0IGlmIHRoZSBERUwgaGFwcGVuZWQgKmFmdGVyKiB0aGUgYnVja2V0IHdhcyBjb3BpZWQgdG8gYHRgPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0ISBJZiB0aGUgY29weSBvY2N1cnJlZCBiZWZvcmUgdGhlIGNvbmN1cnJlbnQgREVMLCB0aGUgZWxlbWVudCAqaXMqIGNvcGllZCB0byBgdGAuIFRoZW4sIHRoZSBERUwgY2xlYXJzIHRoZSBiaXQgaW4gYG9yaWdgIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGBvcmlnYC4KClRoZW4gdGhlIHJlcGxheSBjYWxscyBgbXR5cGVfZGVsYCBvbiBgdGAuIGBtdHlwZV9kZWxgICpmaW5kcyogdGhlIGVsZW1lbnQgaW4gYHRgLCBjbGVhcnMgdGhlIGJpdCBpbiBgdGAsIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGB0YCEgQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogdGhlIGVsZW1lbnQgaW4gYHRgIGlzIGEgY29weSBvZiB0aGUgZWxlbWVudCBpbiBgb3JpZ2AuIFRoaXMgbWVhbnMgYGlwX3NldF9leHRfZGVzdHJveWAgaXMgY2FsbGVkICp0d2ljZSogb24gdGhlICpzYW1lKiBleHRlbnNpb24gZGF0YSwgbGlrZSB0aGUgc2FtZSBjb21tZW50IHBvaW50ZXIhIEJpbmdvISBUaGlzIGlzIHRoZSBkb3VibGUgZnJlZSEKClRoZSBjb21tZW50IHN0cmluZyBpcyBmcmVlZCB3aGVuIHRoZSBpbml0aWFsIGNvbmN1cnJlbnQgREVMIGhhcHBlbnMgb24gYG9yaWdgLiBUaGVuLCB0aGUgcmVwbGF5IGZyZWVzIGl0IGFnYWluIG9uIGB0YCwgbGVhZGluZyB0byB0aGUgZG91YmxlIGZyZWUuIE15IGZpeCB0byBgbXR5cGVfZGVsYCwgaXMgdG8gYWRkIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlmIGBleHQgPT0gTlVMTGAgaW4gdGhlIHJlcGxheSwgdGh1cyBwcmV2ZW50aW5nIHRoZSBkb3VibGUgZnJlZSwgc2luY2UgdGhlcmUgaXMgbm8gYGV4dGAgdG8gZGVzdHJveS4gVGhhdCYjMzk7cyBhIHNvbGlkIGFuYWx5c2lzLgoKU28sIHRoZSBjb3JlIGlzc3VlIGlzIGEgZG91YmxlIGZyZWUgb2YgdGhlIGNvbW1lbnQgZXh0ZW5zaW9uIGR1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgREVMIGFuZCByZXNpemUgb3BlcmF0aW9uLiBUbyB0cmlnZ2VyIHRoaXMsIHdlIG5lZWQgYENPTkZJR19JUF9TRVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX0lQYCAob3IgYW5vdGhlciBoYXNoIHR5cGUpLCBhbmQsIGNydWNpYWxseSwgYENPTkZJR19ORVRGSUxURVJfWFRfU0VUYCB0byBlbmFibGUgdGhlIFNFVCB0YXJnZXQgZm9yIGtlcm5lbC1zaWRlIG9wZXJhdGlvbnMuIFRpbWUgdG8gY2hlY2sgYG5ldC9uZXRmaWx0ZXIveHRfc2V0LmNgIG5vdyB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h0X3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICYjNDM7PSB4dF9jb25ubWFyay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgJiM0Mzs9IHh0X3NldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgJiM0Mzs9IHh0X25hdC5vXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMjc9c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjM5LVx0ICogcHJvdGVjdGVkIGJ5IHRoZSBpcF9zZXRfcmVmX2xvY2suXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI0MDpcdCAqIEV4dGVybmFsIHN5c3RlbXMgKGkuZS4geHRfc2V0KSBtdXN0IGNhbGxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjQxLVx0ICogaXBfc2V0X25mbmxfZ2V0XyogZnVuY3Rpb25zLCB0aGF0IHdheSB3ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xNTcxPWlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY0MS1cdFx0aWYgKGR1bXBfZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfTElTVF9TRVROQU1FKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE2NDI6XHRcdFx0Z290byBuZXh0X3NldDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjQzLVx0XHRzd2l0Y2ggKGNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF0pIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY2MS1cdFx0XHRpZiAoZHVtcF9mbGFncyBcdTAwMjYgSVBTRVRfRkxBR19MSVNUX0hFQURFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjYyOlx0XHRcdFx0Z290byBuZXh0X3NldDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYzLVx0XHRcdGZhbGx0aHJvdWdoO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjY3LVx0XHRcdFx0LyogU2V0IGlzIGRvbmUsIHByb2NlZWQgd2l0aCBuZXh0IG9uZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE2Njg6XHRcdFx0XHRnb3RvIG5leHRfc2V0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjktXHRcdFx0Z290byByZWxlYXNlX3JlZmNvdW50O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjg0LVx0cmV0ID0gLUVGQVVMVDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjg1Om5leHRfc2V0OlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2ODYtXHRpZiAoZHVtcF90eXBlID09IERVTVBfT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE3OiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NldC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE4LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NTQ9c2V0X21hdGNoX3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTUte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NjpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MCAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NjY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Njc6Y29tcGF0X2ZsYWdzKHN0cnVjdCB4dF9zZXRfaW5mb192MCAqaW5mbylcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjgte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9ODM9c2V0X21hdGNoX3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTg0LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6ODU6XHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy04Ni1cdGlwX3NldF9pZF90IGluZGV4O1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTA4PXNldF9tYXRjaF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTA5LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTEwOlx0c3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YwICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTExLVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTE4PXNldF9tYXRjaF92MShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTExOS17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjEyMDpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTEyMS1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTEzND1zZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM1LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTM2Olx0c3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM3LVx0aXBfc2V0X2lkX3QgaW5kZXg7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNTY9c2V0X21hdGNoX3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNTcte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzoxNTg6XHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEgKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNTktXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNjY9c2V0X21hdGNoX3YzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY3LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTY4Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY5LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTg5PXNldF9tYXRjaF92NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5MC17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE5MTpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92NCAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIxMj1zZXRfdGFyZ2V0X3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjEzLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjE0Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MjMyPXNldF90YXJnZXRfdjBfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjMzLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjM0Olx0c3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjM1LVx0aXBfc2V0X2lkX3QgaW5kZXg7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yNzQ9c2V0X3RhcmdldF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjc1LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Mjc2Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjc3LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9Mjg3PXNldF90YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yODgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzoyODk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0yOTAtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zMDc9c2V0X3RhcmdldF92MV9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMDgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzozMDk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMTAtXHRpcF9zZXRfaWRfdCBpbmRleDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM0NT1zZXRfdGFyZ2V0X3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDYte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzozNDc6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDgtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zNTg9c2V0X3RhcmdldF92MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM1OS17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjM2MDpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjIgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM4OT1zZXRfdGFyZ2V0X3YzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzkwLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MzkxOlx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzkyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTQzND1zZXRfdGFyZ2V0X3YzX2NoZWNrX2hvb2tzKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzUte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo0MzY6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzctXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz00NTc9c2V0X3RhcmdldF92M19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy00NTgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo0NTk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy00NjAtXHRpcF9zZXRfaWRfdCBpbmRleDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTUxNz1zZXRfdGFyZ2V0X3YzX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MTgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo1MTk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy01MjAtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz01Mjk9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzZXRfbWF0Y2hlc1tdIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MzQtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92MCxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTM1Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjApLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MzYtXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92MF9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTQ0LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU0NTpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTQ2LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1NC1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3YxLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NTU6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1Ni1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NjUtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTY2Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEpLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NjctXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTc1LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU3NjpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTc3LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4Ni1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3YzLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1ODc6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MyksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4OC1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01OTYtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92Myxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTk3Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjMpLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01OTgtXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92M19jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjA3LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjQsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYwODpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjA5LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjRfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxNy1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3Y0LFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2MTg6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92NCksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxOS1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz02MjU9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgc2V0X3RhcmdldHNbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjMwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MCxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjMxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYzMi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MF9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjQwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjQxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY0Mi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjUwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjUxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY1Mi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjYxLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Mixcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjYyOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY2My1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjcxLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Mixcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjcyOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY3My1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjgyLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Myxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjgzOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY4NC1cdFx0LmNoZWNrX2hvb2tzXHQ9IHNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MsXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy02OTMtXHRcdC50YXJnZXRcdFx0PSBzZXRfdGFyZ2V0X3YzLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2OTQ6XHRcdC50YXJnZXRzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjk1LVx0XHQuY2hlY2tfaG9va3NcdD0gc2V0X3RhcmdldF92M19jaGVja19ob29rcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzAyOnN0YXRpYyBpbnQgX19pbml0IHh0X3NldF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMy17XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy03MTUtXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcxNjpzdGF0aWMgdm9pZCBfX2V4aXQgeHRfc2V0X2Zpbmkodm9pZClcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcyMS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIyOm1vZHVsZV9pbml0KHh0X3NldF9pbml0KTtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIzOm1vZHVsZV9leGl0KHh0X3NldF9maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOTkKCQkJCQkJCW91dHB1dDogMjczCgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNldCBEb3VibGUtRnJlZSBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBORVRGSUxURVJfWFRfU0VUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIGZvciBgeHRfc2V0YC4gVGhhdCYjMzk7cyBnb2luZyBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFnYWluLiBXZSBoYXZlOgoKYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNl9yZXNpemVgLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDZfcmVzaXplYCwgYW5kIGBpcF9zZXRfY29tbWVudF9mcmVlYC4KCldhaXQgYSBtaW51dGUsIGBoYXNoX2lwNF9kZWxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGJlIHRyaWNreS4gQnV0LCB1bmxlc3MgaXQmIzM5O3MgaW5saW5lZCwgaXQgKnNob3VsZCogYmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gTGV0IG1lIGNvbmZpcm0uLi4gWWVwLCBgbXR5cGVfZGVsYCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBzdWJzdGFudGlhbCBlbm91Z2ggdGhhdCBpbmxpbmluZyBpcyB1bmxpa2VseS4gSSYjMzk7bGwgdmVyaWZ5IGlmIGBtdHlwZV9kZWxgIGlzIGRlY2xhcmVkIGFzIGlubGluZS4gTm8sIGl0JiMzOTtzIGp1c3QgYHN0YXRpYyBpbnQgbXR5cGVfZGVsKC4uLilgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZGlzdGluY3Qgc3ltYm9sLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgc3ltYm9scy4gQW5kIHllcywgYG10eXBlX3Jlc2l6ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIGNvbmZpcm0gdGhhdCBgaGFzaF9pcDRfcmVzaXplYCB3aWxsIGFsc28gYmUgYSBzeW1ib2wgd2UgY2FuIHVzZS4KCkFscmlnaHQsIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhhdCBzZXQgb2YgZm9jdXMgc3ltYm9scyBub3cuIExvb2tzIHNvbGlkLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgY29uZmlnczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBhbmQgYE5FVEZJTFRFUl9YVF9TRVRgLgoKU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIFdoYXQgaGFwcGVucyBpcyB0aGlzOiB0aGVyZSYjMzk7cyBhIGtlcm5lbC1zaWRlIGRlbGV0ZSwgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBsaWtlIGFuIGlwdGFibGVzIFNFVCB0YXJnZXQsIGFuZCBpdCYjMzk7cyBoYXBwZW5pbmcgY29uY3VycmVudGx5IHdpdGggYSBoYXNoLWJhc2VkIGlwc2V0IHJlc2l6ZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ28gd3Jvbmc6IHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMsIGxpa2UgY29tbWVudHMsIGdldCBkZXN0cm95ZWQuIFRoZW4sIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGFuZCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCAqYWdhaW4qLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrLCBgaWYgKGV4dClgLCB0byBza2lwIGRlc3Ryb3lpbmcgdGhlIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIHdvdWxkIGJlIE5VTEwgaW4gdGhlIHNlY29uZCBjYWxsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGEgcmVhY2hhYmxlIGJ1Zy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uIGBJUF9TRVRfSEFTSF9JUGAgYW5kIGBJUF9TRVRfSEFTSF9ORVRgIGFyZSBnb29kIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgaGFzaCB0eXBlcy4gYE5FVEZJTFRFUl9YVF9TRVRgIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIGtlcm5lbC1zaWRlIGRlbGV0ZSwgYW5kIGBJUF9TRVRgIGlzIHRoZSBjb3JlIGlwc2V0IHN1YnN5c3RlbS4gWWVzLCB0aGF0JiMzOTtzIGFsbC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9pcDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2NvbW1lbnRfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9pcDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2NvbW1lbnRfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjIwLjY3MzUwMzA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAyMjY1OTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX2lwNF9kZWxcIixcbiAgICBcImhhc2hfaXA2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9pcDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX2lwNl9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0NF9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0Nl9yZXNpemVcIixcbiAgICBcImlwX3NldF9jb21tZW50X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQncyBleHRlbnNpb25zIChsaWtlIGNvbW1lbnRzKSBhcmUgZGVzdHJveWVkLiBXaGVuIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGl0IHByZXZpb3VzbHkgY2FsbGVkIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGFnYWluLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGRlc3Ryb3lpbmcgZXh0ZW5zaW9ucyBkdXJpbmcgdGhlIHJlcGxheSAod2hlcmUgYGV4dGAgaXMgTlVMTCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByZWFjaGFibGUgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyMC42NzM1MTAyNjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODQ5ODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0MDgwMjU1OGZmYjFlZTJhMmE5OGNmMGM4NzM4YWI2MDQ5OWVkMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMjI6NTE6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCA4MjMxMzE3YjBmMWY0Yi4uZDE1NTMwMjQxZjA1MzYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5AQCAtMTExMiw3ICsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaikpLCBqKTtcXG4gI2VuZGlmXFxuLVxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbitcXHRcXHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cXG4rXFx0XFx0aWYgKGV4dClcXG4rXFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcbiBcXHRcXHRpZiAodC1cXHUwMDNlcmVzaXppbmcgXFx1MDAyNlxcdTAwMjYgZXh0IFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuIFxcdFxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjIxLjE1MjkxMTcxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNTQzMjI5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfaXA0X2RlbFwiLFxuICAgIFwiaGFzaF9pcDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwNF9yZXNpemVcIixcbiAgICBcImhhc2hfaXA2X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X3Jlc2l6ZVwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBEdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIGRlbGV0ZSAoZS5nLiwgdmlhIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0KSBhbmQgYSByZXNpemUgb2YgYSBoYXNoLWJhc2VkIGlwc2V0LCB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODQwODAyNTU4ZmZiMWVlMmEyYTk4Y2YwYzg3MzhhYjYwNDk5ZWQxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDIyOjUxOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMTEyLDcgKzExMTIsOSBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4gXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4gI2VuZGlmXG4tXHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuK1x0XHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cbitcdFx0aWYgKGV4dClcbitcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuIFx0XHRcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyMS4xNTI5MTM1MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2MjE4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBpcHNldCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIEl0IGFwcGVhcnMgdGhleSd2ZSBhZGRlZCBhIHNpbXBsZSBjaGVjazogYGlmIChleHQpYCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YCB3aXRoaW4gdGhlIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzbWFsbCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIGBtdHlwZV9kZWxgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBjaGVjayBoYXMgYmVlbiBhZGRlZCwgYW5kIHdoeS4gVGltZSB0byBwdWxsIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGRlZmluaXRpb24gd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBpcyBsaWtlbHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjI0Ljk3OTEzNDE5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyMjI0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUyLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU5LSNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjA6I2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2MS0jZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTIwLVxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyMTpcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MjUtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjMyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XFx0XFx0XFx0bXR5cGVfZGVsKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaisrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE0NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyNS4xNjUzNjMyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE0NDQyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXBzZXQgSGFzaCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtdHlwZV9kZWxgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgaXMgYSAqdGVtcGxhdGUqIGZpbGUsIHVzZWQgYnkgYWxsIHRob3NlIGlwc2V0IGhhc2ggdHlwZXMg4oCTIGBpcF9zZXRfaGFzaF9pcC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBidWcgaXMgdGhhdCBgaXBfc2V0X2V4dF9kZXN0cm95YCB3YXMgYmVpbmcgY2FsbGVkIHdoZW4gYGV4dGAgd2FzIE5VTEwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgb2NjdXJzIHNwZWNpZmljYWxseSBkdXJpbmcgYSByZXNpemUgcmVwbGF5LlxuXG5MZXQgbWUgc2VlLCBgaXBfc2V0X2V4dF9kZXN0cm95YCB0YWtlcyBgZGF0YWAgYXMgYW4gYXJndW1lbnQg4oCTIHRoZSBlbGVtZW50IGRhdGEg4oCTIGFuZCBJJ20gZ3Vlc3NpbmcgdGhlIGNvZGUgbmVlZHMgdG8gZnJlZSB0aGF0LiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBcIk9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLlwiIFNvIHRoZSBjaGVjayBgaWYgKGV4dClgIGlzIHRoZSBrZXkuIEl0IHByZXZlbnRzIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveWAgd2hlbiBgZXh0YCBpcyBhbHJlYWR5IE5VTEwuIEdvb2QsIGl0J3MgYSBudWxsIHBvaW50ZXIgY2hlY2suIFRoYXQncyBhIGNsYXNzaWMgYW5kIGFwcHJvcHJpYXRlIGZpeCBmb3IgYSByZXNpemUgcmVwbGF5IHNjZW5hcmlvLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgcHJvcGVybHkuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBzZWFyY2ggZm9yIGBJUF9TRVRfSEFTSGAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MjkuMjc5ODA3ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODg0NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1NFVF9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjI5LjQ4Mzc1NzU4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODM5MTkwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0cyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYElQX1NFVGAuIFRoYXQncyB0aGUga2V5LiBOb3csIHdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYElQX1NFVGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgaXBzZXRgIHBhcnQgb2YgbmV0ZmlsdGVyLiBTbywgSSdsbCBjaGVjayBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gSSdsbCBzdGFydCB3aXRoIHRoZSBsYXR0ZXIgYXMgaXQgc2VlbXMgbW9yZSBmb2N1c2VkIHRvIHRoaXMgdGFzaywgYnV0IGlmIEkgZG9uJ3QgZmluZCBpdCB0aGVyZSwgSSdsbCBicmFuY2ggb3V0IHRvIHRoZSBicm9hZGVyIG5ldGZpbHRlciBLY29uZmlnLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBodW50IC0gdGhlIGdvYWwgaXMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgS2NvbmZpZyBvcHRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjMyLjY2NzY3OTU2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyNzE2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTozMi44MjU5NTY2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzI1NzI2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBzdXBwb3J0IGBJUF9TRVRgIGFuZCB0aGUgYElQX1NFVF9IQVNIX0lQYCBtZXRob2QgKG9yIGFueSBvZiB0aGUgb3RoZXIgaGFzaGluZyB2YXJpYXRpb25zKSBpbiBteSBjdXJyZW50IHNldHVwLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcmVxdWlyZW1lbnRzLiBPa2F5LCBJJ2xsIGFkZCBgSVBfU0VUYCBhbmQgYElQX1NFVF9IQVNIX0lQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgd2F5LCB0aGUgc3lzdGVtIHdpbGwga25vdyB0aGF0IEkgaW50ZW5kIHRvIGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBkdXJpbmcgY29tcGlsYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgYmFzaWMgZW5hYmxpbmcgc3RlcC5cblxuTm93LCB0aGF0IGBtdHlwZV9kZWxgIGZ1bmN0aW9uLi4udGhhdCdzIGEgbWFjcm8tZ2VuZXJhdGVkIGZ1bmN0aW9uLCBpc24ndCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBnZW5lcmF0aW9uIHByb2Nlc3MuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1hY3JvLWdlbmVyYXRlZCBmdW5jdGlvbnMgd29yayBmb3IgZWZmZWN0aXZlIGRlYnVnZ2luZyBhbmQgcG90ZW50aWFsIGN1c3RvbWl6YXRpb24gbGF0ZXIgb24uIExldCBtZSB0cmFjZSBiYWNrIGFuZCBzZWUgZXhhY3RseSBob3cgdGhhdCBtYWNybyBleHBhbmRzIGFuZCB3aGF0IHRoZSByZXN1bHRpbmcgY29kZSBsb29rcyBsaWtlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNybyBkZWZpbml0aW9ucywgYW5kIGFueSBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MzYuMjk4NTMyMjM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3ODc1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUyLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU5LSNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjA6I2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2MS0jZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTIwLVxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyMTpcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MjUtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjMyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XFx0XFx0XFx0bXR5cGVfZGVsKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaisrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE0NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTozNi40OTAzMjU2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NTMxNzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgYG10eXBlX2RlbGAgTWFjcm8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBtdHlwZV9kZWxgIGlzIGNsZWFybHkgYSBtYWNybywgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpYC4gIFRoYXQgYElQU0VUX1RPS0VOYCBsaWtlbHkganVzdCBjb25jYXRlbmF0ZXMgaXRzIGFyZ3VtZW50cy4gIFRoZXJlZm9yZSwgYG10eXBlX2RlbGAgaXMgZ2VuZXJhdGluZyBmdW5jdGlvbnMsIGFuZCBqdWRnaW5nIGJ5IHRoZSBleGFtcGxlIG5hbWVzLCB0aGV5J3JlIHByb2JhYmx5IGRlbGV0aW9uIGZ1bmN0aW9uczogYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXRfZGVsYCwgYW5kIHNvIG9uLiBUaGV5IHdpbGwgYmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgYE1UWVBFYCBwYXNzZWQgdG8gaXQuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBNVFlQRWAgYWN0dWFsbHkgKmlzKiBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB0aGVyZS4gVGhhdCBzaG91bGQgdGVsbCBtZSB0aGUgdHlwZSB0aGVzZSBkZWxldGlvbiBmdW5jdGlvbnMgYXJlIGFjdGluZyB1cG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MzkuOTc1NjQ1ODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NzgxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVRZUEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA2OiN1bmRlZiBNVFlQRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDctI3VuZGVmIEhPU1RfTUFTS1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjQwLjEyODMzMTMyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcxODE4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVtb3ZhbCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBSZXNpemUgUmVwbGF5IElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHJlbW92YWwgZnVuY3Rpb25zIOKAkyBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0Nl9kZWxgLCBhbmQgdGhlIGxpa2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYWRkIGBoYXNoX2lwNF9kZWxgIGFuZCBgaGFzaF9pcDZfZGVsYCB0byBgRm9jdXNTeW1ib2xzYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoZSByZXBvcnQgaXMgYWJvdXQgYSByZXNpemUgcmVwbGF5LiBSaWdodCwgbGV0IG1lIGNoZWNrIGlmIGBtdHlwZV9yZXNpemVgIGlzIGFsc28gYmVpbmcgZ2VuZXJhdGVkLiBZdXAsIGl0IGlzLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtdHlwZV9yZXNpemVgIGlzIGhhbmRsZWQsIGFuZCBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG10eXBlX3Jlc2l6ZWAgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0My41MDAxNTI3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjQ4Mzc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9yZXNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE3Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOC0jdW5kZWYgbXR5cGVfdXJlZlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE5OiN1bmRlZiBtdHlwZV9yZXNpemVcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMTojdW5kZWYgbXR5cGVfcmVzaXplX2FkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjItI3VuZGVmIG10eXBlX2hlYWRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjYzLSNkZWZpbmUgbXR5cGVfdXJlZlxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2NDojZGVmaW5lIG10eXBlX3Jlc2l6ZVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY1LSNkZWZpbmUgbXR5cGVfZXh0X3NpemVcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY2OiNkZWZpbmUgbXR5cGVfcmVzaXplX2FkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9oZWFkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0yOTM9c3RydWN0IGh0eXBlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE1LS8qIEFERHxERUwgZW50cmllcyBzYXZlZCBkdXJpbmcgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTY6c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTctXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzE9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjMyOm10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzMy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDY6XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0Ny1cXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzgyLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXFx1MDAyNm9yaWctXFx1MDAzZWFkKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODM6XFx0XFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD04Njg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMjgtXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMjk6XFx0XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDMxOlxcdFxcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzItXFx0XFx0aWYgKCF4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDcxLVxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3MjpcXHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4ID0gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNzMtXFx0aW50IGksIGosIGssIHIsIHJldCA9IC1JUFNFVF9FUlJfRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXFx0XFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTIzOlxcdFxcdFxcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXFx0XFx0XFx0aWYgKHgpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4OC1cXHQudXJlZlxcdD0gbXR5cGVfdXJlZixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODk6XFx0LnJlc2l6ZVxcdD0gbXR5cGVfcmVzaXplLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ5MC1cXHQuc2FtZV9zZXQgPSBtdHlwZV9zYW1lX3NldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NDMuNjIyNjQ2MDE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjUxMzMwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgUmVzaXplIElzc3VlKipcblxuT2theSwgaGVyZSdzIHRoZSBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHByb2JsZW0gaXMgY3JvcHBpbmcgdXAgZHVyaW5nIGEgcmVzaXplIG9wZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX3Jlc2l6ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24gYmVpbmcgYWN0aXZlIHdoZW4gdGhlIGJ1ZyBtYW5pZmVzdHMuIE5vdywgdGhlIGtleSBpcyB3aGVyZSB0aGlzIGBtdHlwZV9yZXNpemVgIGdldHMgY2FsbGVkIGZyb20sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgdHJpZ2dlcmVkIGZyb20gYSByZXBsYXkgc2NlbmFyaW8uIFRoZSByZWFsIGN1bHByaXQsIHRob3VnaCwgaXMgbGlrZWx5IGluIGBtdHlwZV9kZWxgLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCAqYnkqIGBtdHlwZV9yZXNpemVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYG10eXBlX3Jlc2l6ZWAgYW5kIGBtdHlwZV9kZWxgLiBBbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gYGlwX3NldF9oYXNoX2dlbi5oYCwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgYG10eXBlX3Jlc2l6ZWAgYXJvdW5kIGxpbmUgNzg3LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0Ny4wNDc3ODE2MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcdC8qIFRoZXJlIGNhbid0IGJlIGFueSBvdGhlciB3cml0ZXIuICovXFxuIDc3MTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cXHUwMDNldGFibGUsIHQpO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHQvKiBHaXZlIHRpbWUgdG8gb3RoZXIgcmVhZGVycyBvZiB0aGUgc2V0ICovXFxuIDc3NDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0cHJfZGVidWcoXFxcInNldCAlcyByZXNpemVkIGZyb20gJXUgKCVwKSB0byAldSAoJXApXFxcXG5cXFwiLCBzZXQtXFx1MDAzZW5hbWUsXFxuIDc3NzpcXHRcXHRcXHQgb3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMsIG9yaWcsIHQtXFx1MDAzZWh0YWJsZV9iaXRzLCB0KTtcXG4gNzc4OlxcdFxcdC8qIEFkZC9kZWxldGUgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBTRVQgdGFyZ2V0IGR1cmluZyByZXNpemUuXFxuIDc3OTpcXHRcXHQgKiBLZXJuZWwtc2lkZSBhZGQgY2Fubm90IHRyaWdnZXIgYSByZXNpemUgYW5kIHVzZXJzcGFjZSBhY3Rpb25zXFxuIDc4MDpcXHRcXHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXFxuIDc4MTpcXHRcXHQgKi9cXG4gNzgyOlxcdFxcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXFx1MDAyNm9yaWctXFx1MDAzZWFkKSB7XFxuIDc4MzpcXHRcXHRcXHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcXG4gNzg0OlxcdFxcdFxcdGlmICh4LVxcdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcXG4gNzg1OlxcdFxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbiA3ODY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNzg3OlxcdFxcdFxcdFxcdG10eXBlX2RlbChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBOVUxMLCBOVUxMLCAwKTtcXG4gNzg4OlxcdFxcdFxcdH1cXG4gNzg5OlxcdFxcdFxcdGxpc3RfZGVsKGwpO1xcbiA3OTA6XFx0XFx0XFx0a2ZyZWUobCk7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXHQvKiBJZiB0aGVyZSdzIG5vYm9keSBlbHNlIHVzaW5nIHRoZSB0YWJsZSwgZGVzdHJveSBpdCAqL1xcbiA3OTM6XFx0XFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNm9yaWctXFx1MDAzZXVyZWYpKSB7XFxuIDc5NDpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiVGFibGUgZGVzdHJveSBieSByZXNpemUgJXBcXFxcblxcXCIsIG9yaWcpO1xcbiA3OTU6XFx0XFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIG9yaWcsIGZhbHNlKTtcXG4gNzk2OlxcdFxcdH1cXG4gNzk3OlxcdFxcbiA3OTg6XFx0b3V0OlxcbiA3OTk6XFx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0Ny4wNDc5MzQ2OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwOTc3MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG10eXBlX2RlbGAgd2l0aCBhIE5VTEwgYGV4dGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIG1ha2luZyBhIGNhbGwgdG8gYG10eXBlX2RlbChzZXQsIFx1MDAyNngtXHUwMDNlZCwgTlVMTCwgTlVMTCwgMCk7YC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgYGV4dGAgaXMgYmVpbmcgcGFzc2VkIGFzIGBOVUxMYC4gIEkgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IHRoYXQgaW1wbGllcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTExMi4gVGhlIGBleHRgIHBhcmFtZXRlciwgZnJvbSB3aGF0IEkgcmVjYWxsLCB1c3VhbGx5IGhhbmRsZXMgc29tZSBzb3J0IG9mIGV4dGVybmFsIGRhdGEgb3IgY29udGV4dCByZWxhdGVkIHRvIHRoZSBkZWxldGlvbiBwcm9jZXNzLiBQYXNzaW5nIGBOVUxMYCBpbXBsaWVzIGEgc3BlY2lmaWMsIHBlcmhhcHMgc2ltcGxlciwgZGVsZXRpb24gc2NlbmFyaW8uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWFsIGxvZ2ljLCBvciBsYWNrIHRoZXJlb2YsIGlzIHRyaWdnZXJlZCBieSBhIE5VTEwgYGV4dGAgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGVyZSBhIGRlZmF1bHQgZGVsZXRpb24gcHJvY2VkdXJlIHdpdGhvdXQgZXh0ZXJuYWwgaG9va3MgdGhhdCBpcyBpbml0aWF0ZWQ/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGF0IHBsYXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBicmFuY2ggb2YgZXhlY3V0aW9uIGFjdHVhbGx5ICpkb2VzKi4gVGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBvZiBteSBhbmFseXNpcy4gV2hhdCBkb2VzIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgYGV4dCA9PSBOVUxMYCAob3IsIGBleHQgIT0gTlVMTGApIGVudGFpbD8gV2hhdCBkb2VzIGxpbmUgMTExMiBhY3R1YWxseSBkbyBpbiB0aGlzIGNhc2U/IEkgbmVlZCB0byBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBgTlVMTGAgYGV4dGAgcGFyYW1ldGVyLCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBpbnRlbnRpb25hbCBvciBhIHBvdGVudGlhbCBmbGF3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTAuNDU3NzEwMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEwMTpcXHRcXHRcXHRpZiAoU0VUX0VMRU1fRVhQSVJFRChzZXQsIGRhdGEpKVxcbjExMDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdFxcdHJldCA9IDA7XFxuMTEwNTpcXHRcXHRcXHRjbGVhcl9iaXQoaSwgbi1cXHUwMDNldXNlZCk7XFxuMTEwNjpcXHRcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbjExMDc6XFx0XFx0XFx0aWYgKGkgKyAxID09IHBvcylcXG4xMTA4OlxcdFxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuLVxcdTAwM2Vwb3MsIC0tcG9zKTtcXG4xMTA5OlxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4xMTEwOlxcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4xMTExOlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4xMTEyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4xMTEzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuMTExNDpcXHQjZW5kaWZcXG4xMTE1OlxcdFxcdFxcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xcbjExMTY6XFx0XFx0XFx0aWYgKGV4dClcXG4xMTE3OlxcdFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRcXHRpZiAodC1cXHUwMDNlcmVzaXppbmcgXFx1MDAyNlxcdTAwMjYgZXh0IFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuMTEyMDpcXHRcXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcbjExMjE6XFx0XFx0XFx0XFx0ICogc2F2ZSB2YWx1ZXNcXG4xMTIyOlxcdFxcdFxcdFxcdCAqL1xcbjExMjM6XFx0XFx0XFx0XFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xcbjExMjQ6XFx0XFx0XFx0XFx0aWYgKHgpIHtcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdHgtXFx1MDAzZWFkID0gSVBTRVRfREVMO1xcbjExMjY6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VkLCB2YWx1ZSxcXG4xMTI3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcXG4xMTI4OlxcdFxcdFxcdFxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMTEyOTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjUwLjQ1Nzg1MzU5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc3NjYzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBlcnNpc3RlbnQgQnVnKipcblxuT2theSwgc28gdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaWYgKGV4dCkgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0ZW1zIGZyb20gYG10eXBlX2RlbGAgYmVpbmcgY2FsbGVkIGZyb20gYG10eXBlX3Jlc2l6ZWAgZHVyaW5nIGEgcmVwbGF5IHNjZW5hcmlvLiBTbywgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG10eXBlX3Jlc2l6ZWAgYW5kIGBtdHlwZV9kZWxgLCBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi5cblxuU2luY2UgdGhlc2UgYXJlIGdlbmVyYXRlZCBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIGBNVFlQRWAgbWFjcm8sIEknbSByZWFsbHkgbG9va2luZyBhdCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbnMgbGlrZSBgaGFzaF9pcDRfcmVzaXplYCwgYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9yZXNpemVgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCB0aGUgbGlrZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBhbGwgdGhvc2UgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSB0aGUgYE1UWVBFYCBtYWNybyB0aGF0IGVuZCBpbiBgX3Jlc2l6ZWAgYW5kIGBfZGVsYC4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgZmlsZXMgbGlrZSBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jYCBhbmQgb3RoZXIgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTQuMzM1NTE5NDMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI4MzE3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBtYWNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDpwb3J0XFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjI5OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfcG9ydFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlxcdFxcdDRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xODA9aGFzaF9pcG1hYzZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MTkwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xOTEtI2RlZmluZSBQRlxcdFxcdDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9Njk9aGFzaF9pcG1hcms0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMDU9aGFzaF9pcG1hcms2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIxMzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Nzk9aGFzaF9pcHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6ODY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yNDk9aGFzaF9pcHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI1ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz03Nz1oYXNoX2lwcG9ydGlwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODQtLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo4NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTI0OD1oYXNoX2lwcG9ydGlwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNTc6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1OC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMjE9aGFzaF9pcHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEyOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzAtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNzk9aGFzaF9pcHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjM4ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NjE9aGFzaF9tYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6NjY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMDI9aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yNzM9aGFzaF9uZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjk9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM2Mz1oYXNoX25ldGlmYWNlNl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xMjU9aGFzaF9uZXRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjEzMTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzItI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zNjE9aGFzaF9uZXRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM2OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM2OTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTExNz1oYXNoX25ldHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTIzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEyNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zMzQ9aGFzaF9uZXRwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNDM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTEzMj1oYXNoX25ldHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjEzOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE0MC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00MjQ9aGFzaF9uZXRwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0MzM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTQuNTg4MzU3MjUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzEwMjA1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU3RyYXRlZ3kgZm9yIEd1aWRpbmcgdGhlIEZ1enplcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhlc2UgbmV3bHkgZ2VuZXJhdGVkIGZ1bmN0aW9uczogYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0cG9ydDRfZGVsYCwgYGhhc2hfbmV0cG9ydDZfZGVsYCwgYW5kIHRoZWlyIHJlc2l6aW5nIGNvdW50ZXJwYXJ0cy4gVGhlbiB3ZSBoYXZlIHRoZSByZXNpemluZyBmdW5jdGlvbnMsIGxpa2UgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNl9yZXNpemVgLCBldGMuXG5cbk15IHBsYW4gaXMgdG8gc3RyYXRlZ2ljYWxseSBhZGQgc29tZSBvZiB0aGVzZSB0byBgRm9jdXNTeW1ib2xzYC4gRm9jdXNpbmcgb24gYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBgaGFzaF9uZXQ0X3Jlc2l6ZWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZGlyZWN0IHRoZSBmdXp6ZXIgdG93YXJkcyB0aGUgcmVsZXZhbnQgY29kZSBtb2RpZmljYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIGl0IGVub3VnaCBndWlkYW5jZS5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYCBzcGVjaWZpY2FsbHkuXG5cbldhaXQsIEkgbmVlZCB0byByZWNhbGlicmF0ZSBoZXJlLiBUaGUgYnVnIHJlcG9ydCB3YXMgYWJvdXQgZXh0ZW5zaW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIHRoZSBjb3JyZWN0IGNvZGUgcGF0aHMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIGRvbid0IG1pc3Mgc29tZXRoaW5nIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agb3IgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGxvb2sgZm9yIHNvbWV0aGluZyBsaWtlIGBJUF9TRVRfRVhUYC4gVGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBwcm9wZXJseSBleHBsb3JpbmcgdGhlIGV4dGVuc2lvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MDAuMDE5MzgyNjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowMC4xMzM5Nzk2MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDMyMDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGlwc2V0IEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdXNlciBpcyBhc2tpbmcgYWJvdXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGlwc2V0IGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBleHRlbnNpb25zIGFyZW4ndCBoYW5kbGVkIGFzIHNlcGFyYXRlIGNvbmZpZyBmaWxlcyBvciBtb2R1bGVzLCB0aGV5J3JlIGJha2VkIHJpZ2h0IGludG8gdGhlIGlwc2V0IGNvcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIG92ZXJhbGwuIE5vdywgaWYgSSBuZWVkIHRvIGNvbmZpcm0gaG93IGV4dGVuc2lvbiBmdW5jdGlvbmFsaXR5IGlzIG1hbmFnZWQsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgQyBjb2RlLiBNeSBpbnR1aXRpb24gcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGlwX3NldF9leHRfZGVzdHJveWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjbGVhbmluZyB1cCBvciBkZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBleHRlbnNpb25zLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBnaXZlcyB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjAzLjI4NDMwMzMwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9leHRfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9NDg9bXR5cGVfZXh0X2NsZWFudXAoc3RydWN0IGlwX3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTU0LVxcdFxcdGlmICh0ZXN0X2JpdChpZCwgbWFwLVxcdTAwM2VtZW1iZXJzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6NTU6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZ2V0X2V4dChzZXQsIG1hcCwgaWQpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNTYtfVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNDctXFx0XFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE0ODpcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCB4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTQ5LVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzY9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxODY6XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE4Ny1cXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MjY2PW10eXBlX2djKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4Mi1cXHRcXHRcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyODM6XFx0XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4NC1cXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM5MD1tdHlwZV9leHRfY2xlYW51cChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBoYnVja2V0ICpuKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zOTYtXFx0XFx0aWYgKHRlc3RfYml0KGksIG4tXFx1MDAzZXVzZWQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mzk3OlxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGFoYXNoX2RhdGEobiwgaSwgc2V0LVxcdTAwM2Vkc2l6ZSkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzk4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTI1LVxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyNjpcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyNy1cXHRcXHRcXHRkKys7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTU1LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTU2OlxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTU3LVxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2ND1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cXHRcXHRpZiAoZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExNzpcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE0Mz1fX2xpc3Rfc2V0X2RlbF9yY3Uoc3RydWN0IHJjdV9oZWFkICogcmN1KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxNDg6XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNDktXFx0a2ZyZWUoZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIzNj1saXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTI2OS1cXHRcXHQvKiBVcGRhdGUgZXh0ZW5zaW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjcwOlxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIG4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjcxLVxcdFxcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjAzLjQyOTQ3MjE2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDczOTczMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgYG10eXBlX2RlbGAgQnVnKipcblxuT2theSwgc28gdGhlIGJ1ZydzIG5lc3RsZWQgZGVlcCB3aXRoaW4gYG10eXBlX2RlbGAgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBmaXggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW52b2x2ZXMgYWRkaW5nIGEgY2hlY2ssIGFuIGBpZiAoZXh0KWAsIGJlZm9yZSB0aGUgY2FsbCB0byBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgLiBUaGF0IHNob3VsZCBwcmV2ZW50IGFueSBuYXN0eSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gYGV4dGAgaGFwcGVucyB0byBiZSBOVUxMLCB3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgZmxvdyBjb3JyZWN0bHkuIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIHRha2VzIGBzZXRgIGFuZCBgZGF0YWAgYXMgYXJndW1lbnRzLCByaWdodD8gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSwgZWl0aGVyIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIG9yIHBlcmhhcHMgdGhlIGhlYWRlciBmaWxlLCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhgLCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aG9zZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGFuZCBob3cgdGhlIGZpeCBwcm9wZXJseSBhZGRyZXNzZXMgdGhlIGlzc3VlLiBJIGhhdmUgYSBodW5jaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIHdpdGggdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowNy41MDM0NDg1OTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTg2NTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfZXh0X2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTI4NT1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDoyODY6aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowNy42MzkzMjAzMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyOTc1MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gc3lzdGVtIHByb2dyYW1taW5nIGFuZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBmb2N1c2VkIG9uIG5ldHdvcmtpbmcgY29uY2VwdHM6XG5cbioqRGlzc2VjdGluZyBgaXBfc2V0X2V4dF9kZXN0cm95YCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGludG8gYGlwX3NldF9leHRfZGVzdHJveWAuIE15IGltbWVkaWF0ZSBtZW50YWwgZnJhbWV3b3JrIGtpY2tzIGluIOKAkyBJJ20gdGhpbmtpbmcsIFwiT2theSwgdGhpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZXMgdG8gdGhlIHRlYXJkb3duIG9mIGFuIElQIHNldCwgbGlrZWx5IHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAnZXh0JyBzdWdnZXN0cyBzb21lIGV4dGVuZGVkIG9yIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBzZXQuICdEZXN0cm95JyBpbXBsaWVzIG1lbW9yeSBkZWFsbG9jYXRpb24gYW5kIGNsZWFudXAuXCJcblxuSSBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlcjogd2hhdCdzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBJcyBpdCBhIGhhc2ggdGFibGUsIGEgcmFkaXggdHJlZSwgYSBiaXRtYXA/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IHRocmVhZC1zYWZlPyBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBJUCBzZXQgdGhhdCdzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgbGlrZWx5IGluY2x1ZGVzIGZyZWVpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgcG9zc2libHkgZGVjcmVtZW50aW5nIHJlZmVyZW5jZSBjb3VudGVycywgYW5kIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMuXG5cblRoaXMgcmVxdWlyZXMgY2FyZWZ1bCBhdHRlbnRpb24uIEltcHJvcGVyIGNsZWFudXAgaW4gdGhpcyBhcmVhIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgcmVmZXJlbmNlcywgaWYgYW55LCBhbmQgY29uc2lkZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiBlcnJvcnMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsPyBEb2VzIGl0IGxvZyBlcnJvcnM/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IEFueSBkZXRhaWxzIG9uIHRoZXNlIGNvbmNlcHRzIHdpbGwgYmUgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMgdGhvcm91Z2hseSwgc28gdGhhdCBJIGNhbiBhbmFseXplLCBtb2RpZnksIG9yIGV4dGVuZCB0aGUgcmVsYXRlZCBjb2RlIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoxMS40NjkwNzQ5MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMjg2OlxcdGlwX3NldF9leHRfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKmRhdGEpXFxuIDI4NzpcXHR7XFxuIDI4ODpcXHRcXHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcXG4gMjg5OlxcdFxcdCAqIGNhbGwgaXQncyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cXG4gMjkwOlxcdFxcdCAqL1xcbiAyOTE6XFx0XFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xcbiAyOTI6XFx0XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0LyogTmV0bGluayBDQiBhcmdzICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdElQU0VUX0NCX05FVCA9IDAsXFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzMDM6XFx0XFx0SVBTRVRfQ0JfUFJPVE8sXFx0XFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cXG4gMzA0OlxcdFxcdElQU0VUX0NCX0RVTVAsXFx0XFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjExLjQ2OTI2OTY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEyNDIyMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBEb3VibGUtRnJlZSBpbiBJUHNldCBFeHRlbnNpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgaXBfc2V0X2V4dF9kZXN0cm95YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGRlc3Ryb3lpbmcgdGhlIGNvbW1lbnQgZXh0ZW5zaW9uLiBUaGUgYnVnIHJlcG9ydCBpcyBwb2ludGluZyB0byBhIHNjZW5hcmlvIHdoZXJlIGBleHRgIGlzIE5VTEwsIGJ1dCBgaXBfc2V0X2V4dF9kZXN0cm95YCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgZGF0YWAgYW55d2F5LiBIbW0sIHRoYXQncyBub3QgcmlnaHQuIElmIGBleHRgIGlzIE5VTEwsIHRoZW4gc2hvdWxkbid0IHRoZSBjYWxsIHRvIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGJlIHNraXBwZWQgYWx0b2dldGhlcj8gQW5kIG5vdyBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgKmFkZHMqIHRoZSBgaWYgKGV4dClgIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGJsb2NrIGFnYWluLiBBaCwgaXQgbWVudGlvbnMgYSBcInJlc2l6ZSByZXBsYXkuXCIgT2theSwgdGhhdCdzIHRoZSBrZXkuIElmIGBleHRgIGlzIE5VTEwsIGl0J3MgbGlrZWx5IGEgcmVzaXplIHJlcGxheSBzY2VuYXJpby4gRHVyaW5nIGEgcmVzaXplIHJlcGxheSwgdGhlIGV4dGVuc2lvbnMgYXJlICphbHJlYWR5KiBkZXN0cm95ZWQuIFNvLCBjYWxsaW5nIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAgYWdhaW4gd2l0aGluIGEgcmVzaXplIHJlcGxheSB3b3VsZCBiZSB0aGUgcHJvYmxlbS4gSXQgd291bGQgdmVyeSBsaWtlbHkgY2F1c2UgYSBkb3VibGUtZnJlZSBvciBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYmVjYXVzZSBgaXBfc2V0X2V4dF9kZXN0cm95YCBjYWxscyB0aGUgYGRlc3Ryb3lgIGZ1bmN0aW9uIG9uIHRoZSBjb21tZW50IGV4dGVuc2lvbiwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IGZyZWVzIHRoZSBjb21tZW50IHN0cmluZyBpdHNlbGYuIEkgYmV0IGl0J3Mgc29tZXRoaW5nIGxpa2UgYGlwX3NldF9jb21tZW50X2ZyZWVgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgaHVuY2guIEknbGwgY2hlY2sgYGlwX3NldF9leHRlbnNpb25zW0lQU0VUX0VYVF9JRF9DT01NRU5UXS5kZXN0cm95YCBkaXJlY3RseS4gWWVwLCBpdCdzIHByb2JhYmx5IGBpcF9zZXRfY29tbWVudF9mcmVlYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYCwgYXMgSSBzdXNwZWN0ZWQuIEV4Y2VsbGVudCwgSSB0aGluayBJJ3ZlIGdvdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjE3LjE4MTY5NDMwNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDcxNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQU0VUX0VYVF9JRF9DT01NRU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz00MDM9Y29uc3Qgc3RydWN0IGlwX3NldF9leHRfdHlwZSBpcF9zZXRfZXh0ZW5zaW9uc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyMC1cXHR9LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo0MjE6XFx0W0lQU0VUX0VYVF9JRF9DT01NRU5UXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDIyLVxcdFxcdC50eXBlXFx0ID0gSVBTRVRfRVhUX0NPTU1FTlQgfCBJUFNFVF9FWFRfREVTVFJPWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MTcuMzMwNzcxNzAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQyNzU2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaXBfc2V0X2NvcmUuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhpcyBhcmVhIGlzIHJlbGV2YW50IHRvIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGNvbnRleHQsIGUuZy4sIFwidGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2V0IHR5cGVzIGFuZCB0aGUgZ2VuZXJpYyBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLFwiIFwidGhlIGhhbmRsaW5nIG9mIHNldCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIHRyYWNraW5nIHVwZGF0ZXMsXCIgb3IgXCJob3cgc2V0IGxvb2t1cHMgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmVcIl0uIExpbmUgNDIxIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIFtzcGVjdWxhdGUgb24gbGlrZWx5IGNvZGUgYmxvY2sgZnVuY3Rpb24sIGUuZy4gXCJzZXQgZWxlbWVudCBhZGRpdGlvbi9yZW1vdmFsXCIsIFwic2V0IGxvb2t1cHNcIiwgXCJpdGVyYXRpb24gbG9naWNcIl0uIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gY29uc2lkZXIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCwgYXMgY29udGV4dCBpcyBrZXkgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpcHNldCBsb2dpYy4gSSdsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiBzcGVjaWZpYyBjb2RlIHN0cnVjdHVyZSB0byBzZWFyY2gsIGUuZy4sIFwiZnVuY3Rpb24gY2FsbHNcIiwgXCJkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb25cIiwgXCJtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb25cIl0sIGFuZCBJJ2xsIGtlZXAgdGhlIGJyb2FkZXIgc3lzdGVtJ3MgYmVoYXZpb3IgaW4gbWluZC4gU3BlY2lmaWNhbGx5LCBJIGFtIGludGVyZXN0ZWQgaW4gaG93IHRoZSBpcHNldCBjb3JlIGludGVyZmFjZXMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiBbaWRlbnRpZnkgc3BlY2lmaWMgcG90ZW50aWFsIGNvbmNlcm5zLCBlLmcuLCBcImNvbmN1cnJlbmN5IGlzc3VlcyxcIiBcIm1lbW9yeSBsZWFrcyxcIiBvciBcInBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrc1wiXSBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjU5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MjAuOTg1MDUwNDY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE1OlxcdFxcdFtJUFNFVF9FWFRfSURfU0tCSU5GT10gPSB7XFxuIDQxNjpcXHRcXHRcXHQudHlwZVxcdD0gSVBTRVRfRVhUX1NLQklORk8sXFxuIDQxNzpcXHRcXHRcXHQuZmxhZ1xcdD0gSVBTRVRfRkxBR19XSVRIX1NLQklORk8sXFxuIDQxODpcXHRcXHRcXHQubGVuXFx0PSBzaXplb2Yoc3RydWN0IGlwX3NldF9za2JpbmZvKSxcXG4gNDE5OlxcdFxcdFxcdC5hbGlnblxcdD0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9za2JpbmZvKSxcXG4gNDIwOlxcdFxcdH0sXFxuIDQyMTpcXHRcXHRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdID0ge1xcbiA0MjI6XFx0XFx0XFx0LnR5cGVcXHQgPSBJUFNFVF9FWFRfQ09NTUVOVCB8IElQU0VUX0VYVF9ERVNUUk9ZLFxcbiA0MjM6XFx0XFx0XFx0LmZsYWdcXHQgPSBJUFNFVF9GTEFHX1dJVEhfQ09NTUVOVCxcXG4gNDI0OlxcdFxcdFxcdC5sZW5cXHQgPSBzaXplb2Yoc3RydWN0IGlwX3NldF9jb21tZW50KSxcXG4gNDI1OlxcdFxcdFxcdC5hbGlnblxcdCA9IF9fYWxpZ25vZl9fKHN0cnVjdCBpcF9zZXRfY29tbWVudCksXFxuIDQyNjpcXHRcXHRcXHQuZGVzdHJveSA9IGlwX3NldF9jb21tZW50X2ZyZWUsXFxuIDQyNzpcXHRcXHR9LFxcbiA0Mjg6XFx0fTtcXG4gNDI5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9leHRlbnNpb25zKTtcXG4gNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIGJvb2xcXG4gNDMyOlxcdGFkZF9leHRlbnNpb24oZW51bSBpcF9zZXRfZXh0X2lkIGlkLCB1MzIgZmxhZ3MsIHN0cnVjdCBubGF0dHIgKnRiW10pXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRyZXR1cm4gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmZsYWcgP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyMC45ODU0NDI1MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjI2MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX3NldF9jb21tZW50X2ZyZWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGlwX3NldF9jb21tZW50X2ZyZWVgIGlzIHRoZSAqZGVzdHJveSogZnVuY3Rpb24sIG1lYW5pbmcgaXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBtZW1vcnkgYW5kIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIElQIHNldCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlc2UgY29tbWVudHMgYXJlIGJlaW5nIGZyZWVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlLCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLiBMZXQncyBnZXQgdG8gaXQgYW5kIGZpbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyMy43ODc3MDc0MjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTI3MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfY29tbWVudF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zODY9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Mzg3OmlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDAzPWNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjUtXFx0XFx0LmFsaWduXFx0ID0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9jb21tZW50KSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDI2OlxcdFxcdC5kZXN0cm95ID0gaXBfc2V0X2NvbW1lbnRfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDI3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjI0LjM1ODk4NzQ1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNjI5MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBpcF9zZXRfY29tbWVudF9mcmVlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiwgYGlwX3NldF9jb21tZW50X2ZyZWVgLiBTZWVtcyBsaWtlIHdlJ3JlIGZvY3VzaW5nIG9uIGZyZWVpbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBjb21tZW50cyBpbiBhbiBJUCBzZXQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3M/IEVycm9yIGhhbmRsaW5nPyBQYXJ0IG9mIGEgYnJvYWRlciBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHNldC5cblxuSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uLCBhdCBhIG1pbmltdW0sIHRvIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24uIExpa2VseSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBjb21tZW50IHN0cmluZyBpdHNlbGYuIEkgYWxzbyBhbnRpY2lwYXRlIGl0IGhhbmRsaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzOiB3aGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1lbnQgaXMgTlVMTD8gRG9lcyBpdCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBtZW1vcnkgYmVpbmcgZnJlZWQgaXMgYWN0dWFsbHkgdmFsaWQ/IEFuZCB3aGF0IGFib3V0IGNvbmN1cnJlbmN5PyBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGEgcmFjZSBjb25kaXRpb24gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgc2V0IG9wZXJhdGlvbnM/IFRob3NlIGFyZSB0aGUgdGhpbmdzIEknbSBsb29raW5nIGZvciByaWdodCBvZmYgdGhlIGJhdCwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbi5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlaW5nIGNsZWFuZWQgdXAsIGhvdyBpdCdzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLiBGcm9tIGhlcmUsIEknbGwgYXNzZXNzIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyNy43ODI2MjAyODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODY6XFx0c3RhdGljIHZvaWRcXG4gMzg3OlxcdGlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXFxuIDM4ODpcXHR7XFxuIDM4OTpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQgPSBwdHI7XFxuIDM5MDpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gMzkzOlxcdFxcdGlmICh1bmxpa2VseSghYykpXFxuIDM5NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM5NTpcXHRcXHRzZXQtXFx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDE7XFxuIDM5NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgTlVMTCk7XFxuIDM5NzpcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0dHlwZWRlZiB2b2lkICgqZGVzdHJveWVyKShzdHJ1Y3QgaXBfc2V0ICosIHZvaWQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjI3Ljc4MjgwMjE4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTA4ODI1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG10eXBlX2RlbGAgRnVuY3Rpb24gYW5kIFBvdGVudGlhbCBEb3VibGUtRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUuIEl0ICpzZWVtcyogbGlrZSBmcmVlaW5nIHRoZSBjb21tZW50IHN0cmluZyBpcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCBmb3IgYHNldC1cdTAwM2VleHRfc2l6ZWAgdG8gYmUgZGVjcmVtZW50ZWQgdHdpY2UgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4gT2ggd2FpdCwgYHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO2AgaXMgaW4gdGhlcmUuIFJpZ2h0LCBzbyBpZiBpdCdzIGNhbGxlZCBhIHNlY29uZCB0aW1lLCBgY29tbWVudC1cdTAwM2VjYCB3aWxsIGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBlYXJseSwgbWl0aWdhdGluZyB0aGF0IHJpc2suIFBoZXcsIHRoYXQncyBvbmUgY2hlY2sgZG9uZS5cblxuSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGFuZCBJIHNlZSBgbXR5cGVfZGVsYCBpcyBjYWxsZWQgd2l0aCB0aGUgYGRhdGFgIGZyb20gdGhlIGhhc2ggdGFibGUuIEJ1dCB3YWl0LCBpdCdzIGFsc28gY2FsbGVkIHdpdGggYFx1MDAyNngtXHUwMDNlZGAgaW4gYG10eXBlX3Jlc2l6ZWAhIExldCBtZSBncmFiIHRoYXQgY29kZSBibG9jay4uLlxuXG5gYGBjXG5cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5cdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyBgXHUwMDI2eC1cdTAwM2VkYCBpcyB0aGUgZWxlbWVudCBkYXRhIHNhdmVkIGR1cmluZyBhIHJlc2l6ZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGAgaXMsIHNwZWNpZmljYWxseSBob3cgYHgtXHUwMDNlZGAgaXMgcG9wdWxhdGVkLiBIYW5nIG9uLCBJIHNlZSB3aGVyZSBgeGAgaXMgYWxsb2NhdGVkLiBMZXQncyBzZWU6XG5cbmBgYGNcblx0XHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcblx0XHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcblx0XHRcdFx0ICogc2F2ZSB2YWx1ZXNcblx0XHRcdFx0ICovXG5cdFx0XHRcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcblx0XHRcdFx0aWYgKHgpIHtcblx0XHRcdFx0XHR4LVx1MDAzZWFkID0gSVBTRVRfREVMO1xuXHRcdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxuXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcblx0XHRcdFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5cdFx0XHRcdH1cbmBgYFxuXG5XYWl0IGEgc2Vjb25kLi4uYG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtgIG9ubHkgY29waWVzIHRoZSBrZXkgZGF0YS4gVGhlIGVsZW1lbnQga2V5LCBidXQgbm90IGFueSBleHRlbnNpb25zISBUaGlzIG1lYW5zIHdlJ3JlICpvbmx5KiBjb3B5aW5nIGBtdHlwZV9lbGVtYCwgdGhlIGtleSwgbm90IHRoZSBleHRlbnNpb25zLi4uIEdvb2QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG10eXBlX2VsZW1gIGluIHBhcnRpY3VsYXIgY29udGFpbnMganVzdCB0aGUga2V5LiBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSB3aGF0IGZpZWxkcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHZlcnkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MzQuODkxNjMwNDQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxNTkzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjYtI2RlZmluZSBtdHlwZV9zYW1lX3NldFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfc2FtZV9zZXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI3OiNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTE5Nj1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxOTc6bXR5cGVfaXNfZmlsbGVkKGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICp4KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDAtI3VuZGVmIG10eXBlX2RhdGFfbmV4dFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjAxOiN1bmRlZiBtdHlwZV9lbGVtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jZGVmaW5lIG10eXBlX2RhdGFfbmV4dFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9uZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc2LSNpZm5kZWYgSEtFWV9EQVRBTEVOXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNzc6I2RlZmluZSBIS0VZX0RBVEFMRU5cXHRcXHRzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzgtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTI5Mz1zdHJ1Y3QgaHR5cGUge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTEtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTI6XFx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxMy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTY9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxOC1cXHRlbnVtIGlwc2V0X2FkdCBhZDtcXHQvKiBBRER8REVMIGVsZW1lbnQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMxOTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1xcdC8qIEVsZW1lbnQgdmFsdWUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMyMC1cXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XFx0LyogRXh0ZW5zaW9ucyBmb3IgQUREICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM4MD1tdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzg2LSNkZWZpbmUgYWhhc2hfZGF0YShuLCBpLCBkc2l6ZSlcXHRcXFxcXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozODc6XFx0KChzdHJ1Y3QgbXR5cGVfZWxlbSAqKSgobiktXFx1MDAzZXZhbHVlICsgKChpKSAqIChkc2l6ZSkpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM4OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkyLVxcdHN0cnVjdCBoYnVja2V0ICpuLCAqdG1wO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDkzOlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDk0LVxcdHUzMiBpLCBqLCBkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzktXFx0dTggZmxhZ3M7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDA6XFx0c3RydWN0IG10eXBlX2VsZW0gKnRtcDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0MS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY0MjpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY0MzpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NC1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbiwgKm07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTgzNT1tdHlwZV9leHRfc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiAqZWxlbWVudHMsIHNpemVfdCAqZXh0X3NpemUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzOS1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg0MDpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0MS1cXHR1MzIgaSwgaiwgcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NzItXFx0c3RydWN0IGh0YWJsZSAqdDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg3MzpcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCA9IHZhbHVlO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODc0OlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODc1LVxcdHN0cnVjdCBoYnVja2V0ICpuLCAqb2xkID0gRVJSX1BUUigtRU5PRU5UKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAwMC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMDE6XFx0bWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAwMi1vdmVyd3JpdGVfZXh0ZW5zaW9uczpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAzNS1cXHRcXHR4LVxcdTAwM2VhZCA9IElQU0VUX0FERDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMzY6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDM3LVxcdFxcdG1lbWNweShcXHUwMDI2eC1cXHUwMDNlZXh0LCBleHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY4LVxcdHN0cnVjdCBodGFibGUgKnQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY5OlxcdGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDcwOlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyNi1cXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNzpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI4LVxcdFxcdFxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE3ODptdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE3OS1cXHRcXHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTkxPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTI6bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5My1cXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5OC1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTk6XFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjAwLSNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIwMTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjAyLVxcdGludCByZXQsIGksIGogPSAwLCBrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjUwPW10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI1NC1cXHRzdHJ1Y3QgaHRhYmxlICp0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZCA9IHZhbHVlO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI1Ni1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyNTc6XFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU4LVxcdGludCBpLCByZXQgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzkwPW10eXBlX2xpc3QoY29uc3Qgc3RydWN0IGlwX3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzk1LVxcdGNvbnN0IHN0cnVjdCBoYnVja2V0ICpuO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM5NjpcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOTctXFx0dTMyIGZpcnN0ID0gY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjM1LjExOTc5ODQzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDM0MTg1MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBzZXQgSGFzaCBEZWxldGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBjcml0aWNhbCBmaXggaGVyZS4gSSdtIHNlZWluZyB0aGF0IGBtdHlwZV9lbGVtYCBpcywgYXMgZXhwZWN0ZWQsIGp1c3QgdGhlIGtleS4gVGhlIGV4dGVuc2lvbnMgYXJlIHN0b3JlZCByaWdodCBhZnRlciB0aGUga2V5IGluIHRoZSBoYXNoIGJ1Y2tldC4gVGhlIGBhaGFzaF9kYXRhYCBmdW5jdGlvbiBncmFicyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW5jbHVkaW5nIHRob3NlIGV4dGVuc2lvbnMsIGFuZCB0aGF0J3MgY3J1Y2lhbC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IGluIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHksIGBkYXRhID0gYWhhc2hfZGF0YShuLCBpLCBzZXQtXHUwMDNlZHNpemUpO2AgY29uZmlybXMgdGhpcy5cblxuVGhlIGtleSBwb2ludCBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKGV4dCkgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YC4gV2hlbiBjYWxsZWQgZnJvbSBgbXR5cGVfcmVzaXplYCwgdGhlIGBleHRgIHZhcmlhYmxlIGlzIE5VTEwsIHdoaWNoIG1lYW5zIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gVGhpcyBpcyB0aGUgZml4LCBhcyB0aGUgZXh0ZW5zaW9ucyB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgZHVyaW5nIHJlc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguXG5cbk5vdywgbGV0IG1lIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydHMgY2FwdHVyZSB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aHMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGVyZSBhcmVuJ3QgYW55IHNwZWNpZmljIGV4dGVuc2lvbiBjb25maWdzIHRvIHdvcnJ5IGFib3V0LCBzbyB0aG9zZSB0aHJlZSBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBhbmQgYGhhc2hfaXA2X3Jlc2l6ZWAgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRlZCBmb3IgYWxsIGhhc2ggdHlwZXMsIHNvIHRoYXQgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcuXG5cbkkgc2hvdWxkIGFkZCBhbGwgdGhvc2UgZnVuY3Rpb25zIHRvIHRoZSBsaXN0OyBgaGFzaF9pcDRfZGVsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBpdCBpZiBpdCdzIGluIHRoZSBzeW1ib2wgdGFibGUuIFN5emthbGxlciBpcyBjb3ZlcmFnZSBmb2N1c2VkLCBzbyBpZiBJIGluY2x1ZGUgdGhlc2Ugc3ltYm9scywgaXQgd2lsbCB0cnkgdG8gaGl0IHRoZW0uIExldCBtZSBjb25maXJtIHRoYXQgYGhhc2hfaXA0X2RlbGAgaXMgaW5kZWVkIGdlbmVyYXRlZCwgYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBmaWxlLiBJdCdzIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIG5vdyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0My41NTM5ODY0ODdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjU2NjY3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaF9pcDRfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0My43NDY1NjM1MzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTc3Nzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgTWFjcm8tR2VuZXJhdGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXNuJ3QgYGhhc2hfaXA0X2RlbGAgc2hvd2luZyB1cCBpbiBteSBgZ3JlcGAgc2VhcmNoPyBPaCByaWdodCwgaXQncyBhIG1hY3JvISBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgdXNpbmcgYCNkZWZpbmUgbXR5cGVfZGVsIElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAgYW5kIHRoZW4gYCAjZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpIGEjI2JgLiBTbywgYE1UWVBFYCBpcyBgaGFzaF9pcDRgIGFuZCBgX2RlbGAgaXMsIHdlbGwsIGBfZGVsYC4gVGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBnZW5lcmF0ZSBgaGFzaF9pcDRfZGVsYC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBkZWZpbml0ZWx5IGJlIGluIHRoZSBjb21waWxlZCBiaW5hcnkuIEdvdCBpdC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0IG1lIHRoaW5rLi4uIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBXYWl0LCB0aGF0J3MgYW4gYGlubGluZWAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhgLiBTaW5jZSBpdCdzIGlubGluZSwgaXQgcHJvYmFibHkgd29uJ3QgYmUgYSBzZXBhcmF0ZSBzeW1ib2wgaW4gdGhlIGNvbXBpbGVkIG91dHB1dC4gV2hhdCBhYm91dCBgaXBfc2V0X2NvbW1lbnRfZnJlZWA/IEFoLCB0aGF0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgZm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AuIEkgY291bGQgYWRkIHRoYXQgdG8gYEZvY3VzU3ltYm9sc2AsIGJ1dOKAplxuXG5Ib2xkIG9uLiBUaGUgYnVnIGlzbid0IHNwZWNpZmljYWxseSBhYm91dCBjb21tZW50czsgaXQncyBhYm91dCBleHRlbnNpb25zIGluIGdlbmVyYWwsIGlzbid0IGl0PyBMZXQgbWUgbGlzdCB0aGUgZXh0ZW5zaW9uczogYGlwX3NldF9za2JpbmZvYCwgYGlwX3NldF9jb3VudGVyYCwgYGlwX3NldF90aW1lb3V0YC4gQnV0LCBkYW1uIGl0LCBgaXBfc2V0X2V4dF9kZXN0cm95YCBvbmx5IGZyZWVzIGNvbW1lbnRzLiBTbyBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byByZXZpc2l0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IHRoYXQgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIzNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0OS4zMDgzNDM5MjVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMjg2OlxcdGlwX3NldF9leHRfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKmRhdGEpXFxuIDI4NzpcXHR7XFxuIDI4ODpcXHRcXHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcXG4gMjg5OlxcdFxcdCAqIGNhbGwgaXQncyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cXG4gMjkwOlxcdFxcdCAqL1xcbiAyOTE6XFx0XFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xcbiAyOTI6XFx0XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0LyogTmV0bGluayBDQiBhcmdzICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdElQU0VUX0NCX05FVCA9IDAsXFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzMDM6XFx0XFx0SVBTRVRfQ0JfUFJPVE8sXFx0XFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cXG4gMzA0OlxcdFxcdElQU0VUX0NCX0RVTVAsXFx0XFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjQ5LjMwODUyMTQ0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA3NDE0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRG91YmxlIEZyZWUgQnVnIGluIGlwc2V0IFJlc2l6ZSoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIG9ubHkgY2FsbHMgYGRlc3Ryb3lgIGZvciBjb21tZW50cywgd2hpY2ggaW1tZWRpYXRlbHkgcG9pbnRzIHRvIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvbW1lbnQgc3RyaW5nIGR1cmluZyByZXNpemUgcmVwbGF5LiBUbyByZXByb2R1Y2UgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzdGVwczogYW4gaXBzZXQgd2l0aCB0aGUgY29tbWVudCBleHRlbnNpb24gZW5hYmxlZCwgYWRkIGFuIGVsZW1lbnQgd2l0aCBhIGNvbW1lbnQsIHRyaWdnZXIgYSByZXNpemUgb2YgdGhlIGlwc2V0LCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBoYXZlIGEgY29uY3VycmVudCBkZWxldGUgb2YgdGhlIGVsZW1lbnQgaGFwcGVuIGR1cmluZyB0aGF0IHJlc2l6ZSBvcGVyYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHJlc2l6ZSByZXBsYXkgaGFuZGxlcyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgbWVudGlvbnM6XG5cbmBgYGNcblx0XHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cblx0XHRpZiAoZXh0KVxuXHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG5gYGBcblxuYW5kIHRoZSBgbXR5cGVfcmVzaXplYCBmdW5jdGlvbiB0aGF0IHJlcGxheXMgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZTpcblxuYGBgY1xuXHRcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuXHRcdFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XG5cdFx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcblx0XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG10eXBlX2RlbChzZXQsIFx1MDAyNngtXHUwMDNlZCwgTlVMTCwgTlVMTCwgMCk7XG5cdFx0XHR9XG5cdFx0XHRsaXN0X2RlbChsKTtcblx0XHRcdGtmcmVlKGwpO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyBpdCByZXBsYXlzIEFERCBhbmQgREVMIG9wZXJhdGlvbnMgcmVjb3JkZWQgZHVyaW5nIHRoZSByZXNpemUgaW4gYG9yaWctXHUwMDNlYWRgLiBJZiBhIERFTCBoYXBwZW5lZCAqZHVyaW5nKiB0aGUgcmVzaXplLCBgbXR5cGVfZGVsYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHJlcGxheS4gVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggYGV4dCA9PSBOVUxMYC5cblxuQmVmb3JlIHRoZSBwYXRjaCwgYG10eXBlX2RlbGAgd291bGQgdGhlbiBuYWl2ZWx5IGNhbGwgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpYC4gQW5kIHRoYXQgaXMgdGhlIHByb2JsZW0uIGBkYXRhYCBpcyB0aGUgZWxlbWVudCBmcm9tIHRoZSAqbmV3KiBoYXNoIHRhYmxlIGB0YCwgdGhhdCB0aGUgZWxlbWVudCB0aGF0IHdhcyBkZWxldGVkICh3aXRoIHRoZSBjb21tZW50KSBkdXJpbmcgdGhlIHJlc2l6ZSB3YXMgY29waWVkIHRvLiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCB3YXMgZGVsZXRlZCBkdXJpbmcgcmVzaXplLCBpdCB3YXMgaW4gdGhlICpvbGQqIGhhc2ggdGFibGUgYG9yaWdgLlxuXG5EdXJpbmcgcmVzaXplLCB0aGUgb3JpZ2luYWwgZWxlbWVudHMgZnJvbSB0aGUgb2xkIGhhc2ggdGFibGUsIGBvcmlnYCwgYXJlIGNvcGllZCB0byB0aGUgbmV3IGhhc2ggdGFibGUsIGB0YC4gVGhlbiwgdGhpcyByZXBsYXlzIHRoZSBvcGVyYXRpb25zIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoZSByZXNpemUuIElmIGEgZGVsZXRlIGlzIHJlcGxheWVkLCB0aGF0IGRlbGV0ZSB0YXJnZXRzIHRoZSBlbGVtZW50IGluIGB0YC5cblxuSGVyZSdzIHRoZSBwcm9ibGVtLiBJdCBpcyBzdXBwb3NlZCB0byBkZWxldGUgZnJvbSBgdGAuXG5cbkR1cmluZyB0aGUgZGVsZXRlIGZyb20gYHRgLCBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgLiBCdXQgd2FpdC4uLiB0aGUgY29tbWVudCBzdGF0ZXMgdGhhdCBcInRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWRcIi4gU28sICp3aGVuKiB3ZXJlIHRoZXkgZGVzdHJveWVkP1xuXG5JIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBtdHlwZV9kZWxgIHdoZW4gaXQncyBjYWxsZWQgKmR1cmluZyogdGhlIHJlc2l6ZSBvcGVyYXRpb24gaXRzZWxmLCB0byB0cmFjayB3aGVuIHRoZSBleHRlbnNpb25zIHdlcmUgZGVzdHJveWVkLiBJIHN1c3BlY3QgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgbG9naWMgZmxhdyB3aGVyZSB0aGUgZXh0ZW5zaW9ucyBhcmUgY2xlYW5lZCB1cCBpbiBvbmUgcGFydCBvZiB0aGUgcmVzaXplIHByb2Nlc3MgYnV0IG5vdCBoYW5kbGVkIGNvcnJlY3RseSBkdXJpbmcgdGhlIHN1YnNlcXVlbnQgcmVwbGF5LiBUaGUgcmVwbGF5IG1pZ2h0IGJlIGNsZWFuaW5nIHVwIGEgc3RydWN0dXJlIGFscmVhZHkgY2xlYW5lZCB1cC4gVGhhdCBkb3VibGUtZnJlZSBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjc4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6NTguMDE1OTM4NjM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0XFx0XFx0LyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovXFxuMTExNjpcXHRcXHRcXHRpZiAoZXh0KVxcbjExMTc6XFx0XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdFxcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4xMTIwOlxcdFxcdFxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXFxuMTEyMTpcXHRcXHRcXHRcXHQgKiBzYXZlIHZhbHVlc1xcbjExMjI6XFx0XFx0XFx0XFx0ICovXFxuMTEyMzpcXHRcXHRcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxuMTEyNDpcXHRcXHRcXHRcXHRpZiAoeCkge1xcbjExMjU6XFx0XFx0XFx0XFx0XFx0eC1cXHUwMDNlYWQgPSBJUFNFVF9ERUw7XFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLFxcbjExMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xcbjExMjg6XFx0XFx0XFx0XFx0XFx0eC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4xMTI5OlxcdFxcdFxcdFxcdH1cXG4xMTMwOlxcdFxcdFxcdH1cXG4xMTMxOlxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2MgcG9zOyBpKyspIHtcXG4xMTMyOlxcdFxcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgbi1cXHUwMDNldXNlZCkpXFxuMTEzMzpcXHRcXHRcXHRcXHRcXHRrKys7XFxuMTEzNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjU4LjAxNjE2OTY5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDgxMTY3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25jdXJyZW50IEVsZW1lbnQgTW9kaWZpY2F0aW9uIER1cmluZyBSZXNpemluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpZiBgdC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlLCB0aGVuIHdlJ3ZlIGdvdCBhIGtlcm5lbC1zaWRlIGRlbGV0ZSBoYXBwZW5pbmcgY29uY3VycmVudGx5IHdpdGggYSByZXNpemUgb3BlcmF0aW9uLiBCdXQgd2hhdCBhYm91dCB1c2VyLXNpZGUgZGVsZXRlcz8gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggcG9zc2liaWxpdGllcy5cblxuTG9va2luZyBhdCBgbXR5cGVfcmVzaXplYCwgdGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBrZXJuZWwtc2lkZSBhZGRzL2RlbGV0ZXMgYXJlIHRoZSBvbmx5IGFjdGlvbnMgdGhhdCBjYW4gaGFwcGVuIGR1cmluZyByZXNpemUuIFVzZXItc3BhY2UgYWN0aW9ucyBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXgsIHNvIHRoZXkgc2hvdWxkbid0IGJlIGNvbmN1cnJlbnQuIFRoaXMgY2xhcmlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIGEga2VybmVsLXNpZGUgREVMIGR1cmluZyBhIHJlc2l6ZSB3aWxsIHRyaWdnZXIgYG10eXBlX2RlbGAuXG5cbkluc2lkZSBgbXR5cGVfZGVsYCwgaXQncyBnb2luZyB0byBmaW5kIHRoZSBlbGVtZW50IGluIGBvcmlnYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBgdGAgKHRoZSB0YXJnZXQgdGFibGUgYmVpbmcgcmVzaXplZCkgaXNuJ3QgeWV0IHB1Ymxpc2hlZC4gSXQgd2lsbCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYG9yaWdgLCBhbmQgdGhlbiBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50ICppbiBgb3JpZ2AqLiBDcnVjaWFsbHksIGl0IHNhdmVzIHRoZSBERUwgb3BlcmF0aW9uIGluIGBvcmlnLVx1MDAzZWFkYC5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzOiBhZnRlciBgbXR5cGVfcmVzaXplYCBmaW5pc2hlcyBjb3B5aW5nIGV2ZXJ5dGhpbmcgZnJvbSBgb3JpZ2AgdG8gYHRgLCB3aGF0IGhhcHBlbnMgdG8gdGhhdCBkZWxldGVkIGVsZW1lbnQ/IElmIHRoZSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgLCB3aWxsIGl0IGJlIGNvcGllZCB0byBgdGAgZHVyaW5nIHRoZSByZXNpemUgcHJvY2Vzcz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb3B5IGxvb3Agd2l0aGluIGBtdHlwZV9yZXNpemVgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2xlYXJlZCBiaXQgaW4gYG9yaWdgIHByZXZlbnRzIHRoZSBlbGVtZW50IGZyb20gYmVpbmcgY29waWVkIG9yIGlmIGl0J3MgaGFuZGxlZCBkaWZmZXJlbnRseS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3OTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MzowMy40OTczNjg0OTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gNjkxOlxcdFxcdHByX2RlYnVnKFxcXCJhdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcXFxuXFxcIixcXG4gNjkyOlxcdFxcdFxcdCBzZXQtXFx1MDAzZW5hbWUsIG9yaWctXFx1MDAzZWh0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7XFxuIDY5MzpcXHRcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3Mob3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcXG4gNjk0OlxcdFxcdFxcdC8qIEV4cGlyZSBtYXkgcmVwbGFjZSBhIGhidWNrZXQgd2l0aCBhbm90aGVyIG9uZSAqL1xcbiA2OTU6XFx0XFx0XFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbiA2OTY6XFx0XFx0XFx0Zm9yIChpID0gYWhhc2hfYnVja2V0X3N0YXJ0KHIsIG9yaWctXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gNjk3OlxcdFxcdFxcdCAgICAgaSBcXHUwMDNjIGFoYXNoX2J1Y2tldF9lbmQociwgb3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyBpKyspIHtcXG4gNjk4OlxcdFxcdFxcdFxcdG4gPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGhidWNrZXQob3JpZywgaSkpO1xcbiA2OTk6XFx0XFx0XFx0XFx0aWYgKCFuKVxcbiA3MDA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcwMTpcXHRcXHRcXHRcXHRwb3MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZuLVxcdTAwM2Vwb3MpO1xcbiA3MDI6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHBvczsgaisrKSB7XFxuIDcwMzpcXHRcXHRcXHRcXHRcXHRpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi1cXHUwMDNldXNlZCkpXFxuIDcwNDpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdGRhdGEgPSBhaGFzaF9kYXRhKG4sIGosIGRzaXplKTtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChTRVRfRUxFTV9FWFBJUkVEKHNldCwgZGF0YSkpXFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzA4OlxcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdC8qIFdlIGhhdmUgcmVhZGVycyBydW5uaW5nIHBhcmFsbGVsIHdpdGggdXMsXFxuIDcxMDpcXHRcXHRcXHRcXHRcXHQgKiBzbyB0aGUgbGl2ZSBkYXRhIGNhbm5vdCBiZSBtb2RpZmllZC5cXG4gNzExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA3MTI6XFx0XFx0XFx0XFx0XFx0ZmxhZ3MgPSAwO1xcbiA3MTM6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KHRtcCwgZGF0YSwgZHNpemUpO1xcbiA3MTQ6XFx0XFx0XFx0XFx0XFx0ZGF0YSA9IHRtcDtcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdG10eXBlX2RhdGFfcmVzZXRfZmxhZ3MoZGF0YSwgXFx1MDAyNmZsYWdzKTtcXG4gNzE2OlxcdCNlbmRpZlxcbiA3MTc6XFx0XFx0XFx0XFx0XFx0a2V5ID0gSEtFWShkYXRhLCBoLVxcdTAwM2Vpbml0dmFsLCBodGFibGVfYml0cyk7XFxuIDcxODpcXHRcXHRcXHRcXHRcXHRtID0gX19pcHNldF9kZXJlZmVyZW5jZShoYnVja2V0KHQsIGtleSkpO1xcbiA3MTk6XFx0XFx0XFx0XFx0XFx0bnIgPSBhaGFzaF9yZWdpb24oa2V5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTM6MDMuNDk3NTM1OTczWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjUzMjU3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEFuYWx5c2lzOiBEb3VibGUgRnJlZSBpbiBDb25jdXJyZW50IERFTCBhbmQgUmVzaXplKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi1cdTAwM2V1c2VkKSkgY29udGludWU7YCBpcyBrZXkuIEl0IG1lYW5zIHRoYXQgaWYgYSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgIGR1ZSB0byBhIGNvbmN1cnJlbnQgREVMIG9wZXJhdGlvbiAqYmVmb3JlKiBpdCB3YXMgY29waWVkIHRvIGB0YCwgd2UgKmRvbid0KiBjb3B5IHRoYXQgZWxlbWVudC4gQnV0IHdoeSBkb2VzIGBtdHlwZV9yZXNpemVgIHJlcGxheSB0aGUgREVMIG9uIGB0YCBpZiBpdCB3YXNuJ3QgY29waWVkPyBBaCwgaWYgaXQncyBub3QgY29waWVkIHRvIGB0YCwgYG10eXBlX2RlbGAgb24gYHRgIHdvbid0IGZpbmQgdGhlIGVsZW1lbnQuIFNvLCBsZXQncyBjb25maXJtIHRoYXQuXG5cbkxvb2tpbmcgYXQgdGhlIGBtdHlwZV9kZWxgIHJlcGxheSBsb29wOiBpZiBhbiBlbGVtZW50IHdhc24ndCBjb3BpZWQsIHRoZSBgbXR5cGVfZGVsYCBjYWxsIHdpbGwgbGlrZWx5IHJldHVybiBgLUVOT0VOVGAgb3IgYSBzaW1pbGFyIGVycm9yLiBCdXQgd2FpdCwgd2hhdCBpZiB0aGUgREVMIGhhcHBlbmVkICphZnRlciogdGhlIGJ1Y2tldCB3YXMgY29waWVkIHRvIGB0YD8gVGhhdCdzIHRoZSBjcnV4IG9mIGl0ISBJZiB0aGUgY29weSBvY2N1cnJlZCBiZWZvcmUgdGhlIGNvbmN1cnJlbnQgREVMLCB0aGUgZWxlbWVudCAqaXMqIGNvcGllZCB0byBgdGAuIFRoZW4sIHRoZSBERUwgY2xlYXJzIHRoZSBiaXQgaW4gYG9yaWdgIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGBvcmlnYC5cblxuVGhlbiB0aGUgcmVwbGF5IGNhbGxzIGBtdHlwZV9kZWxgIG9uIGB0YC4gYG10eXBlX2RlbGAgKmZpbmRzKiB0aGUgZWxlbWVudCBpbiBgdGAsIGNsZWFycyB0aGUgYml0IGluIGB0YCwgYW5kIGNhbGxzIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAgb24gdGhlIGVsZW1lbnQgaW4gYHRgISBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IHRoZSBlbGVtZW50IGluIGB0YCBpcyBhIGNvcHkgb2YgdGhlIGVsZW1lbnQgaW4gYG9yaWdgLiBUaGlzIG1lYW5zIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzIGNhbGxlZCAqdHdpY2UqIG9uIHRoZSAqc2FtZSogZXh0ZW5zaW9uIGRhdGEsIGxpa2UgdGhlIHNhbWUgY29tbWVudCBwb2ludGVyISBCaW5nbyEgVGhpcyBpcyB0aGUgZG91YmxlIGZyZWUhXG5cblRoZSBjb21tZW50IHN0cmluZyBpcyBmcmVlZCB3aGVuIHRoZSBpbml0aWFsIGNvbmN1cnJlbnQgREVMIGhhcHBlbnMgb24gYG9yaWdgLiBUaGVuLCB0aGUgcmVwbGF5IGZyZWVzIGl0IGFnYWluIG9uIGB0YCwgbGVhZGluZyB0byB0aGUgZG91YmxlIGZyZWUuIE15IGZpeCB0byBgbXR5cGVfZGVsYCwgaXMgdG8gYWRkIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlmIGBleHQgPT0gTlVMTGAgaW4gdGhlIHJlcGxheSwgdGh1cyBwcmV2ZW50aW5nIHRoZSBkb3VibGUgZnJlZSwgc2luY2UgdGhlcmUgaXMgbm8gYGV4dGAgdG8gZGVzdHJveS4gVGhhdCdzIGEgc29saWQgYW5hbHlzaXMuXG5cblNvLCB0aGUgY29yZSBpc3N1ZSBpcyBhIGRvdWJsZSBmcmVlIG9mIHRoZSBjb21tZW50IGV4dGVuc2lvbiBkdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIERFTCBhbmQgcmVzaXplIG9wZXJhdGlvbi4gVG8gdHJpZ2dlciB0aGlzLCB3ZSBuZWVkIGBDT05GSUdfSVBfU0VUYCwgYENPTkZJR19JUF9TRVRfSEFTSF9JUGAgKG9yIGFub3RoZXIgaGFzaCB0eXBlKSwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTkVURklMVEVSX1hUX1NFVGAgdG8gZW5hYmxlIHRoZSBTRVQgdGFyZ2V0IGZvciBrZXJuZWwtc2lkZSBvcGVyYXRpb25zLiBUaW1lIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL3h0X3NldC5jYCBub3cgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUzOjExLjcyMjg2NTI3OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzExMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh0X3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE2MD1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLKSArPSB4dF9jb25ubWFyay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9TRVQpICs9IHh0X3NldC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNjItb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9OQVQpICs9IHh0X25hdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTIyNz1zdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTIzOS1cXHQgKiBwcm90ZWN0ZWQgYnkgdGhlIGlwX3NldF9yZWZfbG9jay5cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI0MDpcXHQgKiBFeHRlcm5hbCBzeXN0ZW1zIChpLmUuIHh0X3NldCkgbXVzdCBjYWxsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyNDEtXFx0ICogaXBfc2V0X25mbmxfZ2V0XyogZnVuY3Rpb25zLCB0aGF0IHdheSB3ZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzE9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NDEtXFx0XFx0aWYgKGR1bXBfZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX0xJU1RfU0VUTkFNRSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY0MjpcXHRcXHRcXHRnb3RvIG5leHRfc2V0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjQzLVxcdFxcdHN3aXRjaCAoY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF0pIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYxLVxcdFxcdFxcdGlmIChkdW1wX2ZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19MSVNUX0hFQURFUilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY2MjpcXHRcXHRcXHRcXHRnb3RvIG5leHRfc2V0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYzLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjctXFx0XFx0XFx0XFx0LyogU2V0IGlzIGRvbmUsIHByb2NlZWQgd2l0aCBuZXh0IG9uZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjY4OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9zZXQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjktXFx0XFx0XFx0Z290byByZWxlYXNlX3JlZmNvdW50O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2ODQtXFx0cmV0ID0gLUVGQVVMVDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY4NTpuZXh0X3NldDpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY4Ni1cXHRpZiAoZHVtcF90eXBlID09IERVTVBfT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTc6I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NldC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTU0PXNldF9tYXRjaF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NjpcXHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz02Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Njc6Y29tcGF0X2ZsYWdzKHN0cnVjdCB4dF9zZXRfaW5mb192MCAqaW5mbylcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9ODM9c2V0X21hdGNoX3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy04NC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo4NTpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTg2LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xMDg9c2V0X21hdGNoX3YwX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTA5LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjExMDpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTExMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTE4PXNldF9tYXRjaF92MShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xMTkte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTIwOlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTIxLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xMzQ9c2V0X21hdGNoX3YxX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xMzUte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTM2OlxcdHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM3LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNTY9c2V0X21hdGNoX3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTU3LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE1ODpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTY2PXNldF9tYXRjaF92Myhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNjcte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTY4OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MyAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY5LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xODk9c2V0X21hdGNoX3Y0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5MC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoxOTE6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0ICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xOTItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIxMj1zZXRfdGFyZ2V0X3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTIxMy17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyMTQ6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMTUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIzMj1zZXRfdGFyZ2V0X3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMzMte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjM0OlxcdHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjAgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjM1LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yNzQ9c2V0X3RhcmdldF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTI3NS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyNzY6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yNzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTI4Nz1zZXRfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTI4OC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyODk6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yOTAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTMwNz1zZXRfdGFyZ2V0X3YxX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMDgte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MzA5OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjEgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzEwLVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zNDU9c2V0X3RhcmdldF92MV9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM0Ni17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozNDc6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM1OD1zZXRfdGFyZ2V0X3YyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM1OS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozNjA6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM4OT1zZXRfdGFyZ2V0X3YzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM5MC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozOTE6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zOTItXFx0aW50IHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NDM0PXNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzUte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NDM2OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNDM3LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz00NTc9c2V0X3RhcmdldF92M19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNDU4LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjQ1OTpcXHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTQ2MC1cXHRpcF9zZXRfaWRfdCBpbmRleDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NTE3PXNldF90YXJnZXRfdjNfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MTgte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTE5OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTIwLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz01Mjk9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzZXRfbWF0Y2hlc1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTUzNC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjUzNTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YwKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTUzNi1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YwX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU0NC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU0NTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU0Ni1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1NC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU1NTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1Ni1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU2NS1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU2NjpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU2Ny1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3NS1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU3NjpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3Ny1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4Ni1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU4NzpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4OC1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU5Ni1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU5NzpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU5OC1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYwNy1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92NCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYwODpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYwOS1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxNy1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92NCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYxODpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxOS1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTYyNT1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBzZXRfdGFyZ2V0c1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYzMC1cXHRcXHQudGFyZ2V0XFx0XFx0PSBzZXRfdGFyZ2V0X3YwLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjMxOlxcdFxcdC50YXJnZXRzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCksXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02MzItXFx0XFx0LmNoZWNrZW50cnlcXHQ9IHNldF90YXJnZXRfdjBfY2hlY2tlbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjQwLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjEsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2NDE6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY0Mi1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02NTAtXFx0XFx0LnRhcmdldFxcdFxcdD0gc2V0X3RhcmdldF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjY1MTpcXHRcXHQudGFyZ2V0c2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjEpLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjUyLVxcdFxcdC5jaGVja2VudHJ5XFx0PSBzZXRfdGFyZ2V0X3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY2MS1cXHRcXHQudGFyZ2V0XFx0XFx0PSBzZXRfdGFyZ2V0X3YyLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjYyOlxcdFxcdC50YXJnZXRzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02NjMtXFx0XFx0LmNoZWNrZW50cnlcXHQ9IHNldF90YXJnZXRfdjJfY2hlY2tlbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjcxLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjIsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2NzI6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YyKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY3My1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02ODItXFx0XFx0LnRhcmdldFxcdFxcdD0gc2V0X3RhcmdldF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjY4MzpcXHRcXHQudGFyZ2V0c2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMpLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjg0LVxcdFxcdC5jaGVja19ob29rc1xcdD0gc2V0X3RhcmdldF92M19jaGVja19ob29rcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjkzLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjMsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2OTQ6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY5NS1cXHRcXHQuY2hlY2tfaG9va3NcXHQ9IHNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcwMjpzdGF0aWMgaW50IF9faW5pdCB4dF9zZXRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzAzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE1LVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzE2OnN0YXRpYyB2b2lkIF9fZXhpdCB4dF9zZXRfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzIxLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIyOm1vZHVsZV9pbml0KHh0X3NldF9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcyMzptb2R1bGVfZXhpdCh4dF9zZXRfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUzOjExLjk1NTU4MjMzMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU5MDAzMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNldCBEb3VibGUtRnJlZSBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTkVURklMVEVSX1hUX1NFVGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3IgYHh0X3NldGAuIFRoYXQncyBnb2luZyBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm93LCBsZXQncyBsb29rIGF0IHRob3NlIGZvY3VzIHN5bWJvbHMgYWdhaW4uIFdlIGhhdmU6XG5cbmBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9pcDZfcmVzaXplYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ2X3Jlc2l6ZWAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuXG5cbldhaXQgYSBtaW51dGUsIGBoYXNoX2lwNF9kZWxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGJlIHRyaWNreS4gQnV0LCB1bmxlc3MgaXQncyBpbmxpbmVkLCBpdCAqc2hvdWxkKiBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBMZXQgbWUgY29uZmlybS4uLiBZZXAsIGBtdHlwZV9kZWxgIGlzIHN0YXRpYywgYW5kIGl0J3Mgc3Vic3RhbnRpYWwgZW5vdWdoIHRoYXQgaW5saW5pbmcgaXMgdW5saWtlbHkuIEknbGwgdmVyaWZ5IGlmIGBtdHlwZV9kZWxgIGlzIGRlY2xhcmVkIGFzIGlubGluZS4gTm8sIGl0J3MganVzdCBgc3RhdGljIGludCBtdHlwZV9kZWwoLi4uKWAuIFNvLCB0aGF0J3MgZGVmaW5pdGVseSBhIGRpc3RpbmN0IHN5bWJvbC5cblxuV2hpbGUgSSdtIGhlcmUsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBzeW1ib2xzLiBBbmQgeWVzLCBgbXR5cGVfcmVzaXplYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gY29uZmlybSB0aGF0IGBoYXNoX2lwNF9yZXNpemVgIHdpbGwgYWxzbyBiZSBhIHN5bWJvbCB3ZSBjYW4gdXNlLlxuXG5BbHJpZ2h0LCBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoYXQgc2V0IG9mIGZvY3VzIHN5bWJvbHMgbm93LiBMb29rcyBzb2xpZC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBjb25maWdzOiBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX0lQYCwgYElQX1NFVF9IQVNIX05FVGAsIGFuZCBgTkVURklMVEVSX1hUX1NFVGAuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBXaGF0IGhhcHBlbnMgaXMgdGhpczogdGhlcmUncyBhIGtlcm5lbC1zaWRlIGRlbGV0ZSwgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBsaWtlIGFuIGlwdGFibGVzIFNFVCB0YXJnZXQsIGFuZCBpdCdzIGhhcHBlbmluZyBjb25jdXJyZW50bHkgd2l0aCBhIGhhc2gtYmFzZWQgaXBzZXQgcmVzaXplLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdvIHdyb25nOiB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMsIGxpa2UgY29tbWVudHMsIGdldCBkZXN0cm95ZWQuIFRoZW4sIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGFuZCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCAqYWdhaW4qLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrLCBgaWYgKGV4dClgLCB0byBza2lwIGRlc3Ryb3lpbmcgdGhlIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIHdvdWxkIGJlIE5VTEwgaW4gdGhlIHNlY29uZCBjYWxsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGEgcmVhY2hhYmxlIGJ1Zy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4gYElQX1NFVF9IQVNIX0lQYCBhbmQgYElQX1NFVF9IQVNIX05FVGAgYXJlIGdvb2QgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBoYXNoIHR5cGVzLiBgTkVURklMVEVSX1hUX1NFVGAgaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUga2VybmVsLXNpZGUgZGVsZXRlLCBhbmQgYElQX1NFVGAgaXMgdGhlIGNvcmUgaXBzZXQgc3Vic3lzdGVtLiBZZXMsIHRoYXQncyBhbGwuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDk5LCJPdXRwdXRUb2tlbnMiOjI3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MzoyMS40MTQ1ODg2NDdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1NDU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfaXA0X2RlbFwiLFxuICAgIFwiaGFzaF9pcDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwNF9yZXNpemVcIixcbiAgICBcImhhc2hfaXA2X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X3Jlc2l6ZVwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBEdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIGRlbGV0ZSAoZS5nLiwgdmlhIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0KSBhbmQgYSByZXNpemUgb2YgYSBoYXNoLWJhc2VkIGlwc2V0LCB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFzaF9pcDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwNl9kZWxcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfaXA0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9pcDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJpcF9zZXRfY29tbWVudF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50J3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 22:14:36 +0000 UTC FinishedAt: 2026-07-13 22:53:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_IP", "IP_SET_HASH_NET", "NETFILTER_XT_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SET", "IP_SET_HASH_IP", "IP_SET_HASH_NET", "NETFILTER_XT_SET" ], "series_id": "bc05cd38-238d-45da-8307-8a0d42a98c38" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hash_ip4_del", "hash_ip6_del", "hash_net4_del", "hash_net6_del", "hash_ip4_resize", "hash_ip6_resize", "hash_net4_resize", "hash_net6_resize", "ip_set_comment_free" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NDA4MDI1NThmZmIxZWUyYTJhOThjZjBjODczOGFiNjA0OTllZDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMjI6NTE6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMTEyLDcgJiM0MzsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxuIFx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuICNlbmRpZlxuLVx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiYjNDM7XHRcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xuJiM0MztcdFx0aWYgKGV4dClcbiYjNDM7XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4gXG4gXHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbiBcdFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX2lwNl9yZXNpemUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDZfcmVzaXplJiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0MDgwMjU1OGZmYjFlZTJhMmE5OGNmMGM4NzM4YWI2MDQ5OWVkMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAyMjo1MToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCkBAIC0xMTEyLDcgJiM0MzsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCiAJCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKICNlbmRpZgotCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKJiM0MzsJCS8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqLwomIzQzOwkJaWYgKGV4dCkKJiM0MzsJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAogCQlpZiAodC0mZ3Q7cmVzaXppbmcgJmFtcDsmYW1wOyBleHQgJmFtcDsmYW1wOyBleHQtJmd0O3RhcmdldCkgewogCQkJLyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgaXBzZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIEl0IGFwcGVhcnMgdGhleSYjMzk7dmUgYWRkZWQgYSBzaW1wbGUgY2hlY2s6IGBpZiAoZXh0KWAgYmVmb3JlIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO2Agd2l0aGluIHRoZSBgbXR5cGVfZGVsYCBmdW5jdGlvbi4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc21hbGwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGNvbnRleHQgb2YgYG10eXBlX2RlbGAuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGNoZWNrIGhhcyBiZWVuIGFkZGVkLCBhbmQgd2h5LiBUaW1lIHRvIHB1bGwgdXAgYGdyZXBwZXJgIGFuZCBmaW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gcHJldmVudCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXR5cGVfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE3Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwNjojdW5kZWYgbXR5cGVfZGVsX2NpZHJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA3LSN1bmRlZiBtdHlwZV9haGFzaF9tZW1zaXplXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTQtI3VuZGVmIG10eXBlX2FkZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMTU6I3VuZGVmIG10eXBlX2RlbFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1MC0jZGVmaW5lIG10eXBlX2FkZF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1MTojZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Mi0jZGVmaW5lIG10eXBlX2FoYXNoX21lbXNpemVcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1OS0jZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjYwOiNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjEtI2RlZmluZSBtdHlwZV90ZXN0X2NpZHJzXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zNTY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zNTgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyMC1cdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1MjE6XHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyMi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjYyNDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjI1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYzMj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODYtXHRcdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjc4NzpcdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODgtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1MS1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo5NTI6XHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGkpKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEwNjM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExMS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBqJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTMtXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4MC1cdFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODE6XHRcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNDgyLVx0XHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpcHNldCBIYXNoIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtdHlwZV9kZWxgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgaXMgYSAqdGVtcGxhdGUqIGZpbGUsIHVzZWQgYnkgYWxsIHRob3NlIGlwc2V0IGhhc2ggdHlwZXMg4oCTIGBpcF9zZXRfaGFzaF9pcC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBidWcgaXMgdGhhdCBgaXBfc2V0X2V4dF9kZXN0cm95YCB3YXMgYmVpbmcgY2FsbGVkIHdoZW4gYGV4dGAgd2FzIE5VTEwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgb2NjdXJzIHNwZWNpZmljYWxseSBkdXJpbmcgYSByZXNpemUgcmVwbGF5LgoKTGV0IG1lIHNlZSwgYGlwX3NldF9leHRfZGVzdHJveWAgdGFrZXMgYGRhdGFgIGFzIGFuIGFyZ3VtZW50IOKAkyB0aGUgZWxlbWVudCBkYXRhIOKAkyBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGUgY29kZSBuZWVkcyB0byBmcmVlIHRoYXQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0ICYjMzQ7T24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuJiMzNDsgU28gdGhlIGNoZWNrIGBpZiAoZXh0KWAgaXMgdGhlIGtleS4gSXQgcHJldmVudHMgY2FsbGluZyBgaXBfc2V0X2V4dF9kZXN0cm95YCB3aGVuIGBleHRgIGlzIGFscmVhZHkgTlVMTC4gR29vZCwgaXQmIzM5O3MgYSBudWxsIHBvaW50ZXIgY2hlY2suIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBhcHByb3ByaWF0ZSBmaXggZm9yIGEgcmVzaXplIHJlcGxheSBzY2VuYXJpby4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgcHJvcGVybHkuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgSVBfU0VUX0hBU0hgIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1NFVF9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz00Nj1jb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0cyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gaGluZ2VzIG9uIGBJUF9TRVRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgd2hlcmUgd291bGQgSSBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgSVBfU0VUYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbT8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gSXQgY291bGQgYmUgZGlyZWN0bHkgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGBpcHNldGAgcGFydCBvZiBuZXRmaWx0ZXIuIFNvLCBJJiMzOTtsbCBjaGVjayBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbGF0dGVyIGFzIGl0IHNlZW1zIG1vcmUgZm9jdXNlZCB0byB0aGlzIHRhc2ssIGJ1dCBpZiBJIGRvbiYjMzk7dCBmaW5kIGl0IHRoZXJlLCBJJiMzOTtsbCBicmFuY2ggb3V0IHRvIHRoZSBicm9hZGVyIG5ldGZpbHRlciBLY29uZmlnLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaHVudCAtIHRoZSBnb2FsIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IEtjb25maWcgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI6bWVudWNvbmZpZyBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ9aWYgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY6Y29uZmlnIElQX1NFVF9NQVhcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjI4OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NTU6Y29uZmlnIElQX1NFVF9IQVNIX0lQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo3NDpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVElQXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsaXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTAzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTI6Y29uZmlnIElQX1NFVF9IQVNIX01BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTMwOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTM5OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY4OmNvbmZpZyBJUF9TRVRfTElTVF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXHR0cmlzdGF0ZSBcJiMzNDtsaXN0OnNldCBzZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIElQIFNldCBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHN1cHBvcnQgYElQX1NFVGAgYW5kIHRoZSBgSVBfU0VUX0hBU0hfSVBgIG1ldGhvZCAob3IgYW55IG9mIHRoZSBvdGhlciBoYXNoaW5nIHZhcmlhdGlvbnMpIGluIG15IGN1cnJlbnQgc2V0dXAuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSByZXF1aXJlbWVudHMuIE9rYXksIEkmIzM5O2xsIGFkZCBgSVBfU0VUYCBhbmQgYElQX1NFVF9IQVNIX0lQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgd2F5LCB0aGUgc3lzdGVtIHdpbGwga25vdyB0aGF0IEkgaW50ZW5kIHRvIGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBkdXJpbmcgY29tcGlsYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgYmFzaWMgZW5hYmxpbmcgc3RlcC4KCk5vdywgdGhhdCBgbXR5cGVfZGVsYCBmdW5jdGlvbi4uLnRoYXQmIzM5O3MgYSBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBnZW5lcmF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb25zIHdvcmsgZm9yIGVmZmVjdGl2ZSBkZWJ1Z2dpbmcgYW5kIHBvdGVudGlhbCBjdXN0b21pemF0aW9uIGxhdGVyIG9uLiBMZXQgbWUgdHJhY2UgYmFjayBhbmQgc2VlIGV4YWN0bHkgaG93IHRoYXQgbWFjcm8gZXhwYW5kcyBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGNvZGUgbG9va3MgbGlrZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgYW55IHNpZGUgZWZmZWN0cy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA1LSN1bmRlZiBtdHlwZV9hZGRfY2lkclxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy0jdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE1OiN1bmRlZiBtdHlwZV9kZWxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE2LSN1bmRlZiBtdHlwZV90ZXN0X2NpZHJzXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTAtI2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTE6I2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTItI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNTktI2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2MDojZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjYxLSNkZWZpbmUgbXR5cGVfdGVzdF9jaWRyc1x0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0X2NpZHJzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MzU2PXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjM1NzptdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTQ5MD1tdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjAtXHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NTIxOlx0XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBrKSksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MjM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYyNS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVx0XHR9IGVsc2Uge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XHRcdFx0bXR5cGVfZGVsKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBOVUxMLCBOVUxMLCAwKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD04Njg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlx0XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTMtXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDYzPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA2NDptdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMTI6XHRcdFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVx0XHRcdFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBqKSksIGopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXHRcdFtJUFNFVF9BRERdID0gbXR5cGVfYWRkLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlx0XHRbSVBTRVRfREVMXSA9IG10eXBlX2RlbCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cdFx0W0lQU0VUX1RFU1RdID0gbXR5cGVfdGVzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBgbXR5cGVfZGVsYCBNYWNybyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgbXR5cGVfZGVsYCBpcyBjbGVhcmx5IGEgbWFjcm8sIGRlZmluZWQgYXMgYElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAuICBUaGF0IGBJUFNFVF9UT0tFTmAgbGlrZWx5IGp1c3QgY29uY2F0ZW5hdGVzIGl0cyBhcmd1bWVudHMuICBUaGVyZWZvcmUsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRpbmcgZnVuY3Rpb25zLCBhbmQganVkZ2luZyBieSB0aGUgZXhhbXBsZSBuYW1lcywgdGhleSYjMzk7cmUgcHJvYmFibHkgZGVsZXRpb24gZnVuY3Rpb25zOiBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldF9kZWxgLCBhbmQgc28gb24uIFRoZXkgd2lsbCBiZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBgTVRZUEVgIHBhc3NlZCB0byBpdC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE1UWVBFYCBhY3R1YWxseSAqaXMqIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCB0aGVyZS4gVGhhdCBzaG91bGQgdGVsbCBtZSB0aGUgdHlwZSB0aGVzZSBkZWxldGlvbiBmdW5jdGlvbnMgYXJlIGFjdGluZyB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA1LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwNjojdW5kZWYgTVRZUEVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDctI3VuZGVmIEhPU1RfTUFTS1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzoyMDk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIxMC0jZGVmaW5lIEhPU1RfTUFTS1x0MTI4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIEZ1bmN0aW9ucyBmb3IgUG90ZW50aWFsIFJlc2l6ZSBSZXBsYXkgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSByZW1vdmFsIGZ1bmN0aW9ucyDigJMgYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYW5kIHRoZSBsaWtlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFkZCBgaGFzaF9pcDRfZGVsYCBhbmQgYGhhc2hfaXA2X2RlbGAgdG8gYEZvY3VzU3ltYm9sc2AuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcmVwb3J0IGlzIGFib3V0IGEgcmVzaXplIHJlcGxheS4gUmlnaHQsIGxldCBtZSBjaGVjayBpZiBgbXR5cGVfcmVzaXplYCBpcyBhbHNvIGJlaW5nIGdlbmVyYXRlZC4gWXVwLCBpdCBpcy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbXR5cGVfcmVzaXplYCBpcyBoYW5kbGVkLCBhbmQgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBtdHlwZV9yZXNpemVgIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE4LSN1bmRlZiBtdHlwZV91cmVmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxOTojdW5kZWYgbXR5cGVfcmVzaXplXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjIxOiN1bmRlZiBtdHlwZV9yZXNpemVfYWRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjIyLSN1bmRlZiBtdHlwZV9oZWFkXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjMtI2RlZmluZSBtdHlwZV91cmVmXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY0OiNkZWZpbmUgbXR5cGVfcmVzaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjUtI2RlZmluZSBtdHlwZV9leHRfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjY6I2RlZmluZSBtdHlwZV9yZXNpemVfYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2Ny0jZGVmaW5lIG10eXBlX2hlYWRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjkzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTUtLyogQUREfERFTCBlbnRyaWVzIHNhdmVkIGR1cmluZyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzE2OnN0cnVjdCBtdHlwZV9yZXNpemVfYWQge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTctXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MzI6bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjQ1LVx0c3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDY6XHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02NDctXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTc4Mi1cdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODM6XHRcdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIGxpc3QpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODQtXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAyOC1cdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTAyOTpcdFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAzMC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTAzMTpcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDMyLVx0XHRpZiAoIXgpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cdHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDcyOlx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNzMtXHRpbnQgaSwgaiwgaywgciwgcmV0ID0gLUlQU0VUX0VSUl9FWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXHRcdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExMjM6XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI0LVx0XHRcdGlmICh4KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4OC1cdC51cmVmXHQ9IG10eXBlX3VyZWYsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODk6XHQucmVzaXplXHQ9IG10eXBlX3Jlc2l6ZSxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ5MC1cdC5zYW1lX3NldCA9IG10eXBlX3NhbWVfc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFJlc2l6ZSBJc3N1ZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHByb2JsZW0gaXMgY3JvcHBpbmcgdXAgZHVyaW5nIGEgcmVzaXplIG9wZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX3Jlc2l6ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24gYmVpbmcgYWN0aXZlIHdoZW4gdGhlIGJ1ZyBtYW5pZmVzdHMuIE5vdywgdGhlIGtleSBpcyB3aGVyZSB0aGlzIGBtdHlwZV9yZXNpemVgIGdldHMgY2FsbGVkIGZyb20sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCBmcm9tIGEgcmVwbGF5IHNjZW5hcmlvLiBUaGUgcmVhbCBjdWxwcml0LCB0aG91Z2gsIGlzIGxpa2VseSBpbiBgbXR5cGVfZGVsYCwgc2luY2UgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgKmJ5KiBgbXR5cGVfcmVzaXplYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBtdHlwZV9yZXNpemVgIGFuZCBgbXR5cGVfZGVsYC4gQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUuIEkgbmVlZCB0byBiZSBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLCBhbmQgSSB0aGluayBJIHJlbWVtYmVyIHNlZWluZyBgbXR5cGVfcmVzaXplYCBhcm91bmQgbGluZSA3ODcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdC8qIFRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3RoZXIgd3JpdGVyLiAqL1xuIDc3MTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNldGFibGUsIHQpO1xuIDc3MjpcdFxuIDc3MzpcdFx0LyogR2l2ZSB0aW1lIHRvIG90aGVyIHJlYWRlcnMgb2YgdGhlIHNldCAqL1xuIDc3NDpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNzc1Olx0XG4gNzc2Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzZXQgJXMgcmVzaXplZCBmcm9tICV1ICglcCkgdG8gJXUgKCVwKVxcblwmIzM0Oywgc2V0LVx1MDAzZW5hbWUsXG4gNzc3Olx0XHRcdCBvcmlnLVx1MDAzZWh0YWJsZV9iaXRzLCBvcmlnLCB0LVx1MDAzZWh0YWJsZV9iaXRzLCB0KTtcbiA3Nzg6XHRcdC8qIEFkZC9kZWxldGUgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBTRVQgdGFyZ2V0IGR1cmluZyByZXNpemUuXG4gNzc5Olx0XHQgKiBLZXJuZWwtc2lkZSBhZGQgY2Fubm90IHRyaWdnZXIgYSByZXNpemUgYW5kIHVzZXJzcGFjZSBhY3Rpb25zXG4gNzgwOlx0XHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXG4gNzgxOlx0XHQgKi9cbiA3ODI6XHRcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuIDc4MzpcdFx0XHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcbiA3ODQ6XHRcdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG4gNzg1Olx0XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbiA3ODY6XHRcdFx0fSBlbHNlIHtcbiA3ODc6XHRcdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xuIDc4ODpcdFx0XHR9XG4gNzg5Olx0XHRcdGxpc3RfZGVsKGwpO1xuIDc5MDpcdFx0XHRrZnJlZShsKTtcbiA3OTE6XHRcdH1cbiA3OTI6XHRcdC8qIElmIHRoZXJlJiMzOTtzIG5vYm9keSBlbHNlIHVzaW5nIHRoZSB0YWJsZSwgZGVzdHJveSBpdCAqL1xuIDc5MzpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2b3JpZy1cdTAwM2V1cmVmKSkge1xuIDc5NDpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUYWJsZSBkZXN0cm95IGJ5IHJlc2l6ZSAlcFxcblwmIzM0Oywgb3JpZyk7XG4gNzk1Olx0XHRcdG10eXBlX2FoYXNoX2Rlc3Ryb3koc2V0LCBvcmlnLCBmYWxzZSk7XG4gNzk2Olx0XHR9XG4gNzk3Olx0XG4gNzk4Olx0b3V0OlxuIDc5OTpcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gYG10eXBlX2RlbGAgd2l0aCBhIE5VTEwgYGV4dGAqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgbWFraW5nIGEgY2FsbCB0byBgbXR5cGVfZGVsKHNldCwgJmFtcDt4LSZndDtkLCBOVUxMLCBOVUxMLCAwKTtgLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBgZXh0YCBpcyBiZWluZyBwYXNzZWQgYXMgYE5VTExgLiAgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHdoYXQgdGhhdCBpbXBsaWVzIHdpdGhpbiB0aGUgZnVuY3Rpb24gYG10eXBlX2RlbGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTEyLiBUaGUgYGV4dGAgcGFyYW1ldGVyLCBmcm9tIHdoYXQgSSByZWNhbGwsIHVzdWFsbHkgaGFuZGxlcyBzb21lIHNvcnQgb2YgZXh0ZXJuYWwgZGF0YSBvciBjb250ZXh0IHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHByb2Nlc3MuIFBhc3NpbmcgYE5VTExgIGltcGxpZXMgYSBzcGVjaWZpYywgcGVyaGFwcyBzaW1wbGVyLCBkZWxldGlvbiBzY2VuYXJpby4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpYWwgbG9naWMsIG9yIGxhY2sgdGhlcmVvZiwgaXMgdHJpZ2dlcmVkIGJ5IGEgTlVMTCBgZXh0YCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIElzIHRoZXJlIGEgZGVmYXVsdCBkZWxldGlvbiBwcm9jZWR1cmUgd2l0aG91dCBleHRlcm5hbCBob29rcyB0aGF0IGlzIGluaXRpYXRlZD8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgYXQgcGxheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGJyYW5jaCBvZiBleGVjdXRpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIG15IGFuYWx5c2lzLiBXaGF0IGRvZXMgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBgZXh0ID09IE5VTExgIChvciwgYGV4dCAhPSBOVUxMYCkgZW50YWlsPyBXaGF0IGRvZXMgbGluZSAxMTEyIGFjdHVhbGx5IGRvIGluIHRoaXMgY2FzZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGBOVUxMYCBgZXh0YCBwYXJhbWV0ZXIsIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGludGVudGlvbmFsIG9yIGEgcG90ZW50aWFsIGZsYXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdFx0XHRcdGNvbnRpbnVlO1xuMTEwMTpcdFx0XHRpZiAoU0VUX0VMRU1fRVhQSVJFRChzZXQsIGRhdGEpKVxuMTEwMjpcdFx0XHRcdGdvdG8gb3V0O1xuMTEwMzpcdFxuMTEwNDpcdFx0XHRyZXQgPSAwO1xuMTEwNTpcdFx0XHRjbGVhcl9iaXQoaSwgbi1cdTAwM2V1c2VkKTtcbjExMDY6XHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbjExMDc6XHRcdFx0aWYgKGkgJiM0MzsgMSA9PSBwb3MpXG4xMTA4Olx0XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbjExMDk6XHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4xMTEwOlx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuMTExMTpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuMTExMjpcdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbjExMTM6XHRcdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbjExMTQ6XHQjZW5kaWZcbjExMTU6XHRcdFx0LyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovXG4xMTE2Olx0XHRcdGlmIChleHQpXG4xMTE3Olx0XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4xMTE4Olx0XG4xMTE5Olx0XHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcbjExMjA6XHRcdFx0XHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxuMTEyMTpcdFx0XHRcdCAqIHNhdmUgdmFsdWVzXG4xMTIyOlx0XHRcdFx0ICovXG4xMTIzOlx0XHRcdFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xuMTEyNDpcdFx0XHRcdGlmICh4KSB7XG4xMTI1Olx0XHRcdFx0XHR4LVx1MDAzZWFkID0gSVBTRVRfREVMO1xuMTEyNjpcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNngtXHUwMDNlZCwgdmFsdWUsXG4xMTI3Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4xMTI4Olx0XHRcdFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4xMTI5Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQZXJzaXN0ZW50IEJ1ZyoqCgpPa2F5LCBzbyB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpZiAoZXh0KSBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3RlbXMgZnJvbSBgbXR5cGVfZGVsYCBiZWluZyBjYWxsZWQgZnJvbSBgbXR5cGVfcmVzaXplYCBkdXJpbmcgYSByZXBsYXkgc2NlbmFyaW8uIFNvLCB0aG9zZSB0d28gZnVuY3Rpb25zLCBgbXR5cGVfcmVzaXplYCBhbmQgYG10eXBlX2RlbGAsIGFyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKU2luY2UgdGhlc2UgYXJlIGdlbmVyYXRlZCBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIGBNVFlQRWAgbWFjcm8sIEkmIzM5O20gcmVhbGx5IGxvb2tpbmcgYXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb25zIGxpa2UgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfcmVzaXplYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldDRfcmVzaXplYCwgYGhhc2hfbmV0NF9kZWxgLCBhbmQgdGhlIGxpa2UuIE15IG5leHQgc3RlcCBpcyB0byBsb2NhdGUgYWxsIHRob3NlIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgdGhlIGBNVFlQRWAgbWFjcm8gdGhhdCBlbmQgaW4gYF9yZXNpemVgIGFuZCBgX2RlbGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyBmaWxlcyBsaWtlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIGFuZCBvdGhlciByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBNVFlQRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYxPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzY4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI0PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDMyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDMzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU3RyYXRlZ3kgZm9yIEd1aWRpbmcgdGhlIEZ1enplcioqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoZXNlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbnM6IGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX25ldHBvcnQ0X2RlbGAsIGBoYXNoX25ldHBvcnQ2X2RlbGAsIGFuZCB0aGVpciByZXNpemluZyBjb3VudGVycGFydHMuIFRoZW4gd2UgaGF2ZSB0aGUgcmVzaXppbmcgZnVuY3Rpb25zLCBsaWtlIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9pcDZfcmVzaXplYCwgZXRjLgoKTXkgcGxhbiBpcyB0byBzdHJhdGVnaWNhbGx5IGFkZCBzb21lIG9mIHRoZXNlIHRvIGBGb2N1c1N5bWJvbHNgLiBGb2N1c2luZyBvbiBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX25ldDRfZGVsYCwgYW5kIGBoYXNoX25ldDRfcmVzaXplYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBkaXJlY3QgdGhlIGZ1enplciB0b3dhcmRzIHRoZSByZWxldmFudCBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgaXQgZW5vdWdoIGd1aWRhbmNlLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBJUF9TRVRgLCBgSVBfU0VUX0hBU0hfSVBgLCBhbmQgYElQX1NFVF9IQVNIX05FVGAgc3BlY2lmaWNhbGx5LgoKV2FpdCwgSSBuZWVkIHRvIHJlY2FsaWJyYXRlIGhlcmUuIFRoZSBidWcgcmVwb3J0IHdhcyBhYm91dCBleHRlbnNpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgdGhlIGNvcnJlY3QgY29kZSBwYXRocy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0IG1lIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdgIG9yIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBsb29rIGZvciBzb21ldGhpbmcgbGlrZSBgSVBfU0VUX0VYVGAuIFRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6ZXIgaXMgcHJvcGVybHkgZXhwbG9yaW5nIHRoZSBleHRlbnNpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0lQIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjM3OmNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo2NTpjb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTg0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjkzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTAyLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTIxOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI5LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQwLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNDg6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY5LVx0dHJpc3RhdGUgXCYjMzQ7bGlzdDpzZXQgc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgaXBzZXQgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpBbHJpZ2h0LCBzbyB0aGUgdXNlciBpcyBhc2tpbmcgYWJvdXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGlwc2V0IGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBleHRlbnNpb25zIGFyZW4mIzM5O3QgaGFuZGxlZCBhcyBzZXBhcmF0ZSBjb25maWcgZmlsZXMgb3IgbW9kdWxlcywgdGhleSYjMzk7cmUgYmFrZWQgcmlnaHQgaW50byB0aGUgaXBzZXQgY29yZS4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNsZWFuZXIgb3ZlcmFsbC4gTm93LCBpZiBJIG5lZWQgdG8gY29uZmlybSBob3cgZXh0ZW5zaW9uIGZ1bmN0aW9uYWxpdHkgaXMgbWFuYWdlZCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgQyBjb2RlLiBNeSBpbnR1aXRpb24gcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGZ1bmN0aW9uIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjbGVhbmluZyB1cCBvciBkZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBleHRlbnNpb25zLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBnaXZlcyB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfZXh0X2Rlc3Ryb3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9NDg9bXR5cGVfZXh0X2NsZWFudXAoc3RydWN0IGlwX3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC01NC1cdFx0aWYgKHRlc3RfYml0KGlkLCBtYXAtXHUwMDNlbWVtYmVycykpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6NTU6XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZ2V0X2V4dChzZXQsIG1hcCwgaWQpKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC01Ni19XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTQ3LVx0XHQvKiBFbGVtZW50IGlzIHJlLWFkZGVkLCBjbGVhbnVwIGV4dGVuc2lvbnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxNDg6XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIHgpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE0OS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTc2PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTg2Olx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTg3LVx0c2V0LVx1MDAzZWVsZW1lbnRzLS07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTI2Nj1tdHlwZV9nYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgyLVx0XHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyODM6XHRcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCB4KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0yODQtXHRcdFx0XHRzZXQtXHUwMDNlZWxlbWVudHMtLTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM5MD1tdHlwZV9leHRfY2xlYW51cChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBoYnVja2V0ICpuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzk2LVx0XHRpZiAodGVzdF9iaXQoaSwgbi1cdTAwM2V1c2VkKSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mzk3Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGFoYXNoX2RhdGEobiwgaSwgc2V0LVx1MDAzZWRzaXplKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM5OC19XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00OTA9bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTI1LVx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo1MjY6XHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyNy1cdFx0XHRkJiM0MzsmIzQzOztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1NS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTU2Olx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTctXHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cdFx0aWYgKGV4dClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExNzpcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE0Mz1fX2xpc3Rfc2V0X2RlbF9yY3Uoc3RydWN0IHJjdV9oZWFkICogcmN1KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTQ3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxNDg6XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBlKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMTQ5LVx0a2ZyZWUoZSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYz0yMzY9bGlzdF9zZXRfdWFkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjY5LVx0XHQvKiBVcGRhdGUgZXh0ZW5zaW9ucyAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoyNzA6XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIG4pO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0yNzEtXHRcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTk2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgYG10eXBlX2RlbGAgQnVnKioKCk9rYXksIHNvIHRoZSBidWcmIzM5O3MgbmVzdGxlZCBkZWVwIHdpdGhpbiBgbXR5cGVfZGVsYCBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjaywgYW4gYGlmIChleHQpYCwgYmVmb3JlIHRoZSBjYWxsIHRvIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIFRoYXQgc2hvdWxkIHByZXZlbnQgYW55IG5hc3R5IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2ltaWxhciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiBgZXh0YCBoYXBwZW5zIHRvIGJlIE5VTEwsIHdoaWNoIGlzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBgaXBfc2V0X2V4dF9kZXN0cm95YCB0YWtlcyBgc2V0YCBhbmQgYGRhdGFgIGFzIGFyZ3VtZW50cywgcmlnaHQ/IExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLCBlaXRoZXIgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2Agb3IgcGVyaGFwcyB0aGUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRob3NlIHBhcmFtZXRlcnMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZml4IHByb3Blcmx5IGFkZHJlc3NlcyB0aGUgaXNzdWUuIEkgaGF2ZSBhIGh1bmNoLCBidXQgSSBhbHdheXMgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgd2l0aCB0aGUgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9leHRfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0yODU9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDoyODY6aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTI4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gc3lzdGVtIHByb2dyYW1taW5nIGFuZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBmb2N1c2VkIG9uIG5ldHdvcmtpbmcgY29uY2VwdHM6CgoqKkRpc3NlY3RpbmcgYGlwX3NldF9leHRfZGVzdHJveWAqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVsdmUgaW50byBgaXBfc2V0X2V4dF9kZXN0cm95YC4gTXkgaW1tZWRpYXRlIG1lbnRhbCBmcmFtZXdvcmsga2lja3MgaW4g4oCTIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZXMgdG8gdGhlIHRlYXJkb3duIG9mIGFuIElQIHNldCwgbGlrZWx5IHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAmIzM5O2V4dCYjMzk7IHN1Z2dlc3RzIHNvbWUgZXh0ZW5kZWQgb3IgYWR2YW5jZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHNldC4gJiMzOTtEZXN0cm95JiMzOTsgaW1wbGllcyBtZW1vcnkgZGVhbGxvY2F0aW9uIGFuZCBjbGVhbnVwLiYjMzQ7CgpJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIGNvbnNpZGVyOiB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBJcyBpdCBhIGhhc2ggdGFibGUsIGEgcmFkaXggdHJlZSwgYSBiaXRtYXA/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IHRocmVhZC1zYWZlPyBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYW4gSVAgc2V0IHRoYXQmIzM5O3Mgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBsaWtlbHkgaW5jbHVkZXMgZnJlZWluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCBwb3NzaWJseSBkZWNyZW1lbnRpbmcgcmVmZXJlbmNlIGNvdW50ZXJzLCBhbmQgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy4KClRoaXMgcmVxdWlyZXMgY2FyZWZ1bCBhdHRlbnRpb24uIEltcHJvcGVyIGNsZWFudXAgaW4gdGhpcyBhcmVhIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIG11bHRpcGxlIHJlZmVyZW5jZXMsIGlmIGFueSwgYW5kIGNvbnNpZGVyIHdoYXQgaGFwcGVucyBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLiBJcyBpdCBncmFjZWZ1bD8gRG9lcyBpdCBsb2cgZXJyb3JzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlPyBBbnkgZGV0YWlscyBvbiB0aGVzZSBjb25jZXB0cyB3aWxsIGJlIGltcG9ydGFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyB0aG9yb3VnaGx5LCBzbyB0aGF0IEkgY2FuIGFuYWx5emUsIG1vZGlmeSwgb3IgZXh0ZW5kIHRoZSByZWxhdGVkIGNvZGUgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAyODY6XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpkYXRhKVxuIDI4NzpcdHtcbiAyODg6XHRcdC8qIENoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBlbmFibGVkIGZvciB0aGUgc2V0IGFuZFxuIDI4OTpcdFx0ICogY2FsbCBpdCYjMzk7cyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cbiAyOTA6XHRcdCAqL1xuIDI5MTpcdFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xuIDI5MjpcdFx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmMgPSBleHRfY29tbWVudChkYXRhLCBzZXQpO1xuIDI5MzpcdFxuIDI5NDpcdFx0XHRpcF9zZXRfZXh0ZW5zaW9uc1tJUFNFVF9FWFRfSURfQ09NTUVOVF0uZGVzdHJveShzZXQsIGMpO1xuIDI5NTpcdFx0fVxuIDI5NjpcdH1cbiAyOTc6XHRcbiAyOTg6XHRpbnQgaXBfc2V0X3B1dF9mbGFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfc2V0ICpzZXQpO1xuIDI5OTpcdFxuIDMwMDpcdC8qIE5ldGxpbmsgQ0IgYXJncyAqL1xuIDMwMTpcdGVudW0ge1xuIDMwMjpcdFx0SVBTRVRfQ0JfTkVUID0gMCxcdC8qIG5ldCBuYW1lc3BhY2UgKi9cbiAzMDM6XHRcdElQU0VUX0NCX1BST1RPLFx0XHQvKiBpcHNldCBwcm90b2NvbCAqL1xuIDMwNDpcdFx0SVBTRVRfQ0JfRFVNUCxcdFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBEb3VibGUtRnJlZSBpbiBJUHNldCBFeHRlbnNpb24gSGFuZGxpbmcqKgoKT2theSwgc28gYGlwX3NldF9leHRfZGVzdHJveWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgZGVzdHJveWluZyB0aGUgY29tbWVudCBleHRlbnNpb24uIFRoZSBidWcgcmVwb3J0IGlzIHBvaW50aW5nIHRvIGEgc2NlbmFyaW8gd2hlcmUgYGV4dGAgaXMgTlVMTCwgYnV0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzIGJlaW5nIGNhbGxlZCB3aXRoIGBkYXRhYCBhbnl3YXkuIEhtbSwgdGhhdCYjMzk7cyBub3QgcmlnaHQuIElmIGBleHRgIGlzIE5VTEwsIHRoZW4gc2hvdWxkbiYjMzk7dCB0aGUgY2FsbCB0byBgaXBfc2V0X2V4dF9kZXN0cm95YCBiZSBza2lwcGVkIGFsdG9nZXRoZXI/IEFuZCBub3cgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5ICphZGRzKiB0aGUgYGlmIChleHQpYCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGJsb2NrIGFnYWluLiBBaCwgaXQgbWVudGlvbnMgYSAmIzM0O3Jlc2l6ZSByZXBsYXkuJiMzNDsgT2theSwgdGhhdCYjMzk7cyB0aGUga2V5LiBJZiBgZXh0YCBpcyBOVUxMLCBpdCYjMzk7cyBsaWtlbHkgYSByZXNpemUgcmVwbGF5IHNjZW5hcmlvLiBEdXJpbmcgYSByZXNpemUgcmVwbGF5LCB0aGUgZXh0ZW5zaW9ucyBhcmUgKmFscmVhZHkqIGRlc3Ryb3llZC4gU28sIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpYCBhZ2FpbiB3aXRoaW4gYSByZXNpemUgcmVwbGF5IHdvdWxkIGJlIHRoZSBwcm9ibGVtLiBJdCB3b3VsZCB2ZXJ5IGxpa2VseSBjYXVzZSBhIGRvdWJsZS1mcmVlIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBiZWNhdXNlIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGNhbGxzIHRoZSBgZGVzdHJveWAgZnVuY3Rpb24gb24gdGhlIGNvbW1lbnQgZXh0ZW5zaW9uLCB3aGljaCBJIHN0cm9uZ2x5IHN1c3BlY3QgZnJlZXMgdGhlIGNvbW1lbnQgc3RyaW5nIGl0c2VsZi4gSSBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYGlwX3NldF9jb21tZW50X2ZyZWVgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBteSBodW5jaC4gSSYjMzk7bGwgY2hlY2sgYGlwX3NldF9leHRlbnNpb25zW0lQU0VUX0VYVF9JRF9DT01NRU5UXS5kZXN0cm95YCBkaXJlY3RseS4gWWVwLCBpdCYjMzk7cyBwcm9iYWJseSBgaXBfc2V0X2NvbW1lbnRfZnJlZWAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AsIGFzIEkgc3VzcGVjdGVkLiBFeGNlbGxlbnQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQU0VUX0VYVF9JRF9DT01NRU5UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMz1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyMC1cdH0sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDIxOlx0W0lQU0VUX0VYVF9JRF9DT01NRU5UXSA9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjItXHRcdC50eXBlXHQgPSBJUFNFVF9FWFRfQ09NTUVOVCB8IElQU0VUX0VYVF9ERVNUUk9ZLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI1OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gaXBfc2V0X2NvcmUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhpcyBhcmVhIGlzIHJlbGV2YW50IHRvIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGNvbnRleHQsIGUuZy4sICYjMzQ7dGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2V0IHR5cGVzIGFuZCB0aGUgZ2VuZXJpYyBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLCYjMzQ7ICYjMzQ7dGhlIGhhbmRsaW5nIG9mIHNldCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIHRyYWNraW5nIHVwZGF0ZXMsJiMzNDsgb3IgJiMzNDtob3cgc2V0IGxvb2t1cHMgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUmIzM0O10uIExpbmUgNDIxIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBbc3BlY3VsYXRlIG9uIGxpa2VseSBjb2RlIGJsb2NrIGZ1bmN0aW9uLCBlLmcuICYjMzQ7c2V0IGVsZW1lbnQgYWRkaXRpb24vcmVtb3ZhbCYjMzQ7LCAmIzM0O3NldCBsb29rdXBzJiMzNDssICYjMzQ7aXRlcmF0aW9uIGxvZ2ljJiMzNDtdLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsLCBhcyBjb250ZXh0IGlzIGtleSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGlwc2V0IGxvZ2ljLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiBzcGVjaWZpYyBjb2RlIHN0cnVjdHVyZSB0byBzZWFyY2gsIGUuZy4sICYjMzQ7ZnVuY3Rpb24gY2FsbHMmIzM0OywgJiMzNDtkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24mIzM0OywgJiMzNDttZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24mIzM0O10sIGFuZCBJJiMzOTtsbCBrZWVwIHRoZSBicm9hZGVyIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBpbiBtaW5kLiBTcGVjaWZpY2FsbHksIEkgYW0gaW50ZXJlc3RlZCBpbiBob3cgdGhlIGlwc2V0IGNvcmUgaW50ZXJmYWNlcyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiBbaWRlbnRpZnkgc3BlY2lmaWMgcG90ZW50aWFsIGNvbmNlcm5zLCBlLmcuLCAmIzM0O2NvbmN1cnJlbmN5IGlzc3VlcywmIzM0OyAmIzM0O21lbW9yeSBsZWFrcywmIzM0OyBvciAmIzM0O3BvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyYjMzQ7XSBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdFx0W0lQU0VUX0VYVF9JRF9TS0JJTkZPXSA9IHtcbiA0MTY6XHRcdFx0LnR5cGVcdD0gSVBTRVRfRVhUX1NLQklORk8sXG4gNDE3Olx0XHRcdC5mbGFnXHQ9IElQU0VUX0ZMQUdfV0lUSF9TS0JJTkZPLFxuIDQxODpcdFx0XHQubGVuXHQ9IHNpemVvZihzdHJ1Y3QgaXBfc2V0X3NrYmluZm8pLFxuIDQxOTpcdFx0XHQuYWxpZ25cdD0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9za2JpbmZvKSxcbiA0MjA6XHRcdH0sXG4gNDIxOlx0XHRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdID0ge1xuIDQyMjpcdFx0XHQudHlwZVx0ID0gSVBTRVRfRVhUX0NPTU1FTlQgfCBJUFNFVF9FWFRfREVTVFJPWSxcbiA0MjM6XHRcdFx0LmZsYWdcdCA9IElQU0VUX0ZMQUdfV0lUSF9DT01NRU5ULFxuIDQyNDpcdFx0XHQubGVuXHQgPSBzaXplb2Yoc3RydWN0IGlwX3NldF9jb21tZW50KSxcbiA0MjU6XHRcdFx0LmFsaWduXHQgPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQpLFxuIDQyNjpcdFx0XHQuZGVzdHJveSA9IGlwX3NldF9jb21tZW50X2ZyZWUsXG4gNDI3Olx0XHR9LFxuIDQyODpcdH07XG4gNDI5Olx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2V4dGVuc2lvbnMpO1xuIDQzMDpcdFxuIDQzMTpcdHN0YXRpYyBib29sXG4gNDMyOlx0YWRkX2V4dGVuc2lvbihlbnVtIGlwX3NldF9leHRfaWQgaWQsIHUzMiBmbGFncywgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiA0MzM6XHR7XG4gNDM0Olx0XHRyZXR1cm4gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmZsYWcgP1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIGBpcF9zZXRfY29tbWVudF9mcmVlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgaXBfc2V0X2NvbW1lbnRfZnJlZWAgaXMgdGhlICpkZXN0cm95KiBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBtZW1vcnkgYW5kIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIElQIHNldCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlc2UgY29tbWVudHMgYXJlIGJlaW5nIGZyZWVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlLCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IGFuZCBmaW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTM4Nj1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM4NzppcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTQwMz1jb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dF90eXBlIGlwX3NldF9leHRlbnNpb25zW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyNS1cdFx0LmFsaWduXHQgPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQpLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjQyNjpcdFx0LmRlc3Ryb3kgPSBpcF9zZXRfY29tbWVudF9mcmVlLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBgaXBfc2V0X2NvbW1lbnRfZnJlZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGZyZWVpbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBjb21tZW50cyBpbiBhbiBJUCBzZXQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3M/IEVycm9yIGhhbmRsaW5nPyBQYXJ0IG9mIGEgYnJvYWRlciBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHNldC4KCkkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24sIGF0IGEgbWluaW11bSwgdG8gaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbi4gTGlrZWx5IGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGNvbW1lbnQgc3RyaW5nIGl0c2VsZi4gSSBhbHNvIGFudGljaXBhdGUgaXQgaGFuZGxpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyBpZiB0aGUgY29tbWVudCBpcyBOVUxMPyBEb2VzIGl0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIG1lbW9yeSBiZWluZyBmcmVlZCBpcyBhY3R1YWxseSB2YWxpZD8gQW5kIHdoYXQgYWJvdXQgY29uY3VycmVuY3k/IElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgYSByYWNlIGNvbmRpdGlvbiBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBzZXQgb3BlcmF0aW9ucz8gVGhvc2UgYXJlIHRoZSB0aGluZ3MgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBvZmYgdGhlIGJhdCwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY2xlYW5lZCB1cCwgaG93IGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLiBGcm9tIGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NjpcdHN0YXRpYyB2b2lkXG4gMzg3Olx0aXBfc2V0X2NvbW1lbnRfZnJlZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnB0cilcbiAzODg6XHR7XG4gMzg5Olx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQgPSBwdHI7XG4gMzkwOlx0XHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjO1xuIDM5MTpcdFxuIDM5MjpcdFx0YyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiAzOTM6XHRcdGlmICh1bmxpa2VseSghYykpXG4gMzk0Olx0XHRcdHJldHVybjtcbiAzOTU6XHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMTtcbiAzOTY6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIDM5NzpcdFx0a2ZyZWVfcmN1KGMsIHJjdSk7XG4gMzk4Olx0fVxuIDM5OTpcdFxuIDQwMDpcdHR5cGVkZWYgdm9pZCAoKmRlc3Ryb3llcikoc3RydWN0IGlwX3NldCAqLCB2b2lkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtdHlwZV9kZWxgIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgRG91YmxlLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZS4gSXQgKnNlZW1zKiBsaWtlIGZyZWVpbmcgdGhlIGNvbW1lbnQgc3RyaW5nIGlzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgc2V0LSZndDtleHRfc2l6ZWAgdG8gYmUgZGVjcmVtZW50ZWQgdHdpY2UgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2VzbiYjMzk7dCBoYXBwZW4uIE9oIHdhaXQsIGByY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC0mZ3Q7YywgTlVMTCk7YCBpcyBpbiB0aGVyZS4gUmlnaHQsIHNvIGlmIGl0JiMzOTtzIGNhbGxlZCBhIHNlY29uZCB0aW1lLCBgY29tbWVudC0mZ3Q7Y2Agd2lsbCBiZSBOVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZWFybHksIG1pdGlnYXRpbmcgdGhhdCByaXNrLiBQaGV3LCB0aGF0JiMzOTtzIG9uZSBjaGVjayBkb25lLgoKSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSBzZWUgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggdGhlIGBkYXRhYCBmcm9tIHRoZSBoYXNoIHRhYmxlLiBCdXQgd2FpdCwgaXQmIzM5O3MgYWxzbyBjYWxsZWQgd2l0aCBgJmFtcDt4LSZndDtkYCBpbiBgbXR5cGVfcmVzaXplYCEgTGV0IG1lIGdyYWIgdGhhdCBjb2RlIGJsb2NrLi4uCgpgYGBjCgkJaWYgKHgtJmd0O2FkID09IElQU0VUX0FERCkgewoJCQltdHlwZV9hZGQoc2V0LCAmYW1wO3gtJmd0O2QsICZhbXA7eC0mZ3Q7ZXh0LCAmYW1wO3gtJmd0O21leHQsIHgtJmd0O2ZsYWdzKTsKCQl9IGVsc2UgewoJCQltdHlwZV9kZWwoc2V0LCAmYW1wO3gtJmd0O2QsIE5VTEwsIE5VTEwsIDApOwoJCX0KYGBgCgpPa2F5LCBzbyBgJmFtcDt4LSZndDtkYCBpcyB0aGUgZWxlbWVudCBkYXRhIHNhdmVkIGR1cmluZyBhIHJlc2l6ZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGAgaXMsIHNwZWNpZmljYWxseSBob3cgYHgtJmd0O2RgIGlzIHBvcHVsYXRlZC4gSGFuZyBvbiwgSSBzZWUgd2hlcmUgYHhgIGlzIGFsbG9jYXRlZC4gTGV0JiMzOTtzIHNlZToKCmBgYGMKCQkJaWYgKHQtJmd0O3Jlc2l6aW5nICZhbXA7JmFtcDsgZXh0ICZhbXA7JmFtcDsgZXh0LSZndDt0YXJnZXQpIHsKCQkJCS8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsCgkJCQkgKiBzYXZlIHZhbHVlcwoJCQkJICovCgkJCQl4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7CgkJCQlpZiAoeCkgewoJCQkJCXgtJmd0O2FkID0gSVBTRVRfREVMOwoJCQkJCW1lbWNweSgmYW1wO3gtJmd0O2QsIHZhbHVlLAoJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTsKCQkJCQl4LSZndDtmbGFncyA9IGZsYWdzOwoJCQkJfQpgYGAKCldhaXQgYSBzZWNvbmQuLi5gbWVtY3B5KCZhbXA7eC0mZ3Q7ZCwgdmFsdWUsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO2Agb25seSBjb3BpZXMgdGhlIGtleSBkYXRhLiBUaGUgZWxlbWVudCBrZXksIGJ1dCBub3QgYW55IGV4dGVuc2lvbnMhIFRoaXMgbWVhbnMgd2UmIzM5O3JlICpvbmx5KiBjb3B5aW5nIGBtdHlwZV9lbGVtYCwgdGhlIGtleSwgbm90IHRoZSBleHRlbnNpb25zLi4uIEdvb2QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG10eXBlX2VsZW1gIGluIHBhcnRpY3VsYXIgY29udGFpbnMganVzdCB0aGUga2V5LiBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSB3aGF0IGZpZWxkcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHZlcnkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjYtI2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI3OiNkZWZpbmUgbXR5cGVfZWxlbVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2VsZW0pXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MTk2PXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6MTk3Om10eXBlX2lzX2ZpbGxlZChjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqeClcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTczPXN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwMC0jdW5kZWYgbXR5cGVfZGF0YV9uZXh0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwMTojdW5kZWYgbXR5cGVfZWxlbVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDItXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kYXRhX25leHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kYXRhX25leHQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI0NjojZGVmaW5lIG10eXBlX2VsZW1cdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9lbGVtKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDctXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzYtI2lmbmRlZiBIS0VZX0RBVEFMRU5cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mjc3OiNkZWZpbmUgSEtFWV9EQVRBTEVOXHRcdHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSlcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc4LSNlbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MjkzPXN0cnVjdCBodHlwZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTEtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzEyOlx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzEzLX07XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTY9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTgtXHRlbnVtIGlwc2V0X2FkdCBhZDtcdC8qIEFERHxERUwgZWxlbWVudCAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTk6XHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1x0LyogRWxlbWVudCB2YWx1ZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMjAtXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XHQvKiBFeHRlbnNpb25zIGZvciBBREQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM4MD1tdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM4Ni0jZGVmaW5lIGFoYXNoX2RhdGEobiwgaSwgZHNpemUpXHRcXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozODc6XHQoKHN0cnVjdCBtdHlwZV9lbGVtICopKChuKS1cdTAwM2V2YWx1ZSAmIzQzOyAoKGkpICogKGRzaXplKSkpKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zODgtXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD00OTA9bXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkyLVx0c3RydWN0IGhidWNrZXQgKm4sICp0bXA7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjQ5MzpcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC00OTQtXHR1MzIgaSwgaiwgZDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYzMj1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzktXHR1OCBmbGFncztcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjQwOlx0c3RydWN0IG10eXBlX2VsZW0gKnRtcDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjQxLSNlbmRpZlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDI6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjQzOlx0c3RydWN0IG10eXBlX2VsZW0gKmQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NC1cdHN0cnVjdCBoYnVja2V0ICpuLCAqbTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTgzNT1tdHlwZV9leHRfc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiAqZWxlbWVudHMsIHNpemVfdCAqZXh0X3NpemUpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04MzktXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODQwOlx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0MS1cdHUzMiBpLCBqLCByO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODcyLVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODczOlx0Y29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmQgPSB2YWx1ZTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODc0Olx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg3NS1cdHN0cnVjdCBoYnVja2V0ICpuLCAqb2xkID0gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMDAtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMDE6XHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMDItb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDM1LVx0XHR4LVx1MDAzZWFkID0gSVBTRVRfQUREO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDM2Olx0XHRtZW1jcHkoXHUwMDI2eC1cdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzctXHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWV4dCwgZXh0LCBzaXplb2Yoc3RydWN0IGlwX3NldF9leHQpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTEwNjQ9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY4LVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA2OTpcdGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwNzA6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cdHN0cnVjdCBoYnVja2V0ICpuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyNi1cdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTI3Olx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI4LVx0XHRcdFx0eC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTE3Nz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExNzg6bXR5cGVfZGF0YV9tYXRjaChzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE3OS1cdFx0IHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExOTE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTkyOm10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5My1cdFx0IGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTk4LVx0c3RydWN0IGhidWNrZXQgKm47XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTk6XHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIwMC0jaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIwMTpcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTIwMi1cdGludCByZXQsIGksIGogPSAwLCBrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTI1MD1tdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU0LVx0c3RydWN0IGh0YWJsZSAqdDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NTpcdHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEyNTYtXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NzpcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU4LVx0aW50IGksIHJldCA9IDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzkwPW10eXBlX2xpc3QoY29uc3Qgc3RydWN0IGlwX3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTM5NS1cdGNvbnN0IHN0cnVjdCBoYnVja2V0ICpuO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMzk2Olx0Y29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmU7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOTctXHR1MzIgZmlyc3QgPSBjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX0FSRzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQc2V0IEhhc2ggRGVsZXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgZml4IGhlcmUuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG10eXBlX2VsZW1gIGlzLCBhcyBleHBlY3RlZCwganVzdCB0aGUga2V5LiBUaGUgZXh0ZW5zaW9ucyBhcmUgc3RvcmVkIHJpZ2h0IGFmdGVyIHRoZSBrZXkgaW4gdGhlIGhhc2ggYnVja2V0LiBUaGUgYGFoYXNoX2RhdGFgIGZ1bmN0aW9uIGdyYWJzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbmNsdWRpbmcgdGhvc2UgZXh0ZW5zaW9ucywgYW5kIHRoYXQmIzM5O3MgY3J1Y2lhbC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IGluIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHksIGBkYXRhID0gYWhhc2hfZGF0YShuLCBpLCBzZXQtJmd0O2RzaXplKTtgIGNvbmZpcm1zIHRoaXMuCgpUaGUga2V5IHBvaW50IGlzIHRoaXMgY29uZGl0aW9uYWw6IGBpZiAoZXh0KSBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtgLiBXaGVuIGNhbGxlZCBmcm9tIGBtdHlwZV9yZXNpemVgLCB0aGUgYGV4dGAgdmFyaWFibGUgaXMgTlVMTCwgd2hpY2ggbWVhbnMgYGlwX3NldF9leHRfZGVzdHJveWAgaXMgKm5vdCogY2FsbGVkLiBUaGlzIGlzIHRoZSBmaXgsIGFzIHRoZSBleHRlbnNpb25zIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcgcmVzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4KCk5vdywgbGV0IG1lIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydHMgY2FwdHVyZSB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aHMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWZpYyBleHRlbnNpb24gY29uZmlncyB0byB3b3JyeSBhYm91dCwgc28gdGhvc2UgdGhyZWUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOZXh0LCBJIG5lZWQgdG8gbGlzdCB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBhbmQgYGhhc2hfaXA2X3Jlc2l6ZWAgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRlZCBmb3IgYWxsIGhhc2ggdHlwZXMsIHNvIHRoYXQgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcuCgpJIHNob3VsZCBhZGQgYWxsIHRob3NlIGZ1bmN0aW9ucyB0byB0aGUgbGlzdDsgYGhhc2hfaXA0X2RlbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogaXQgaWYgaXQmIzM5O3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4gU3l6a2FsbGVyIGlzIGNvdmVyYWdlIGZvY3VzZWQsIHNvIGlmIEkgaW5jbHVkZSB0aGVzZSBzeW1ib2xzLCBpdCB3aWxsIHRyeSB0byBoaXQgdGhlbS4gTGV0IG1lIGNvbmZpcm0gdGhhdCBgaGFzaF9pcDRfZGVsYCBpcyBpbmRlZWQgZ2VuZXJhdGVkLCBieSBjaGVja2luZyB0aGUgc291cmNlIGZpbGUuIEl0JiMzOTtzIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIG5vdyB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfaXA0X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIE1hY3JvLUdlbmVyYXRlZCBTeW1ib2xzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoeSBpc24mIzM5O3QgYGhhc2hfaXA0X2RlbGAgc2hvd2luZyB1cCBpbiBteSBgZ3JlcGAgc2VhcmNoPyBPaCByaWdodCwgaXQmIzM5O3MgYSBtYWNybyEgTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYCNkZWZpbmUgbXR5cGVfZGVsIElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAgYW5kIHRoZW4gYCAjZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpIGEjI2JgLiBTbywgYE1UWVBFYCBpcyBgaGFzaF9pcDRgIGFuZCBgX2RlbGAgaXMsIHdlbGwsIGBfZGVsYC4gVGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBnZW5lcmF0ZSBgaGFzaF9pcDRfZGVsYC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBkZWZpbml0ZWx5IGJlIGluIHRoZSBjb21waWxlZCBiaW5hcnkuIEdvdCBpdC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIExldCBtZSB0aGluay4uLiBgaXBfc2V0X2V4dF9kZXN0cm95YC4gV2FpdCwgdGhhdCYjMzk7cyBhbiBgaW5saW5lYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaGAuIFNpbmNlIGl0JiMzOTtzIGlubGluZSwgaXQgcHJvYmFibHkgd29uJiMzOTt0IGJlIGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBjb21waWxlZCBvdXRwdXQuIFdoYXQgYWJvdXQgYGlwX3NldF9jb21tZW50X2ZyZWVgPyBBaCwgdGhhdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYC4gSSBjb3VsZCBhZGQgdGhhdCB0byBgRm9jdXNTeW1ib2xzYCwgYnV04oCmCgpIb2xkIG9uLiBUaGUgYnVnIGlzbiYjMzk7dCBzcGVjaWZpY2FsbHkgYWJvdXQgY29tbWVudHM7IGl0JiMzOTtzIGFib3V0IGV4dGVuc2lvbnMgaW4gZ2VuZXJhbCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUgbGlzdCB0aGUgZXh0ZW5zaW9uczogYGlwX3NldF9za2JpbmZvYCwgYGlwX3NldF9jb3VudGVyYCwgYGlwX3NldF90aW1lb3V0YC4gQnV0LCBkYW1uIGl0LCBgaXBfc2V0X2V4dF9kZXN0cm95YCBvbmx5IGZyZWVzIGNvbW1lbnRzLiBTbyBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byByZXZpc2l0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGF0IGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg1Olx0c3RhdGljIGlubGluZSB2b2lkXG4gMjg2Olx0aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcbiAyODc6XHR7XG4gMjg4Olx0XHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcbiAyODk6XHRcdCAqIGNhbGwgaXQmIzM5O3MgZGVzdHJveSBmdW5jdGlvbiBmb3IgaXRzIGV4dGVuc2lvbiBwYXJ0IGluIGRhdGEuXG4gMjkwOlx0XHQgKi9cbiAyOTE6XHRcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpIHtcbiAyOTI6XHRcdFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcbiAyOTM6XHRcbiAyOTQ6XHRcdFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcbiAyOTU6XHRcdH1cbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcbiAyOTk6XHRcbiAzMDA6XHQvKiBOZXRsaW5rIENCIGFyZ3MgKi9cbiAzMDE6XHRlbnVtIHtcbiAzMDI6XHRcdElQU0VUX0NCX05FVCA9IDAsXHQvKiBuZXQgbmFtZXNwYWNlICovXG4gMzAzOlx0XHRJUFNFVF9DQl9QUk9UTyxcdFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cbiAzMDQ6XHRcdElQU0VUX0NCX0RVTVAsXHRcdC8qIGR1bXAgc2luZ2xlIHNldC9hbGwgc2V0cyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI3OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERvdWJsZSBGcmVlIEJ1ZyBpbiBpcHNldCBSZXNpemUqKgoKT2theSwgc28gdGhlIGNvZGUgb25seSBjYWxscyBgZGVzdHJveWAgZm9yIGNvbW1lbnRzLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gYSBkb3VibGUtZnJlZSBzY2VuYXJpbyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY29tbWVudCBzdHJpbmcgZHVyaW5nIHJlc2l6ZSByZXBsYXkuIFRvIHJlcHJvZHVjZSB0aGlzLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN0ZXBzOiBhbiBpcHNldCB3aXRoIHRoZSBjb21tZW50IGV4dGVuc2lvbiBlbmFibGVkLCBhZGQgYW4gZWxlbWVudCB3aXRoIGEgY29tbWVudCwgdHJpZ2dlciBhIHJlc2l6ZSBvZiB0aGUgaXBzZXQsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGhhdmUgYSBjb25jdXJyZW50IGRlbGV0ZSBvZiB0aGUgZWxlbWVudCBoYXBwZW4gZHVyaW5nIHRoYXQgcmVzaXplIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHJlc2l6ZSByZXBsYXkgaGFuZGxlcyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgbWVudGlvbnM6CgpgYGBjCgkJLyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovCgkJaWYgKGV4dCkKCQkJaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7CmBgYAoKYW5kIHRoZSBgbXR5cGVfcmVzaXplYCBmdW5jdGlvbiB0aGF0IHJlcGxheXMgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZToKCmBgYGMKCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHQsICZhbXA7b3JpZy0mZ3Q7YWQpIHsKCQkJeCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7CgkJCWlmICh4LSZndDthZCA9PSBJUFNFVF9BREQpIHsKCQkJCW10eXBlX2FkZChzZXQsICZhbXA7eC0mZ3Q7ZCwgJmFtcDt4LSZndDtleHQsICZhbXA7eC0mZ3Q7bWV4dCwgeC0mZ3Q7ZmxhZ3MpOwoJCQl9IGVsc2UgewoJCQkJbXR5cGVfZGVsKHNldCwgJmFtcDt4LSZndDtkLCBOVUxMLCBOVUxMLCAwKTsKCQkJfQoJCQlsaXN0X2RlbChsKTsKCQkJa2ZyZWUobCk7CgkJfQpgYGAKCk9rYXksIHNvIGl0IHJlcGxheXMgQUREIGFuZCBERUwgb3BlcmF0aW9ucyByZWNvcmRlZCBkdXJpbmcgdGhlIHJlc2l6ZSBpbiBgb3JpZy0mZ3Q7YWRgLiBJZiBhIERFTCBoYXBwZW5lZCAqZHVyaW5nKiB0aGUgcmVzaXplLCBgbXR5cGVfZGVsYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHJlcGxheS4gVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggYGV4dCA9PSBOVUxMYC4KCkJlZm9yZSB0aGUgcGF0Y2gsIGBtdHlwZV9kZWxgIHdvdWxkIHRoZW4gbmFpdmVseSBjYWxsIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIEFuZCB0aGF0IGlzIHRoZSBwcm9ibGVtLiBgZGF0YWAgaXMgdGhlIGVsZW1lbnQgZnJvbSB0aGUgKm5ldyogaGFzaCB0YWJsZSBgdGAsIHRoYXQgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZGVsZXRlZCAod2l0aCB0aGUgY29tbWVudCkgZHVyaW5nIHRoZSByZXNpemUgd2FzIGNvcGllZCB0by4gSG93ZXZlciwgaWYgdGhlIGVsZW1lbnQgd2FzIGRlbGV0ZWQgZHVyaW5nIHJlc2l6ZSwgaXQgd2FzIGluIHRoZSAqb2xkKiBoYXNoIHRhYmxlIGBvcmlnYC4KCkR1cmluZyByZXNpemUsIHRoZSBvcmlnaW5hbCBlbGVtZW50cyBmcm9tIHRoZSBvbGQgaGFzaCB0YWJsZSwgYG9yaWdgLCBhcmUgY29waWVkIHRvIHRoZSBuZXcgaGFzaCB0YWJsZSwgYHRgLiBUaGVuLCB0aGlzIHJlcGxheXMgdGhlIG9wZXJhdGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZS4gSWYgYSBkZWxldGUgaXMgcmVwbGF5ZWQsIHRoYXQgZGVsZXRlIHRhcmdldHMgdGhlIGVsZW1lbnQgaW4gYHRgLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbS4gSXQgaXMgc3VwcG9zZWQgdG8gZGVsZXRlIGZyb20gYHRgLgoKRHVyaW5nIHRoZSBkZWxldGUgZnJvbSBgdGAsIGl0IGNhbGxzIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAuIEJ1dCB3YWl0Li4uIHRoZSBjb21tZW50IHN0YXRlcyB0aGF0ICYjMzQ7dGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZCYjMzQ7LiBTbywgKndoZW4qIHdlcmUgdGhleSBkZXN0cm95ZWQ/CgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBtdHlwZV9kZWxgIHdoZW4gaXQmIzM5O3MgY2FsbGVkICpkdXJpbmcqIHRoZSByZXNpemUgb3BlcmF0aW9uIGl0c2VsZiwgdG8gdHJhY2sgd2hlbiB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGRlc3Ryb3llZC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgcmFjZSBjb25kaXRpb24gb3IgYSBsb2dpYyBmbGF3IHdoZXJlIHRoZSBleHRlbnNpb25zIGFyZSBjbGVhbmVkIHVwIGluIG9uZSBwYXJ0IG9mIHRoZSByZXNpemUgcHJvY2VzcyBidXQgbm90IGhhbmRsZWQgY29ycmVjdGx5IGR1cmluZyB0aGUgc3Vic2VxdWVudCByZXBsYXkuIFRoZSByZXBsYXkgbWlnaHQgYmUgY2xlYW5pbmcgdXAgYSBzdHJ1Y3R1cmUgYWxyZWFkeSBjbGVhbmVkIHVwLiBUaGF0IGRvdWJsZS1mcmVlIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTE1Olx0XHRcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xuMTExNjpcdFx0XHRpZiAoZXh0KVxuMTExNzpcdFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuMTExODpcdFxuMTExOTpcdFx0XHRpZiAodC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0KSB7XG4xMTIwOlx0XHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcbjExMjE6XHRcdFx0XHQgKiBzYXZlIHZhbHVlc1xuMTEyMjpcdFx0XHRcdCAqL1xuMTEyMzpcdFx0XHRcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcbjExMjQ6XHRcdFx0XHRpZiAoeCkge1xuMTEyNTpcdFx0XHRcdFx0eC1cdTAwM2VhZCA9IElQU0VUX0RFTDtcbjExMjY6XHRcdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxuMTEyNzpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xuMTEyODpcdFx0XHRcdFx0eC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuMTEyOTpcdFx0XHRcdH1cbjExMzA6XHRcdFx0fVxuMTEzMTpcdFx0XHRmb3IgKDsgaSBcdTAwM2MgcG9zOyBpJiM0MzsmIzQzOykge1xuMTEzMjpcdFx0XHRcdGlmICghdGVzdF9iaXQoaSwgbi1cdTAwM2V1c2VkKSlcbjExMzM6XHRcdFx0XHRcdGsmIzQzOyYjNDM7O1xuMTEzNDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzk1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25jdXJyZW50IEVsZW1lbnQgTW9kaWZpY2F0aW9uIER1cmluZyBSZXNpemluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIGB0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0YCBpcyB0cnVlLCB0aGVuIHdlJiMzOTt2ZSBnb3QgYSBrZXJuZWwtc2lkZSBkZWxldGUgaGFwcGVuaW5nIGNvbmN1cnJlbnRseSB3aXRoIGEgcmVzaXplIG9wZXJhdGlvbi4gQnV0IHdoYXQgYWJvdXQgdXNlci1zaWRlIGRlbGV0ZXM/IEkgbmVlZCB0byBjb25zaWRlciBib3RoIHBvc3NpYmlsaXRpZXMuCgpMb29raW5nIGF0IGBtdHlwZV9yZXNpemVgLCB0aGUgY29tbWVudCBzcGVjaWZpY2FsbHkgc2F5cyB0aGF0IGtlcm5lbC1zaWRlIGFkZHMvZGVsZXRlcyBhcmUgdGhlIG9ubHkgYWN0aW9ucyB0aGF0IGNhbiBoYXBwZW4gZHVyaW5nIHJlc2l6ZS4gVXNlci1zcGFjZSBhY3Rpb25zIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBtdXRleCwgc28gdGhleSBzaG91bGRuJiMzOTt0IGJlIGNvbmN1cnJlbnQuIFRoaXMgY2xhcmlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIGEga2VybmVsLXNpZGUgREVMIGR1cmluZyBhIHJlc2l6ZSB3aWxsIHRyaWdnZXIgYG10eXBlX2RlbGAuCgpJbnNpZGUgYG10eXBlX2RlbGAsIGl0JiMzOTtzIGdvaW5nIHRvIGZpbmQgdGhlIGVsZW1lbnQgaW4gYG9yaWdgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGB0YCAodGhlIHRhcmdldCB0YWJsZSBiZWluZyByZXNpemVkKSBpc24mIzM5O3QgeWV0IHB1Ymxpc2hlZC4gSXQgd2lsbCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYG9yaWdgLCBhbmQgdGhlbiBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50ICppbiBgb3JpZ2AqLiBDcnVjaWFsbHksIGl0IHNhdmVzIHRoZSBERUwgb3BlcmF0aW9uIGluIGBvcmlnLSZndDthZGAuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzOiBhZnRlciBgbXR5cGVfcmVzaXplYCBmaW5pc2hlcyBjb3B5aW5nIGV2ZXJ5dGhpbmcgZnJvbSBgb3JpZ2AgdG8gYHRgLCB3aGF0IGhhcHBlbnMgdG8gdGhhdCBkZWxldGVkIGVsZW1lbnQ/IElmIHRoZSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgLCB3aWxsIGl0IGJlIGNvcGllZCB0byBgdGAgZHVyaW5nIHRoZSByZXNpemUgcHJvY2Vzcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgY29weSBsb29wIHdpdGhpbiBgbXR5cGVfcmVzaXplYCB0byBjb25maXJtIHRoZSBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNsZWFyZWQgYml0IGluIGBvcmlnYCBwcmV2ZW50cyB0aGUgZWxlbWVudCBmcm9tIGJlaW5nIGNvcGllZCBvciBpZiBpdCYjMzk7cyBoYW5kbGVkIGRpZmZlcmVudGx5LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gNjkxOlx0XHRwcl9kZWJ1ZyhcJiMzNDthdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcblwmIzM0OyxcbiA2OTI6XHRcdFx0IHNldC1cdTAwM2VuYW1lLCBvcmlnLVx1MDAzZWh0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7XG4gNjkzOlx0XHRmb3IgKHIgPSAwOyByIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhvcmlnLVx1MDAzZWh0YWJsZV9iaXRzKTsgciYjNDM7JiM0MzspIHtcbiA2OTQ6XHRcdFx0LyogRXhwaXJlIG1heSByZXBsYWNlIGEgaGJ1Y2tldCB3aXRoIGFub3RoZXIgb25lICovXG4gNjk1Olx0XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiA2OTY6XHRcdFx0Zm9yIChpID0gYWhhc2hfYnVja2V0X3N0YXJ0KHIsIG9yaWctXHUwMDNlaHRhYmxlX2JpdHMpO1xuIDY5NzpcdFx0XHQgICAgIGkgXHUwMDNjIGFoYXNoX2J1Y2tldF9lbmQociwgb3JpZy1cdTAwM2VodGFibGVfYml0cyk7IGkmIzQzOyYjNDM7KSB7XG4gNjk4Olx0XHRcdFx0biA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaGJ1Y2tldChvcmlnLCBpKSk7XG4gNjk5Olx0XHRcdFx0aWYgKCFuKVxuIDcwMDpcdFx0XHRcdFx0Y29udGludWU7XG4gNzAxOlx0XHRcdFx0cG9zID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuLVx1MDAzZXBvcyk7XG4gNzAyOlx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcG9zOyBqJiM0MzsmIzQzOykge1xuIDcwMzpcdFx0XHRcdFx0aWYgKCF0ZXN0X2JpdF9hY3F1aXJlKGosIG4tXHUwMDNldXNlZCkpXG4gNzA0Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDcwNTpcdFx0XHRcdFx0ZGF0YSA9IGFoYXNoX2RhdGEobiwgaiwgZHNpemUpO1xuIDcwNjpcdFx0XHRcdFx0aWYgKFNFVF9FTEVNX0VYUElSRUQoc2V0LCBkYXRhKSlcbiA3MDc6XHRcdFx0XHRcdFx0Y29udGludWU7XG4gNzA4Olx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuIDcwOTpcdFx0XHRcdFx0LyogV2UgaGF2ZSByZWFkZXJzIHJ1bm5pbmcgcGFyYWxsZWwgd2l0aCB1cyxcbiA3MTA6XHRcdFx0XHRcdCAqIHNvIHRoZSBsaXZlIGRhdGEgY2Fubm90IGJlIG1vZGlmaWVkLlxuIDcxMTpcdFx0XHRcdFx0ICovXG4gNzEyOlx0XHRcdFx0XHRmbGFncyA9IDA7XG4gNzEzOlx0XHRcdFx0XHRtZW1jcHkodG1wLCBkYXRhLCBkc2l6ZSk7XG4gNzE0Olx0XHRcdFx0XHRkYXRhID0gdG1wO1xuIDcxNTpcdFx0XHRcdFx0bXR5cGVfZGF0YV9yZXNldF9mbGFncyhkYXRhLCBcdTAwMjZmbGFncyk7XG4gNzE2Olx0I2VuZGlmXG4gNzE3Olx0XHRcdFx0XHRrZXkgPSBIS0VZKGRhdGEsIGgtXHUwMDNlaW5pdHZhbCwgaHRhYmxlX2JpdHMpO1xuIDcxODpcdFx0XHRcdFx0bSA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaGJ1Y2tldCh0LCBrZXkpKTtcbiA3MTk6XHRcdFx0XHRcdG5yID0gYWhhc2hfcmVnaW9uKGtleSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpczogRG91YmxlIEZyZWUgaW4gQ29uY3VycmVudCBERUwgYW5kIFJlc2l6ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi0mZ3Q7dXNlZCkpIGNvbnRpbnVlO2AgaXMga2V5LiBJdCBtZWFucyB0aGF0IGlmIGEgYml0IHdhcyBjbGVhcmVkIGluIGBvcmlnYCBkdWUgdG8gYSBjb25jdXJyZW50IERFTCBvcGVyYXRpb24gKmJlZm9yZSogaXQgd2FzIGNvcGllZCB0byBgdGAsIHdlICpkb24mIzM5O3QqIGNvcHkgdGhhdCBlbGVtZW50LiBCdXQgd2h5IGRvZXMgYG10eXBlX3Jlc2l6ZWAgcmVwbGF5IHRoZSBERUwgb24gYHRgIGlmIGl0IHdhc24mIzM5O3QgY29waWVkPyBBaCwgaWYgaXQmIzM5O3Mgbm90IGNvcGllZCB0byBgdGAsIGBtdHlwZV9kZWxgIG9uIGB0YCB3b24mIzM5O3QgZmluZCB0aGUgZWxlbWVudC4gU28sIGxldCYjMzk7cyBjb25maXJtIHRoYXQuCgpMb29raW5nIGF0IHRoZSBgbXR5cGVfZGVsYCByZXBsYXkgbG9vcDogaWYgYW4gZWxlbWVudCB3YXNuJiMzOTt0IGNvcGllZCwgdGhlIGBtdHlwZV9kZWxgIGNhbGwgd2lsbCBsaWtlbHkgcmV0dXJuIGAtRU5PRU5UYCBvciBhIHNpbWlsYXIgZXJyb3IuIEJ1dCB3YWl0LCB3aGF0IGlmIHRoZSBERUwgaGFwcGVuZWQgKmFmdGVyKiB0aGUgYnVja2V0IHdhcyBjb3BpZWQgdG8gYHRgPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0ISBJZiB0aGUgY29weSBvY2N1cnJlZCBiZWZvcmUgdGhlIGNvbmN1cnJlbnQgREVMLCB0aGUgZWxlbWVudCAqaXMqIGNvcGllZCB0byBgdGAuIFRoZW4sIHRoZSBERUwgY2xlYXJzIHRoZSBiaXQgaW4gYG9yaWdgIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGBvcmlnYC4KClRoZW4gdGhlIHJlcGxheSBjYWxscyBgbXR5cGVfZGVsYCBvbiBgdGAuIGBtdHlwZV9kZWxgICpmaW5kcyogdGhlIGVsZW1lbnQgaW4gYHRgLCBjbGVhcnMgdGhlIGJpdCBpbiBgdGAsIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGB0YCEgQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogdGhlIGVsZW1lbnQgaW4gYHRgIGlzIGEgY29weSBvZiB0aGUgZWxlbWVudCBpbiBgb3JpZ2AuIFRoaXMgbWVhbnMgYGlwX3NldF9leHRfZGVzdHJveWAgaXMgY2FsbGVkICp0d2ljZSogb24gdGhlICpzYW1lKiBleHRlbnNpb24gZGF0YSwgbGlrZSB0aGUgc2FtZSBjb21tZW50IHBvaW50ZXIhIEJpbmdvISBUaGlzIGlzIHRoZSBkb3VibGUgZnJlZSEKClRoZSBjb21tZW50IHN0cmluZyBpcyBmcmVlZCB3aGVuIHRoZSBpbml0aWFsIGNvbmN1cnJlbnQgREVMIGhhcHBlbnMgb24gYG9yaWdgLiBUaGVuLCB0aGUgcmVwbGF5IGZyZWVzIGl0IGFnYWluIG9uIGB0YCwgbGVhZGluZyB0byB0aGUgZG91YmxlIGZyZWUuIE15IGZpeCB0byBgbXR5cGVfZGVsYCwgaXMgdG8gYWRkIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlmIGBleHQgPT0gTlVMTGAgaW4gdGhlIHJlcGxheSwgdGh1cyBwcmV2ZW50aW5nIHRoZSBkb3VibGUgZnJlZSwgc2luY2UgdGhlcmUgaXMgbm8gYGV4dGAgdG8gZGVzdHJveS4gVGhhdCYjMzk7cyBhIHNvbGlkIGFuYWx5c2lzLgoKU28sIHRoZSBjb3JlIGlzc3VlIGlzIGEgZG91YmxlIGZyZWUgb2YgdGhlIGNvbW1lbnQgZXh0ZW5zaW9uIGR1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgREVMIGFuZCByZXNpemUgb3BlcmF0aW9uLiBUbyB0cmlnZ2VyIHRoaXMsIHdlIG5lZWQgYENPTkZJR19JUF9TRVRgLCBgQ09ORklHX0lQX1NFVF9IQVNIX0lQYCAob3IgYW5vdGhlciBoYXNoIHR5cGUpLCBhbmQsIGNydWNpYWxseSwgYENPTkZJR19ORVRGSUxURVJfWFRfU0VUYCB0byBlbmFibGUgdGhlIFNFVCB0YXJnZXQgZm9yIGtlcm5lbC1zaWRlIG9wZXJhdGlvbnMuIFRpbWUgdG8gY2hlY2sgYG5ldC9uZXRmaWx0ZXIveHRfc2V0LmNgIG5vdyB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h0X3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTYwPW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUkspICYjNDM7PSB4dF9jb25ubWFyay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1NFVCkgJiM0Mzs9IHh0X3NldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE2Mi1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX05BVCkgJiM0Mzs9IHh0X25hdC5vXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMjc9c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjM5LVx0ICogcHJvdGVjdGVkIGJ5IHRoZSBpcF9zZXRfcmVmX2xvY2suXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI0MDpcdCAqIEV4dGVybmFsIHN5c3RlbXMgKGkuZS4geHRfc2V0KSBtdXN0IGNhbGxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjQxLVx0ICogaXBfc2V0X25mbmxfZ2V0XyogZnVuY3Rpb25zLCB0aGF0IHdheSB3ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xNTcxPWlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY0MS1cdFx0aWYgKGR1bXBfZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfTElTVF9TRVROQU1FKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE2NDI6XHRcdFx0Z290byBuZXh0X3NldDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjQzLVx0XHRzd2l0Y2ggKGNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF0pIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY2MS1cdFx0XHRpZiAoZHVtcF9mbGFncyBcdTAwMjYgSVBTRVRfRkxBR19MSVNUX0hFQURFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjYyOlx0XHRcdFx0Z290byBuZXh0X3NldDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYzLVx0XHRcdGZhbGx0aHJvdWdoO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjY3LVx0XHRcdFx0LyogU2V0IGlzIGRvbmUsIHByb2NlZWQgd2l0aCBuZXh0IG9uZSAqL1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE2Njg6XHRcdFx0XHRnb3RvIG5leHRfc2V0O1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjktXHRcdFx0Z290byByZWxlYXNlX3JlZmNvdW50O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjg0LVx0cmV0ID0gLUVGQVVMVDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjg1Om5leHRfc2V0OlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2ODYtXHRpZiAoZHVtcF90eXBlID09IERVTVBfT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE3OiNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NldC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE4LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NTQ9c2V0X21hdGNoX3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTUte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NjpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MCAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NjY9c3RhdGljIHZvaWRcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Njc6Y29tcGF0X2ZsYWdzKHN0cnVjdCB4dF9zZXRfaW5mb192MCAqaW5mbylcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjgte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9ODM9c2V0X21hdGNoX3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTg0LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6ODU6XHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy04Ni1cdGlwX3NldF9pZF90IGluZGV4O1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTA4PXNldF9tYXRjaF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTA5LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTEwOlx0c3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YwICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTExLVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTE4PXNldF9tYXRjaF92MShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTExOS17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjEyMDpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTEyMS1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTEzND1zZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM1LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTM2Olx0c3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM3LVx0aXBfc2V0X2lkX3QgaW5kZXg7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNTY9c2V0X21hdGNoX3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNTcte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzoxNTg6XHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEgKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNTktXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNjY9c2V0X21hdGNoX3YzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY3LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTY4Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY5LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTg5PXNldF9tYXRjaF92NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5MC17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE5MTpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92NCAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIxMj1zZXRfdGFyZ2V0X3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjEzLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjE0Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MjMyPXNldF90YXJnZXRfdjBfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjMzLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjM0Olx0c3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjM1LVx0aXBfc2V0X2lkX3QgaW5kZXg7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yNzQ9c2V0X3RhcmdldF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjc1LXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Mjc2Olx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjc3LVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9Mjg3PXNldF90YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yODgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzoyODk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0yOTAtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zMDc9c2V0X3RhcmdldF92MV9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMDgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzozMDk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMTAtXHRpcF9zZXRfaWRfdCBpbmRleDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM0NT1zZXRfdGFyZ2V0X3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDYte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzozNDc6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDgtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zNTg9c2V0X3RhcmdldF92MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM1OS17XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjM2MDpcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjIgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM4OT1zZXRfdGFyZ2V0X3YzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzkwLXtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MzkxOlx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzkyLVx0aW50IHJldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTQzND1zZXRfdGFyZ2V0X3YzX2NoZWNrX2hvb2tzKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzUte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo0MzY6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzctXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz00NTc9c2V0X3RhcmdldF92M19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy00NTgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo0NTk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy00NjAtXHRpcF9zZXRfaWRfdCBpbmRleDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTUxNz1zZXRfdGFyZ2V0X3YzX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MTgte1xubmV0L25ldGZpbHRlci94dF9zZXQuYzo1MTk6XHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xubmV0L25ldGZpbHRlci94dF9zZXQuYy01MjAtXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz01Mjk9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzZXRfbWF0Y2hlc1tdIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MzQtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92MCxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTM1Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjApLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MzYtXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92MF9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTQ0LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU0NTpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTQ2LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1NC1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3YxLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NTU6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1Ni1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NjUtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTY2Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEpLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NjctXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTc1LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU3NjpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTc3LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjFfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4Ni1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3YzLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1ODc6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MyksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4OC1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy01OTYtXHRcdC5tYXRjaFx0XHQ9IHNldF9tYXRjaF92Myxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTk3Olx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjMpLFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01OTgtXHRcdC5jaGVja2VudHJ5XHQ9IHNldF9tYXRjaF92M19jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjA3LVx0XHQubWF0Y2hcdFx0PSBzZXRfbWF0Y2hfdjQsXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYwODpcdFx0Lm1hdGNoc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjA5LVx0XHQuY2hlY2tlbnRyeVx0PSBzZXRfbWF0Y2hfdjRfY2hlY2tlbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxNy1cdFx0Lm1hdGNoXHRcdD0gc2V0X21hdGNoX3Y0LFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2MTg6XHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92NCksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxOS1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYz02MjU9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgc2V0X3RhcmdldHNbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjMwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MCxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjMxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYzMi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MF9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjQwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjQxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY0Mi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjUwLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92MSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjUxOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY1Mi1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjYxLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Mixcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjYyOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY2My1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjcxLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Mixcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjcyOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY3My1cdFx0LmNoZWNrZW50cnlcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjgyLVx0XHQudGFyZ2V0XHRcdD0gc2V0X3RhcmdldF92Myxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjgzOlx0XHQudGFyZ2V0c2l6ZVx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyksXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY4NC1cdFx0LmNoZWNrX2hvb2tzXHQ9IHNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MsXG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy02OTMtXHRcdC50YXJnZXRcdFx0PSBzZXRfdGFyZ2V0X3YzLFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2OTQ6XHRcdC50YXJnZXRzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzKSxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjk1LVx0XHQuY2hlY2tfaG9va3NcdD0gc2V0X3RhcmdldF92M19jaGVja19ob29rcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzAyOnN0YXRpYyBpbnQgX19pbml0IHh0X3NldF9pbml0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMy17XG4tLVxubmV0L25ldGZpbHRlci94dF9zZXQuYy03MTUtXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcxNjpzdGF0aWMgdm9pZCBfX2V4aXQgeHRfc2V0X2Zpbmkodm9pZClcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcyMS1cbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIyOm1vZHVsZV9pbml0KHh0X3NldF9pbml0KTtcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIzOm1vZHVsZV9leGl0KHh0X3NldF9maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOTkKCQkJCQkJCW91dHB1dDogMjczCgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNldCBEb3VibGUtRnJlZSBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBORVRGSUxURVJfWFRfU0VUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIGZvciBgeHRfc2V0YC4gVGhhdCYjMzk7cyBnb2luZyBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFnYWluLiBXZSBoYXZlOgoKYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNl9yZXNpemVgLCBgaGFzaF9uZXQ0X3Jlc2l6ZWAsIGBoYXNoX25ldDZfcmVzaXplYCwgYW5kIGBpcF9zZXRfY29tbWVudF9mcmVlYC4KCldhaXQgYSBtaW51dGUsIGBoYXNoX2lwNF9kZWxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGJlIHRyaWNreS4gQnV0LCB1bmxlc3MgaXQmIzM5O3MgaW5saW5lZCwgaXQgKnNob3VsZCogYmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gTGV0IG1lIGNvbmZpcm0uLi4gWWVwLCBgbXR5cGVfZGVsYCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBzdWJzdGFudGlhbCBlbm91Z2ggdGhhdCBpbmxpbmluZyBpcyB1bmxpa2VseS4gSSYjMzk7bGwgdmVyaWZ5IGlmIGBtdHlwZV9kZWxgIGlzIGRlY2xhcmVkIGFzIGlubGluZS4gTm8sIGl0JiMzOTtzIGp1c3QgYHN0YXRpYyBpbnQgbXR5cGVfZGVsKC4uLilgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZGlzdGluY3Qgc3ltYm9sLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgc3ltYm9scy4gQW5kIHllcywgYG10eXBlX3Jlc2l6ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIGNvbmZpcm0gdGhhdCBgaGFzaF9pcDRfcmVzaXplYCB3aWxsIGFsc28gYmUgYSBzeW1ib2wgd2UgY2FuIHVzZS4KCkFscmlnaHQsIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhhdCBzZXQgb2YgZm9jdXMgc3ltYm9scyBub3cuIExvb2tzIHNvbGlkLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgY29uZmlnczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBhbmQgYE5FVEZJTFRFUl9YVF9TRVRgLgoKU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIFdoYXQgaGFwcGVucyBpcyB0aGlzOiB0aGVyZSYjMzk7cyBhIGtlcm5lbC1zaWRlIGRlbGV0ZSwgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBsaWtlIGFuIGlwdGFibGVzIFNFVCB0YXJnZXQsIGFuZCBpdCYjMzk7cyBoYXBwZW5pbmcgY29uY3VycmVudGx5IHdpdGggYSBoYXNoLWJhc2VkIGlwc2V0IHJlc2l6ZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ28gd3Jvbmc6IHRoZSBlbGVtZW50JiMzOTtzIGV4dGVuc2lvbnMsIGxpa2UgY29tbWVudHMsIGdldCBkZXN0cm95ZWQuIFRoZW4sIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGFuZCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCAqYWdhaW4qLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrLCBgaWYgKGV4dClgLCB0byBza2lwIGRlc3Ryb3lpbmcgdGhlIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIHdvdWxkIGJlIE5VTEwgaW4gdGhlIHNlY29uZCBjYWxsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGEgcmVhY2hhYmxlIGJ1Zy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uIGBJUF9TRVRfSEFTSF9JUGAgYW5kIGBJUF9TRVRfSEFTSF9ORVRgIGFyZSBnb29kIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgaGFzaCB0eXBlcy4gYE5FVEZJTFRFUl9YVF9TRVRgIGlzIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhlIGtlcm5lbC1zaWRlIGRlbGV0ZSwgYW5kIGBJUF9TRVRgIGlzIHRoZSBjb3JlIGlwc2V0IHN1YnN5c3RlbS4gWWVzLCB0aGF0JiMzOTtzIGFsbC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9pcDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2NvbW1lbnRfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFzaF9pcDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9kZWwmIzM0OywKICAgICYjMzQ7aGFzaF9pcDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfaXA2X3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfcmVzaXplJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0Nl9yZXNpemUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2NvbW1lbnRfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjIwLjY3MzUwMzA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAyMjY1OTAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYXNoX2lwNF9kZWxcIixcbiAgICBcImhhc2hfaXA2X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ2X2RlbFwiLFxuICAgIFwiaGFzaF9pcDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX2lwNl9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0NF9yZXNpemVcIixcbiAgICBcImhhc2hfbmV0Nl9yZXNpemVcIixcbiAgICBcImlwX3NldF9jb21tZW50X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgbmV0ZmlsdGVyIGlwc2V0IHN1YnN5c3RlbS4gRHVyaW5nIGEgY29uY3VycmVudCBrZXJuZWwtc2lkZSBkZWxldGUgKGUuZy4sIHZpYSB0aGUgaXB0YWJsZXMgU0VUIHRhcmdldCkgYW5kIGEgcmVzaXplIG9mIGEgaGFzaC1iYXNlZCBpcHNldCwgdGhlIGVsZW1lbnQncyBleHRlbnNpb25zIChsaWtlIGNvbW1lbnRzKSBhcmUgZGVzdHJveWVkLiBXaGVuIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGl0IHByZXZpb3VzbHkgY2FsbGVkIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGFnYWluLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGRlc3Ryb3lpbmcgZXh0ZW5zaW9ucyBkdXJpbmcgdGhlIHJlcGxheSAod2hlcmUgYGV4dGAgaXMgTlVMTCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByZWFjaGFibGUgYnVnLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyMC42NzM1MTAyNjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODQ5ODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0MDgwMjU1OGZmYjFlZTJhMmE5OGNmMGM4NzM4YWI2MDQ5OWVkMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMjI6NTE6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5pbmRleCA4MjMxMzE3YjBmMWY0Yi4uZDE1NTMwMjQxZjA1MzYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcXG5AQCAtMTExMiw3ICsxMTEyLDkgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cXHUwMDNlY2lkciwgaikpLCBqKTtcXG4gI2VuZGlmXFxuLVxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbitcXHRcXHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cXG4rXFx0XFx0aWYgKGV4dClcXG4rXFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcbiBcXHRcXHRpZiAodC1cXHUwMDNlcmVzaXppbmcgXFx1MDAyNlxcdTAwMjYgZXh0IFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuIFxcdFxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjIxLjE1MjkxMTcxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNTQzMjI5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfaXA0X2RlbFwiLFxuICAgIFwiaGFzaF9pcDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwNF9yZXNpemVcIixcbiAgICBcImhhc2hfaXA2X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X3Jlc2l6ZVwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBEdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIGRlbGV0ZSAoZS5nLiwgdmlhIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0KSBhbmQgYSByZXNpemUgb2YgYSBoYXNoLWJhc2VkIGlwc2V0LCB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODQwODAyNTU4ZmZiMWVlMmEyYTk4Y2YwYzg3MzhhYjYwNDk5ZWQxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDIyOjUxOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5kMTU1MzAyNDFmMDUzNiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMTEyLDcgKzExMTIsOSBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4gXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4gI2VuZGlmXG4tXHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuK1x0XHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cbitcdFx0aWYgKGV4dClcbitcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuIFx0XHRcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyMS4xNTI5MTM1MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2MjE4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBpcHNldCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIEl0IGFwcGVhcnMgdGhleSd2ZSBhZGRlZCBhIHNpbXBsZSBjaGVjazogYGlmIChleHQpYCBiZWZvcmUgY2FsbGluZyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YCB3aXRoaW4gdGhlIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzbWFsbCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIGBtdHlwZV9kZWxgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBjaGVjayBoYXMgYmVlbiBhZGRlZCwgYW5kIHdoeS4gVGltZSB0byBwdWxsIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGRlZmluaXRpb24gd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gVGhpcyBpcyBsaWtlbHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjI0Ljk3OTEzNDE5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyMjI0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUyLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU5LSNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjA6I2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2MS0jZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTIwLVxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyMTpcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MjUtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjMyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XFx0XFx0XFx0bXR5cGVfZGVsKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaisrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE0NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MToyNS4xNjUzNjMyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE0NDQyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXBzZXQgSGFzaCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtdHlwZV9kZWxgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaGAuIFRoaXMgaXMgYSAqdGVtcGxhdGUqIGZpbGUsIHVzZWQgYnkgYWxsIHRob3NlIGlwc2V0IGhhc2ggdHlwZXMg4oCTIGBpcF9zZXRfaGFzaF9pcC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgZXRjLiBJIHNlZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGludGVuZGVkIHRvIGJlIGEgZnVuY3Rpb25hbCBmaXguIFRoZSBidWcgaXMgdGhhdCBgaXBfc2V0X2V4dF9kZXN0cm95YCB3YXMgYmVpbmcgY2FsbGVkIHdoZW4gYGV4dGAgd2FzIE5VTEwuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgb2NjdXJzIHNwZWNpZmljYWxseSBkdXJpbmcgYSByZXNpemUgcmVwbGF5LlxuXG5MZXQgbWUgc2VlLCBgaXBfc2V0X2V4dF9kZXN0cm95YCB0YWtlcyBgZGF0YWAgYXMgYW4gYXJndW1lbnQg4oCTIHRoZSBlbGVtZW50IGRhdGEg4oCTIGFuZCBJJ20gZ3Vlc3NpbmcgdGhlIGNvZGUgbmVlZHMgdG8gZnJlZSB0aGF0LiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBcIk9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLlwiIFNvIHRoZSBjaGVjayBgaWYgKGV4dClgIGlzIHRoZSBrZXkuIEl0IHByZXZlbnRzIGNhbGxpbmcgYGlwX3NldF9leHRfZGVzdHJveWAgd2hlbiBgZXh0YCBpcyBhbHJlYWR5IE5VTEwuIEdvb2QsIGl0J3MgYSBudWxsIHBvaW50ZXIgY2hlY2suIFRoYXQncyBhIGNsYXNzaWMgYW5kIGFwcHJvcHJpYXRlIGZpeCBmb3IgYSByZXNpemUgcmVwbGF5IHNjZW5hcmlvLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgcHJvcGVybHkuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBzZWFyY2ggZm9yIGBJUF9TRVRfSEFTSGAgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MjkuMjc5ODA3ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODg0NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1NFVF9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjI5LjQ4Mzc1NzU4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODM5MTkwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSVAgU2V0cyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBoaW5nZXMgb24gYElQX1NFVGAuIFRoYXQncyB0aGUga2V5LiBOb3csIHdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYElQX1NFVGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIEl0IGNvdWxkIGJlIGRpcmVjdGx5IGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgaXBzZXRgIHBhcnQgb2YgbmV0ZmlsdGVyLiBTbywgSSdsbCBjaGVjayBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYC4gSSdsbCBzdGFydCB3aXRoIHRoZSBsYXR0ZXIgYXMgaXQgc2VlbXMgbW9yZSBmb2N1c2VkIHRvIHRoaXMgdGFzaywgYnV0IGlmIEkgZG9uJ3QgZmluZCBpdCB0aGVyZSwgSSdsbCBicmFuY2ggb3V0IHRvIHRoZSBicm9hZGVyIG5ldGZpbHRlciBLY29uZmlnLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBodW50IC0gdGhlIGdvYWwgaXMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgS2NvbmZpZyBvcHRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjMyLjY2NzY3OTU2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyNzE2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTozMi44MjU5NTY2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzI1NzI2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBzdXBwb3J0IGBJUF9TRVRgIGFuZCB0aGUgYElQX1NFVF9IQVNIX0lQYCBtZXRob2QgKG9yIGFueSBvZiB0aGUgb3RoZXIgaGFzaGluZyB2YXJpYXRpb25zKSBpbiBteSBjdXJyZW50IHNldHVwLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcmVxdWlyZW1lbnRzLiBPa2F5LCBJJ2xsIGFkZCBgSVBfU0VUYCBhbmQgYElQX1NFVF9IQVNIX0lQYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIFRoaXMgd2F5LCB0aGUgc3lzdGVtIHdpbGwga25vdyB0aGF0IEkgaW50ZW5kIHRvIGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBkdXJpbmcgY29tcGlsYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgYmFzaWMgZW5hYmxpbmcgc3RlcC5cblxuTm93LCB0aGF0IGBtdHlwZV9kZWxgIGZ1bmN0aW9uLi4udGhhdCdzIGEgbWFjcm8tZ2VuZXJhdGVkIGZ1bmN0aW9uLCBpc24ndCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBnZW5lcmF0aW9uIHByb2Nlc3MuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1hY3JvLWdlbmVyYXRlZCBmdW5jdGlvbnMgd29yayBmb3IgZWZmZWN0aXZlIGRlYnVnZ2luZyBhbmQgcG90ZW50aWFsIGN1c3RvbWl6YXRpb24gbGF0ZXIgb24uIExldCBtZSB0cmFjZSBiYWNrIGFuZCBzZWUgZXhhY3RseSBob3cgdGhhdCBtYWNybyBleHBhbmRzIGFuZCB3aGF0IHRoZSByZXN1bHRpbmcgY29kZSBsb29rcyBsaWtlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBtYWNybyBkZWZpbml0aW9ucywgYW5kIGFueSBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MzYuMjk4NTMyMjM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3ODc1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDUtI3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyMDY6I3VuZGVmIG10eXBlX2RlbF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDctI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjE0LSN1bmRlZiBtdHlwZV9hZGRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIxNTojdW5kZWYgbXR5cGVfZGVsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMTYtI3VuZGVmIG10eXBlX3Rlc3RfY2lkcnNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUwLSNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjUxOiNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjUyLSNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZVxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU5LSNkZWZpbmUgbXR5cGVfYWRkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNjA6I2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI2MS0jZGVmaW5lIG10eXBlX3Rlc3RfY2lkcnNcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3Rlc3RfY2lkcnMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM1Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MzU3Om10eXBlX2RlbF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzU4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTIwLVxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyMTpcXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC01MjItXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTYyMz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2MjQ6bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MjUtXFx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NjMyPW10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg2LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODc6XFx0XFx0XFx0bXR5cGVfZGVsKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzg4LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05NTEtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTUyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTk1My1cXHRcXHRcXHRcXHRcXHROQ0lEUl9QVVQoRENJRFJfR0VUKGRhdGEtXFx1MDAzZWNpZHIsIGkpKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2Mz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY0Om10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA2NS1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTEtXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaisrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExMjpcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTEzLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE0NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50IG10eXBlX3ZhcmlhbnQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE0ODAtXFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNDgxOlxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4Mi1cXHRcXHRbSVBTRVRfVEVTVF0gPSBtdHlwZV90ZXN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTozNi40OTAzMjU2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NTMxNzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgYG10eXBlX2RlbGAgTWFjcm8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBtdHlwZV9kZWxgIGlzIGNsZWFybHkgYSBtYWNybywgZGVmaW5lZCBhcyBgSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpYC4gIFRoYXQgYElQU0VUX1RPS0VOYCBsaWtlbHkganVzdCBjb25jYXRlbmF0ZXMgaXRzIGFyZ3VtZW50cy4gIFRoZXJlZm9yZSwgYG10eXBlX2RlbGAgaXMgZ2VuZXJhdGluZyBmdW5jdGlvbnMsIGFuZCBqdWRnaW5nIGJ5IHRoZSBleGFtcGxlIG5hbWVzLCB0aGV5J3JlIHByb2JhYmx5IGRlbGV0aW9uIGZ1bmN0aW9uczogYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXRfZGVsYCwgYW5kIHNvIG9uLiBUaGV5IHdpbGwgYmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgYE1UWVBFYCBwYXNzZWQgdG8gaXQuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBNVFlQRWAgYWN0dWFsbHkgKmlzKiBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB0aGVyZS4gVGhhdCBzaG91bGQgdGVsbCBtZSB0aGUgdHlwZSB0aGVzZSBkZWxldGlvbiBmdW5jdGlvbnMgYXJlIGFjdGluZyB1cG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6MzkuOTc1NjQ1ODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NzgxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVRZUEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz03MD1oYXNoX2lwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA0X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNF9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYzo3NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jPTIwMj1oYXNoX2lwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXA2X2VsZW0gKm5leHQsIGNvbnN0IHN0cnVjdCBoYXNoX2lwNl9lbGVtICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTIwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6MjA2OiN1bmRlZiBNVFlQRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDctI3VuZGVmIEhPU1RfTUFTS1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjQwLjEyODMzMTMyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcxODE4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVtb3ZhbCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBSZXNpemUgUmVwbGF5IElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHJlbW92YWwgZnVuY3Rpb25zIOKAkyBgaGFzaF9pcDRfZGVsYCwgYGhhc2hfaXA2X2RlbGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0Nl9kZWxgLCBhbmQgdGhlIGxpa2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYWRkIGBoYXNoX2lwNF9kZWxgIGFuZCBgaGFzaF9pcDZfZGVsYCB0byBgRm9jdXNTeW1ib2xzYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoZSByZXBvcnQgaXMgYWJvdXQgYSByZXNpemUgcmVwbGF5LiBSaWdodCwgbGV0IG1lIGNoZWNrIGlmIGBtdHlwZV9yZXNpemVgIGlzIGFsc28gYmVpbmcgZ2VuZXJhdGVkLiBZdXAsIGl0IGlzLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtdHlwZV9yZXNpemVgIGlzIGhhbmRsZWQsIGFuZCBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG10eXBlX3Jlc2l6ZWAgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0My41MDAxNTI3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjQ4Mzc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9yZXNpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTE3Mz1zdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIxOC0jdW5kZWYgbXR5cGVfdXJlZlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjE5OiN1bmRlZiBtdHlwZV9yZXNpemVcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIyMC0jdW5kZWYgbXR5cGVfZXh0X3NpemVcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIyMTojdW5kZWYgbXR5cGVfcmVzaXplX2FkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMjItI3VuZGVmIG10eXBlX2hlYWRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjYzLSNkZWZpbmUgbXR5cGVfdXJlZlxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfdXJlZilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI2NDojZGVmaW5lIG10eXBlX3Jlc2l6ZVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfcmVzaXplKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjY1LSNkZWZpbmUgbXR5cGVfZXh0X3NpemVcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9zaXplKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjY2OiNkZWZpbmUgbXR5cGVfcmVzaXplX2FkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9yZXNpemVfYWQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNjctI2RlZmluZSBtdHlwZV9oZWFkXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9oZWFkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0yOTM9c3RydWN0IGh0eXBlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzE1LS8qIEFERHxERUwgZW50cmllcyBzYXZlZCBkdXJpbmcgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTY6c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTctXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzE9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NjMyOm10eXBlX3Jlc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIGJvb2wgcmV0cmllZClcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTYzMy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NS1cXHRzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDY6XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0Ny1cXHR1MzIgaSwgaiwgciwgbnIsIGtleTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNzgyLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXFx1MDAyNm9yaWctXFx1MDAzZWFkKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo3ODM6XFx0XFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC03ODQtXFx0XFx0aWYgKHgtXFx1MDAzZWFkID09IElQU0VUX0FERCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD04Njg9bXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMjgtXFx0XFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGFkZCwgc2F2ZSB2YWx1ZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMjk6XFx0XFx0c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCAqeDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzAtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDMxOlxcdFxcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwMzItXFx0XFx0aWYgKCF4KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDcxLVxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA3MjpcXHRzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkICp4ID0gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNzMtXFx0aW50IGksIGosIGssIHIsIHJldCA9IC1JUFNFVF9FUlJfRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjItXFx0XFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMTIzOlxcdFxcdFxcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMjQtXFx0XFx0XFx0aWYgKHgpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGlwX3NldF90eXBlX3ZhcmlhbnQgbXR5cGVfdmFyaWFudCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ4OC1cXHQudXJlZlxcdD0gbXR5cGVfdXJlZixcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE0ODk6XFx0LnJlc2l6ZVxcdD0gbXR5cGVfcmVzaXplLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTQ5MC1cXHQuc2FtZV9zZXQgPSBtdHlwZV9zYW1lX3NldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NDMuNjIyNjQ2MDE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjUxMzMwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgUmVzaXplIElzc3VlKipcblxuT2theSwgaGVyZSdzIHRoZSBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHByb2JsZW0gaXMgY3JvcHBpbmcgdXAgZHVyaW5nIGEgcmVzaXplIG9wZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG10eXBlX3Jlc2l6ZWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24gYmVpbmcgYWN0aXZlIHdoZW4gdGhlIGJ1ZyBtYW5pZmVzdHMuIE5vdywgdGhlIGtleSBpcyB3aGVyZSB0aGlzIGBtdHlwZV9yZXNpemVgIGdldHMgY2FsbGVkIGZyb20sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgdHJpZ2dlcmVkIGZyb20gYSByZXBsYXkgc2NlbmFyaW8uIFRoZSByZWFsIGN1bHByaXQsIHRob3VnaCwgaXMgbGlrZWx5IGluIGBtdHlwZV9kZWxgLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCAqYnkqIGBtdHlwZV9yZXNpemVgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYG10eXBlX3Jlc2l6ZWAgYW5kIGBtdHlwZV9kZWxgLiBBbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gYGlwX3NldF9oYXNoX2dlbi5oYCwgYW5kIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgYG10eXBlX3Jlc2l6ZWAgYXJvdW5kIGxpbmUgNzg3LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0Ny4wNDc3ODE2MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcdC8qIFRoZXJlIGNhbid0IGJlIGFueSBvdGhlciB3cml0ZXIuICovXFxuIDc3MTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cXHUwMDNldGFibGUsIHQpO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHQvKiBHaXZlIHRpbWUgdG8gb3RoZXIgcmVhZGVycyBvZiB0aGUgc2V0ICovXFxuIDc3NDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0cHJfZGVidWcoXFxcInNldCAlcyByZXNpemVkIGZyb20gJXUgKCVwKSB0byAldSAoJXApXFxcXG5cXFwiLCBzZXQtXFx1MDAzZW5hbWUsXFxuIDc3NzpcXHRcXHRcXHQgb3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMsIG9yaWcsIHQtXFx1MDAzZWh0YWJsZV9iaXRzLCB0KTtcXG4gNzc4OlxcdFxcdC8qIEFkZC9kZWxldGUgZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBTRVQgdGFyZ2V0IGR1cmluZyByZXNpemUuXFxuIDc3OTpcXHRcXHQgKiBLZXJuZWwtc2lkZSBhZGQgY2Fubm90IHRyaWdnZXIgYSByZXNpemUgYW5kIHVzZXJzcGFjZSBhY3Rpb25zXFxuIDc4MDpcXHRcXHQgKiBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXguXFxuIDc4MTpcXHRcXHQgKi9cXG4gNzgyOlxcdFxcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXFx1MDAyNm9yaWctXFx1MDAzZWFkKSB7XFxuIDc4MzpcXHRcXHRcXHR4ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBsaXN0KTtcXG4gNzg0OlxcdFxcdFxcdGlmICh4LVxcdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcXG4gNzg1OlxcdFxcdFxcdFxcdG10eXBlX2FkZChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBcXHUwMDI2eC1cXHUwMDNlZXh0LCBcXHUwMDI2eC1cXHUwMDNlbWV4dCwgeC1cXHUwMDNlZmxhZ3MpO1xcbiA3ODY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNzg3OlxcdFxcdFxcdFxcdG10eXBlX2RlbChzZXQsIFxcdTAwMjZ4LVxcdTAwM2VkLCBOVUxMLCBOVUxMLCAwKTtcXG4gNzg4OlxcdFxcdFxcdH1cXG4gNzg5OlxcdFxcdFxcdGxpc3RfZGVsKGwpO1xcbiA3OTA6XFx0XFx0XFx0a2ZyZWUobCk7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXHQvKiBJZiB0aGVyZSdzIG5vYm9keSBlbHNlIHVzaW5nIHRoZSB0YWJsZSwgZGVzdHJveSBpdCAqL1xcbiA3OTM6XFx0XFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNm9yaWctXFx1MDAzZXVyZWYpKSB7XFxuIDc5NDpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiVGFibGUgZGVzdHJveSBieSByZXNpemUgJXBcXFxcblxcXCIsIG9yaWcpO1xcbiA3OTU6XFx0XFx0XFx0bXR5cGVfYWhhc2hfZGVzdHJveShzZXQsIG9yaWcsIGZhbHNlKTtcXG4gNzk2OlxcdFxcdH1cXG4gNzk3OlxcdFxcbiA3OTg6XFx0b3V0OlxcbiA3OTk6XFx0I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MTo0Ny4wNDc5MzQ2OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwOTc3MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG10eXBlX2RlbGAgd2l0aCBhIE5VTEwgYGV4dGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIG1ha2luZyBhIGNhbGwgdG8gYG10eXBlX2RlbChzZXQsIFx1MDAyNngtXHUwMDNlZCwgTlVMTCwgTlVMTCwgMCk7YC4gVGhlIGtleSB0YWtlYXdheSBoZXJlIGlzIHRoYXQgYGV4dGAgaXMgYmVpbmcgcGFzc2VkIGFzIGBOVUxMYC4gIEkgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IHRoYXQgaW1wbGllcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTExMi4gVGhlIGBleHRgIHBhcmFtZXRlciwgZnJvbSB3aGF0IEkgcmVjYWxsLCB1c3VhbGx5IGhhbmRsZXMgc29tZSBzb3J0IG9mIGV4dGVybmFsIGRhdGEgb3IgY29udGV4dCByZWxhdGVkIHRvIHRoZSBkZWxldGlvbiBwcm9jZXNzLiBQYXNzaW5nIGBOVUxMYCBpbXBsaWVzIGEgc3BlY2lmaWMsIHBlcmhhcHMgc2ltcGxlciwgZGVsZXRpb24gc2NlbmFyaW8uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWFsIGxvZ2ljLCBvciBsYWNrIHRoZXJlb2YsIGlzIHRyaWdnZXJlZCBieSBhIE5VTEwgYGV4dGAgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGVyZSBhIGRlZmF1bHQgZGVsZXRpb24gcHJvY2VkdXJlIHdpdGhvdXQgZXh0ZXJuYWwgaG9va3MgdGhhdCBpcyBpbml0aWF0ZWQ/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGF0IHBsYXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBicmFuY2ggb2YgZXhlY3V0aW9uIGFjdHVhbGx5ICpkb2VzKi4gVGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBvZiBteSBhbmFseXNpcy4gV2hhdCBkb2VzIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgYGV4dCA9PSBOVUxMYCAob3IsIGBleHQgIT0gTlVMTGApIGVudGFpbD8gV2hhdCBkb2VzIGxpbmUgMTExMiBhY3R1YWxseSBkbyBpbiB0aGlzIGNhc2U/IEkgbmVlZCB0byBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBgTlVMTGAgYGV4dGAgcGFyYW1ldGVyLCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBpbnRlbnRpb25hbCBvciBhIHBvdGVudGlhbCBmbGF3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTAuNDU3NzEwMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEwMTpcXHRcXHRcXHRpZiAoU0VUX0VMRU1fRVhQSVJFRChzZXQsIGRhdGEpKVxcbjExMDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdFxcdHJldCA9IDA7XFxuMTEwNTpcXHRcXHRcXHRjbGVhcl9iaXQoaSwgbi1cXHUwMDNldXNlZCk7XFxuMTEwNjpcXHRcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbjExMDc6XFx0XFx0XFx0aWYgKGkgKyAxID09IHBvcylcXG4xMTA4OlxcdFxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuLVxcdTAwM2Vwb3MsIC0tcG9zKTtcXG4xMTA5OlxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4xMTEwOlxcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4xMTExOlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4xMTEyOlxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4xMTEzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXFx1MDAzZWNpZHIsIGopKSwgaik7XFxuMTExNDpcXHQjZW5kaWZcXG4xMTE1OlxcdFxcdFxcdC8qIE9uIGEgcmVzaXplIHJlcGxheSB0aGUgZXh0ZW5zaW9ucyB3ZXJlIGFscmVhZHkgZGVzdHJveWVkLiAqL1xcbjExMTY6XFx0XFx0XFx0aWYgKGV4dClcXG4xMTE3OlxcdFxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbjExMTg6XFx0XFxuMTExOTpcXHRcXHRcXHRpZiAodC1cXHUwMDNlcmVzaXppbmcgXFx1MDAyNlxcdTAwMjYgZXh0IFxcdTAwMjZcXHUwMDI2IGV4dC1cXHUwMDNldGFyZ2V0KSB7XFxuMTEyMDpcXHRcXHRcXHRcXHQvKiBSZXNpemUgaXMgaW4gcHJvY2VzcyBhbmQga2VybmVsIHNpZGUgZGVsLFxcbjExMjE6XFx0XFx0XFx0XFx0ICogc2F2ZSB2YWx1ZXNcXG4xMTIyOlxcdFxcdFxcdFxcdCAqL1xcbjExMjM6XFx0XFx0XFx0XFx0eCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtdHlwZV9yZXNpemVfYWQsIEdGUF9BVE9NSUMpO1xcbjExMjQ6XFx0XFx0XFx0XFx0aWYgKHgpIHtcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdHgtXFx1MDAzZWFkID0gSVBTRVRfREVMO1xcbjExMjY6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VkLCB2YWx1ZSxcXG4xMTI3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcXG4xMTI4OlxcdFxcdFxcdFxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMTEyOTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUxOjUwLjQ1Nzg1MzU5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc3NjYzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBlcnNpc3RlbnQgQnVnKipcblxuT2theSwgc28gdGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaWYgKGV4dCkgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0ZW1zIGZyb20gYG10eXBlX2RlbGAgYmVpbmcgY2FsbGVkIGZyb20gYG10eXBlX3Jlc2l6ZWAgZHVyaW5nIGEgcmVwbGF5IHNjZW5hcmlvLiBTbywgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYG10eXBlX3Jlc2l6ZWAgYW5kIGBtdHlwZV9kZWxgLCBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi5cblxuU2luY2UgdGhlc2UgYXJlIGdlbmVyYXRlZCBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIGBNVFlQRWAgbWFjcm8sIEknbSByZWFsbHkgbG9va2luZyBhdCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbnMgbGlrZSBgaGFzaF9pcDRfcmVzaXplYCwgYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9yZXNpemVgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCB0aGUgbGlrZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBhbGwgdGhvc2UgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSB0aGUgYE1UWVBFYCBtYWNybyB0aGF0IGVuZCBpbiBgX3Jlc2l6ZWAgYW5kIGBfZGVsYC4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgZmlsZXMgbGlrZSBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jYCBhbmQgb3RoZXIgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTQuMzM1NTE5NDMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI4MzE3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBtYWNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDpwb3J0XFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjI5OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfcG9ydFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlxcdFxcdDRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xODA9aGFzaF9pcG1hYzZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MTkwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xOTEtI2RlZmluZSBQRlxcdFxcdDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9Njk9aGFzaF9pcG1hcms0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMDU9aGFzaF9pcG1hcms2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIxMzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Nzk9aGFzaF9pcHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6ODY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yNDk9aGFzaF9pcHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI1ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz03Nz1oYXNoX2lwcG9ydGlwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODQtLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo4NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTI0OD1oYXNoX2lwcG9ydGlwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNTc6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1OC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMjE9aGFzaF9pcHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEyOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzAtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNzk9aGFzaF9pcHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjM4ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NjE9aGFzaF9tYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6NjY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMDI9aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yNzM9aGFzaF9uZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjk9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM2Mz1oYXNoX25ldGlmYWNlNl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xMjU9aGFzaF9uZXRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjEzMTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzItI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zNjE9aGFzaF9uZXRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM2OC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM2OTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzAtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTExNz1oYXNoX25ldHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTIzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEyNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zMzQ9aGFzaF9uZXRwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNDM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTEzMj1oYXNoX25ldHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjEzOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE0MC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00MjQ9aGFzaF9uZXRwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0MzM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTE6NTQuNTg4MzU3MjUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzEwMjA1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU3RyYXRlZ3kgZm9yIEd1aWRpbmcgdGhlIEZ1enplcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhlc2UgbmV3bHkgZ2VuZXJhdGVkIGZ1bmN0aW9uczogYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNl9kZWxgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDZfZGVsYCwgYGhhc2hfbmV0cG9ydDRfZGVsYCwgYGhhc2hfbmV0cG9ydDZfZGVsYCwgYW5kIHRoZWlyIHJlc2l6aW5nIGNvdW50ZXJwYXJ0cy4gVGhlbiB3ZSBoYXZlIHRoZSByZXNpemluZyBmdW5jdGlvbnMsIGxpa2UgYGhhc2hfaXA0X3Jlc2l6ZWAsIGBoYXNoX2lwNl9yZXNpemVgLCBldGMuXG5cbk15IHBsYW4gaXMgdG8gc3RyYXRlZ2ljYWxseSBhZGQgc29tZSBvZiB0aGVzZSB0byBgRm9jdXNTeW1ib2xzYC4gRm9jdXNpbmcgb24gYGhhc2hfaXA0X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9uZXQ0X2RlbGAsIGFuZCBgaGFzaF9uZXQ0X3Jlc2l6ZWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZGlyZWN0IHRoZSBmdXp6ZXIgdG93YXJkcyB0aGUgcmVsZXZhbnQgY29kZSBtb2RpZmljYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIGl0IGVub3VnaCBndWlkYW5jZS5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYCBzcGVjaWZpY2FsbHkuXG5cbldhaXQsIEkgbmVlZCB0byByZWNhbGlicmF0ZSBoZXJlLiBUaGUgYnVnIHJlcG9ydCB3YXMgYWJvdXQgZXh0ZW5zaW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIHRoZSBjb3JyZWN0IGNvZGUgcGF0aHMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIGRvbid0IG1pc3Mgc29tZXRoaW5nIGNyaXRpY2FsLiBMZXQgbWUgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agb3IgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGxvb2sgZm9yIHNvbWV0aGluZyBsaWtlIGBJUF9TRVRfRVhUYC4gVGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBwcm9wZXJseSBleHBsb3JpbmcgdGhlIGV4dGVuc2lvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MDAuMDE5MzgyNjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowMC4xMzM5Nzk2MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDMyMDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGlwc2V0IEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdXNlciBpcyBhc2tpbmcgYWJvdXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGlwc2V0IGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBleHRlbnNpb25zIGFyZW4ndCBoYW5kbGVkIGFzIHNlcGFyYXRlIGNvbmZpZyBmaWxlcyBvciBtb2R1bGVzLCB0aGV5J3JlIGJha2VkIHJpZ2h0IGludG8gdGhlIGlwc2V0IGNvcmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIG92ZXJhbGwuIE5vdywgaWYgSSBuZWVkIHRvIGNvbmZpcm0gaG93IGV4dGVuc2lvbiBmdW5jdGlvbmFsaXR5IGlzIG1hbmFnZWQsIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgQyBjb2RlLiBNeSBpbnR1aXRpb24gcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGlwX3NldF9leHRfZGVzdHJveWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjbGVhbmluZyB1cCBvciBkZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBleHRlbnNpb25zLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBnaXZlcyB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjAzLjI4NDMwMzMwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9leHRfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9NDg9bXR5cGVfZXh0X2NsZWFudXAoc3RydWN0IGlwX3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTU0LVxcdFxcdGlmICh0ZXN0X2JpdChpZCwgbWFwLVxcdTAwM2VtZW1iZXJzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg6NTU6XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZ2V0X2V4dChzZXQsIG1hcCwgaWQpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtNTYtfVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTEzMD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xNDctXFx0XFx0LyogRWxlbWVudCBpcyByZS1hZGRlZCwgY2xlYW51cCBleHRlbnNpb25zICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjE0ODpcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCB4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTQ5LVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaD0xNzY9bXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxODY6XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTE4Ny1cXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmg9MjY2PW10eXBlX2djKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4Mi1cXHRcXHRcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoyODM6XFx0XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgeCk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oLTI4NC1cXHRcXHRcXHRcXHRzZXQtXFx1MDAzZWVsZW1lbnRzLS07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM5MD1tdHlwZV9leHRfY2xlYW51cChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBoYnVja2V0ICpuKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zOTYtXFx0XFx0aWYgKHRlc3RfYml0KGksIG4tXFx1MDAzZXVzZWQpKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Mzk3OlxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGFoYXNoX2RhdGEobiwgaSwgc2V0LVxcdTAwM2Vkc2l6ZSkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzk4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNTI1LVxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjUyNjpcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTUyNy1cXHRcXHRcXHRkKys7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTg2OD1tdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTU1LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTU2OlxcdFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtOTU3LVxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTA2ND1tdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTExNi1cXHRcXHRpZiAoZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTExNzpcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTExMTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTE0Mz1fX2xpc3Rfc2V0X2RlbF9yY3Uoc3RydWN0IHJjdV9oZWFkICogcmN1KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYzoxNDg6XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYy0xNDktXFx0a2ZyZWUoZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jPTIzNj1saXN0X3NldF91YWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jLTI2OS1cXHRcXHQvKiBVcGRhdGUgZXh0ZW5zaW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmM6MjcwOlxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIG4pO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMtMjcxLVxcdFxcdGxpc3Rfc2V0X2luaXRfZXh0ZW5zaW9ucyhzZXQsIGV4dCwgbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjAzLjQyOTQ3MjE2M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDczOTczMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgYG10eXBlX2RlbGAgQnVnKipcblxuT2theSwgc28gdGhlIGJ1ZydzIG5lc3RsZWQgZGVlcCB3aXRoaW4gYG10eXBlX2RlbGAgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBmaXggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW52b2x2ZXMgYWRkaW5nIGEgY2hlY2ssIGFuIGBpZiAoZXh0KWAsIGJlZm9yZSB0aGUgY2FsbCB0byBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgLiBUaGF0IHNob3VsZCBwcmV2ZW50IGFueSBuYXN0eSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHdoZW4gYGV4dGAgaGFwcGVucyB0byBiZSBOVUxMLCB3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgZmxvdyBjb3JyZWN0bHkuIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIHRha2VzIGBzZXRgIGFuZCBgZGF0YWAgYXMgYXJndW1lbnRzLCByaWdodD8gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSwgZWl0aGVyIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIG9yIHBlcmhhcHMgdGhlIGhlYWRlciBmaWxlLCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhgLCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aG9zZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGFuZCBob3cgdGhlIGZpeCBwcm9wZXJseSBhZGRyZXNzZXMgdGhlIGlzc3VlLiBJIGhhdmUgYSBodW5jaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIHdpdGggdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowNy41MDM0NDg1OTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTg2NTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfZXh0X2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTI4NT1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDoyODY6aXBfc2V0X2V4dF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqZGF0YSlcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaC0yODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjowNy42MzkzMjAzMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyOTc1MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gc3lzdGVtIHByb2dyYW1taW5nIGFuZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBmb2N1c2VkIG9uIG5ldHdvcmtpbmcgY29uY2VwdHM6XG5cbioqRGlzc2VjdGluZyBgaXBfc2V0X2V4dF9kZXN0cm95YCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGludG8gYGlwX3NldF9leHRfZGVzdHJveWAuIE15IGltbWVkaWF0ZSBtZW50YWwgZnJhbWV3b3JrIGtpY2tzIGluIOKAkyBJJ20gdGhpbmtpbmcsIFwiT2theSwgdGhpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZXMgdG8gdGhlIHRlYXJkb3duIG9mIGFuIElQIHNldCwgbGlrZWx5IHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSAnZXh0JyBzdWdnZXN0cyBzb21lIGV4dGVuZGVkIG9yIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBzZXQuICdEZXN0cm95JyBpbXBsaWVzIG1lbW9yeSBkZWFsbG9jYXRpb24gYW5kIGNsZWFudXAuXCJcblxuSSBpbW1lZGlhdGVseSBiZWdpbiB0byBjb25zaWRlcjogd2hhdCdzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBJcyBpdCBhIGhhc2ggdGFibGUsIGEgcmFkaXggdHJlZSwgYSBiaXRtYXA/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IHRocmVhZC1zYWZlPyBBcmUgdGhlcmUgYW55IHJlZmVyZW5jZSBjb3VudHMgaW52b2x2ZWQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBJUCBzZXQgdGhhdCdzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgbGlrZWx5IGluY2x1ZGVzIGZyZWVpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgcG9zc2libHkgZGVjcmVtZW50aW5nIHJlZmVyZW5jZSBjb3VudGVycywgYW5kIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMuXG5cblRoaXMgcmVxdWlyZXMgY2FyZWZ1bCBhdHRlbnRpb24uIEltcHJvcGVyIGNsZWFudXAgaW4gdGhpcyBhcmVhIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgcmVmZXJlbmNlcywgaWYgYW55LCBhbmQgY29uc2lkZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiBlcnJvcnMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuIElzIGl0IGdyYWNlZnVsPyBEb2VzIGl0IGxvZyBlcnJvcnM/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IEFueSBkZXRhaWxzIG9uIHRoZXNlIGNvbmNlcHRzIHdpbGwgYmUgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMgdGhvcm91Z2hseSwgc28gdGhhdCBJIGNhbiBhbmFseXplLCBtb2RpZnksIG9yIGV4dGVuZCB0aGUgcmVsYXRlZCBjb2RlIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoxMS40NjkwNzQ5MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMjg2OlxcdGlwX3NldF9leHRfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKmRhdGEpXFxuIDI4NzpcXHR7XFxuIDI4ODpcXHRcXHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcXG4gMjg5OlxcdFxcdCAqIGNhbGwgaXQncyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cXG4gMjkwOlxcdFxcdCAqL1xcbiAyOTE6XFx0XFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xcbiAyOTI6XFx0XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0LyogTmV0bGluayBDQiBhcmdzICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdElQU0VUX0NCX05FVCA9IDAsXFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzMDM6XFx0XFx0SVBTRVRfQ0JfUFJPVE8sXFx0XFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cXG4gMzA0OlxcdFxcdElQU0VUX0NCX0RVTVAsXFx0XFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjExLjQ2OTI2OTY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEyNDIyMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBEb3VibGUtRnJlZSBpbiBJUHNldCBFeHRlbnNpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgaXBfc2V0X2V4dF9kZXN0cm95YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGRlc3Ryb3lpbmcgdGhlIGNvbW1lbnQgZXh0ZW5zaW9uLiBUaGUgYnVnIHJlcG9ydCBpcyBwb2ludGluZyB0byBhIHNjZW5hcmlvIHdoZXJlIGBleHRgIGlzIE5VTEwsIGJ1dCBgaXBfc2V0X2V4dF9kZXN0cm95YCBpcyBiZWluZyBjYWxsZWQgd2l0aCBgZGF0YWAgYW55d2F5LiBIbW0sIHRoYXQncyBub3QgcmlnaHQuIElmIGBleHRgIGlzIE5VTEwsIHRoZW4gc2hvdWxkbid0IHRoZSBjYWxsIHRvIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGJlIHNraXBwZWQgYWx0b2dldGhlcj8gQW5kIG5vdyBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgKmFkZHMqIHRoZSBgaWYgKGV4dClgIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGJsb2NrIGFnYWluLiBBaCwgaXQgbWVudGlvbnMgYSBcInJlc2l6ZSByZXBsYXkuXCIgT2theSwgdGhhdCdzIHRoZSBrZXkuIElmIGBleHRgIGlzIE5VTEwsIGl0J3MgbGlrZWx5IGEgcmVzaXplIHJlcGxheSBzY2VuYXJpby4gRHVyaW5nIGEgcmVzaXplIHJlcGxheSwgdGhlIGV4dGVuc2lvbnMgYXJlICphbHJlYWR5KiBkZXN0cm95ZWQuIFNvLCBjYWxsaW5nIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAgYWdhaW4gd2l0aGluIGEgcmVzaXplIHJlcGxheSB3b3VsZCBiZSB0aGUgcHJvYmxlbS4gSXQgd291bGQgdmVyeSBsaWtlbHkgY2F1c2UgYSBkb3VibGUtZnJlZSBvciBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYmVjYXVzZSBgaXBfc2V0X2V4dF9kZXN0cm95YCBjYWxscyB0aGUgYGRlc3Ryb3lgIGZ1bmN0aW9uIG9uIHRoZSBjb21tZW50IGV4dGVuc2lvbiwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IGZyZWVzIHRoZSBjb21tZW50IHN0cmluZyBpdHNlbGYuIEkgYmV0IGl0J3Mgc29tZXRoaW5nIGxpa2UgYGlwX3NldF9jb21tZW50X2ZyZWVgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgaHVuY2guIEknbGwgY2hlY2sgYGlwX3NldF9leHRlbnNpb25zW0lQU0VUX0VYVF9JRF9DT01NRU5UXS5kZXN0cm95YCBkaXJlY3RseS4gWWVwLCBpdCdzIHByb2JhYmx5IGBpcF9zZXRfY29tbWVudF9mcmVlYCBpbiBgbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jYCwgYXMgSSBzdXNwZWN0ZWQuIEV4Y2VsbGVudCwgSSB0aGluayBJJ3ZlIGdvdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjE3LjE4MTY5NDMwNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDcxNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQU0VUX0VYVF9JRF9DT01NRU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz00MDM9Y29uc3Qgc3RydWN0IGlwX3NldF9leHRfdHlwZSBpcF9zZXRfZXh0ZW5zaW9uc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTQyMC1cXHR9LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzo0MjE6XFx0W0lQU0VUX0VYVF9JRF9DT01NRU5UXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDIyLVxcdFxcdC50eXBlXFx0ID0gSVBTRVRfRVhUX0NPTU1FTlQgfCBJUFNFVF9FWFRfREVTVFJPWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MTcuMzMwNzcxNzAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQyNzU2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gaXBfc2V0X2NvcmUuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhpcyBhcmVhIGlzIHJlbGV2YW50IHRvIFtpbnNlcnQgcmVsZXZhbnQgZXhwZXJ0LWxldmVsIGNvbnRleHQsIGUuZy4sIFwidGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2V0IHR5cGVzIGFuZCB0aGUgZ2VuZXJpYyBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uLFwiIFwidGhlIGhhbmRsaW5nIG9mIHNldCBvcGVyYXRpb25zIGR1cmluZyBjb25uZWN0aW9uIHRyYWNraW5nIHVwZGF0ZXMsXCIgb3IgXCJob3cgc2V0IGxvb2t1cHMgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmVcIl0uIExpbmUgNDIxIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIFtzcGVjdWxhdGUgb24gbGlrZWx5IGNvZGUgYmxvY2sgZnVuY3Rpb24sIGUuZy4gXCJzZXQgZWxlbWVudCBhZGRpdGlvbi9yZW1vdmFsXCIsIFwic2V0IGxvb2t1cHNcIiwgXCJpdGVyYXRpb24gbG9naWNcIl0uIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gY29uc2lkZXIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCwgYXMgY29udGV4dCBpcyBrZXkgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpcHNldCBsb2dpYy4gSSdsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiBzcGVjaWZpYyBjb2RlIHN0cnVjdHVyZSB0byBzZWFyY2gsIGUuZy4sIFwiZnVuY3Rpb24gY2FsbHNcIiwgXCJkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb25cIiwgXCJtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb25cIl0sIGFuZCBJJ2xsIGtlZXAgdGhlIGJyb2FkZXIgc3lzdGVtJ3MgYmVoYXZpb3IgaW4gbWluZC4gU3BlY2lmaWNhbGx5LCBJIGFtIGludGVyZXN0ZWQgaW4gaG93IHRoZSBpcHNldCBjb3JlIGludGVyZmFjZXMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiBbaWRlbnRpZnkgc3BlY2lmaWMgcG90ZW50aWFsIGNvbmNlcm5zLCBlLmcuLCBcImNvbmN1cnJlbmN5IGlzc3VlcyxcIiBcIm1lbW9yeSBsZWFrcyxcIiBvciBcInBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrc1wiXSBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjU5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MjAuOTg1MDUwNDY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE1OlxcdFxcdFtJUFNFVF9FWFRfSURfU0tCSU5GT10gPSB7XFxuIDQxNjpcXHRcXHRcXHQudHlwZVxcdD0gSVBTRVRfRVhUX1NLQklORk8sXFxuIDQxNzpcXHRcXHRcXHQuZmxhZ1xcdD0gSVBTRVRfRkxBR19XSVRIX1NLQklORk8sXFxuIDQxODpcXHRcXHRcXHQubGVuXFx0PSBzaXplb2Yoc3RydWN0IGlwX3NldF9za2JpbmZvKSxcXG4gNDE5OlxcdFxcdFxcdC5hbGlnblxcdD0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9za2JpbmZvKSxcXG4gNDIwOlxcdFxcdH0sXFxuIDQyMTpcXHRcXHRbSVBTRVRfRVhUX0lEX0NPTU1FTlRdID0ge1xcbiA0MjI6XFx0XFx0XFx0LnR5cGVcXHQgPSBJUFNFVF9FWFRfQ09NTUVOVCB8IElQU0VUX0VYVF9ERVNUUk9ZLFxcbiA0MjM6XFx0XFx0XFx0LmZsYWdcXHQgPSBJUFNFVF9GTEFHX1dJVEhfQ09NTUVOVCxcXG4gNDI0OlxcdFxcdFxcdC5sZW5cXHQgPSBzaXplb2Yoc3RydWN0IGlwX3NldF9jb21tZW50KSxcXG4gNDI1OlxcdFxcdFxcdC5hbGlnblxcdCA9IF9fYWxpZ25vZl9fKHN0cnVjdCBpcF9zZXRfY29tbWVudCksXFxuIDQyNjpcXHRcXHRcXHQuZGVzdHJveSA9IGlwX3NldF9jb21tZW50X2ZyZWUsXFxuIDQyNzpcXHRcXHR9LFxcbiA0Mjg6XFx0fTtcXG4gNDI5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9leHRlbnNpb25zKTtcXG4gNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIGJvb2xcXG4gNDMyOlxcdGFkZF9leHRlbnNpb24oZW51bSBpcF9zZXRfZXh0X2lkIGlkLCB1MzIgZmxhZ3MsIHN0cnVjdCBubGF0dHIgKnRiW10pXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRyZXR1cm4gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmZsYWcgP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyMC45ODU0NDI1MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjI2MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX3NldF9jb21tZW50X2ZyZWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGlwX3NldF9jb21tZW50X2ZyZWVgIGlzIHRoZSAqZGVzdHJveSogZnVuY3Rpb24sIG1lYW5pbmcgaXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBtZW1vcnkgYW5kIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1lbnQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIElQIHNldCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb2NhdGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlc2UgY29tbWVudHMgYXJlIGJlaW5nIGZyZWVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlLCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLiBMZXQncyBnZXQgdG8gaXQgYW5kIGZpbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyMy43ODc3MDc0MjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTI3MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfY29tbWVudF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zODY9c3RhdGljIHZvaWRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6Mzg3OmlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9NDAzPWNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0X3R5cGUgaXBfc2V0X2V4dGVuc2lvbnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy00MjUtXFx0XFx0LmFsaWduXFx0ID0gX19hbGlnbm9mX18oc3RydWN0IGlwX3NldF9jb21tZW50KSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6NDI2OlxcdFxcdC5kZXN0cm95ID0gaXBfc2V0X2NvbW1lbnRfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtNDI3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjI0LjM1ODk4NzQ1N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNjI5MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBpcF9zZXRfY29tbWVudF9mcmVlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiwgYGlwX3NldF9jb21tZW50X2ZyZWVgLiBTZWVtcyBsaWtlIHdlJ3JlIGZvY3VzaW5nIG9uIGZyZWVpbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBjb21tZW50cyBpbiBhbiBJUCBzZXQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3M/IEVycm9yIGhhbmRsaW5nPyBQYXJ0IG9mIGEgYnJvYWRlciBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIElQIHNldC5cblxuSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uLCBhdCBhIG1pbmltdW0sIHRvIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24uIExpa2VseSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBjb21tZW50IHN0cmluZyBpdHNlbGYuIEkgYWxzbyBhbnRpY2lwYXRlIGl0IGhhbmRsaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzOiB3aGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1lbnQgaXMgTlVMTD8gRG9lcyBpdCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBtZW1vcnkgYmVpbmcgZnJlZWQgaXMgYWN0dWFsbHkgdmFsaWQ/IEFuZCB3aGF0IGFib3V0IGNvbmN1cnJlbmN5PyBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGEgcmFjZSBjb25kaXRpb24gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggb3RoZXIgc2V0IG9wZXJhdGlvbnM/IFRob3NlIGFyZSB0aGUgdGhpbmdzIEknbSBsb29raW5nIGZvciByaWdodCBvZmYgdGhlIGJhdCwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbi5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlaW5nIGNsZWFuZWQgdXAsIGhvdyBpdCdzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLiBGcm9tIGhlcmUsIEknbGwgYXNzZXNzIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MjoyNy43ODI2MjAyODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODY6XFx0c3RhdGljIHZvaWRcXG4gMzg3OlxcdGlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXFxuIDM4ODpcXHR7XFxuIDM4OTpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQgPSBwdHI7XFxuIDM5MDpcXHRcXHRzdHJ1Y3QgaXBfc2V0X2NvbW1lbnRfcmN1ICpjO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gMzkzOlxcdFxcdGlmICh1bmxpa2VseSghYykpXFxuIDM5NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM5NTpcXHRcXHRzZXQtXFx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDE7XFxuIDM5NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgTlVMTCk7XFxuIDM5NzpcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0dHlwZWRlZiB2b2lkICgqZGVzdHJveWVyKShzdHJ1Y3QgaXBfc2V0ICosIHZvaWQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjI3Ljc4MjgwMjE4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTA4ODI1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG10eXBlX2RlbGAgRnVuY3Rpb24gYW5kIFBvdGVudGlhbCBEb3VibGUtRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUuIEl0ICpzZWVtcyogbGlrZSBmcmVlaW5nIHRoZSBjb21tZW50IHN0cmluZyBpcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCBmb3IgYHNldC1cdTAwM2VleHRfc2l6ZWAgdG8gYmUgZGVjcmVtZW50ZWQgdHdpY2UgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4gT2ggd2FpdCwgYHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO2AgaXMgaW4gdGhlcmUuIFJpZ2h0LCBzbyBpZiBpdCdzIGNhbGxlZCBhIHNlY29uZCB0aW1lLCBgY29tbWVudC1cdTAwM2VjYCB3aWxsIGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBlYXJseSwgbWl0aWdhdGluZyB0aGF0IHJpc2suIFBoZXcsIHRoYXQncyBvbmUgY2hlY2sgZG9uZS5cblxuSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGFuZCBJIHNlZSBgbXR5cGVfZGVsYCBpcyBjYWxsZWQgd2l0aCB0aGUgYGRhdGFgIGZyb20gdGhlIGhhc2ggdGFibGUuIEJ1dCB3YWl0LCBpdCdzIGFsc28gY2FsbGVkIHdpdGggYFx1MDAyNngtXHUwMDNlZGAgaW4gYG10eXBlX3Jlc2l6ZWAhIExldCBtZSBncmFiIHRoYXQgY29kZSBibG9jay4uLlxuXG5gYGBjXG5cdFx0aWYgKHgtXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XG5cdFx0XHRtdHlwZV9hZGQoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIFx1MDAyNngtXHUwMDNlZXh0LCBcdTAwMjZ4LVx1MDAzZW1leHQsIHgtXHUwMDNlZmxhZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtdHlwZV9kZWwoc2V0LCBcdTAwMjZ4LVx1MDAzZWQsIE5VTEwsIE5VTEwsIDApO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyBgXHUwMDI2eC1cdTAwM2VkYCBpcyB0aGUgZWxlbWVudCBkYXRhIHNhdmVkIGR1cmluZyBhIHJlc2l6ZSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGAgaXMsIHNwZWNpZmljYWxseSBob3cgYHgtXHUwMDNlZGAgaXMgcG9wdWxhdGVkLiBIYW5nIG9uLCBJIHNlZSB3aGVyZSBgeGAgaXMgYWxsb2NhdGVkLiBMZXQncyBzZWU6XG5cbmBgYGNcblx0XHRcdGlmICh0LVx1MDAzZXJlc2l6aW5nIFx1MDAyNlx1MDAyNiBleHQgXHUwMDI2XHUwMDI2IGV4dC1cdTAwM2V0YXJnZXQpIHtcblx0XHRcdFx0LyogUmVzaXplIGlzIGluIHByb2Nlc3MgYW5kIGtlcm5lbCBzaWRlIGRlbCxcblx0XHRcdFx0ICogc2F2ZSB2YWx1ZXNcblx0XHRcdFx0ICovXG5cdFx0XHRcdHggPSBremFsbG9jX29iaihzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkLCBHRlBfQVRPTUlDKTtcblx0XHRcdFx0aWYgKHgpIHtcblx0XHRcdFx0XHR4LVx1MDAzZWFkID0gSVBTRVRfREVMO1xuXHRcdFx0XHRcdG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLFxuXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcblx0XHRcdFx0XHR4LVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5cdFx0XHRcdH1cbmBgYFxuXG5XYWl0IGEgc2Vjb25kLi4uYG1lbWNweShcdTAwMjZ4LVx1MDAzZWQsIHZhbHVlLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtgIG9ubHkgY29waWVzIHRoZSBrZXkgZGF0YS4gVGhlIGVsZW1lbnQga2V5LCBidXQgbm90IGFueSBleHRlbnNpb25zISBUaGlzIG1lYW5zIHdlJ3JlICpvbmx5KiBjb3B5aW5nIGBtdHlwZV9lbGVtYCwgdGhlIGtleSwgbm90IHRoZSBleHRlbnNpb25zLi4uIEdvb2QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG10eXBlX2VsZW1gIGluIHBhcnRpY3VsYXIgY29udGFpbnMganVzdCB0aGUga2V5LiBMZXQgbWUgY2hlY2sgYGlwX3NldF9oYXNoX2lwLmNgIHRvIHNlZSB3aGF0IGZpZWxkcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHZlcnkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6MzQuODkxNjMwNDQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxNTkzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjYtI2RlZmluZSBtdHlwZV9zYW1lX3NldFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfc2FtZV9zZXQpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oOjI3OiNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgtMjgtI2RlZmluZSBtdHlwZV90ZXN0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF90ZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oPTE5Nj1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaDoxOTc6bXR5cGVfaXNfZmlsbGVkKGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICp4KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaC0xOTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNzM9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDAtI3VuZGVmIG10eXBlX2RhdGFfbmV4dFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjAxOiN1bmRlZiBtdHlwZV9lbGVtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0NS0jZGVmaW5lIG10eXBlX2RhdGFfbmV4dFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGF0YV9uZXh0KVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjQ2OiNkZWZpbmUgbXR5cGVfZWxlbVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZWxlbSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjc2LSNpZm5kZWYgSEtFWV9EQVRBTEVOXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNzc6I2RlZmluZSBIS0VZX0RBVEFMRU5cXHRcXHRzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNzgtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTI5Mz1zdHJ1Y3QgaHR5cGUge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMTEtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMTI6XFx0c3RydWN0IG10eXBlX2VsZW0gbmV4dDsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHVhZGQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxMy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0zMTY9c3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMxOC1cXHRlbnVtIGlwc2V0X2FkdCBhZDtcXHQvKiBBRER8REVMIGVsZW1lbnQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMxOTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBkO1xcdC8qIEVsZW1lbnQgdmFsdWUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTMyMC1cXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQ7XFx0LyogRXh0ZW5zaW9ucyBmb3IgQUREICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTM4MD1tdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzg2LSNkZWZpbmUgYWhhc2hfZGF0YShuLCBpLCBkc2l6ZSlcXHRcXFxcXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozODc6XFx0KChzdHJ1Y3QgbXR5cGVfZWxlbSAqKSgobiktXFx1MDAzZXZhbHVlICsgKChpKSAqIChkc2l6ZSkpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTM4OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9NDkwPW10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDkyLVxcdHN0cnVjdCBoYnVja2V0ICpuLCAqdG1wO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6NDkzOlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNDk0LVxcdHUzMiBpLCBqLCBkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02MzI9bXR5cGVfcmVzaXplKHN0cnVjdCBpcF9zZXQgKnNldCwgYm9vbCByZXRyaWVkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC02MzktXFx0dTggZmxhZ3M7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo2NDA6XFx0c3RydWN0IG10eXBlX2VsZW0gKnRtcDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0MS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY0MjpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY0MzpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTY0NC1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbiwgKm07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTgzNT1tdHlwZV9leHRfc2l6ZShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHUzMiAqZWxlbWVudHMsIHNpemVfdCAqZXh0X3NpemUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTgzOS1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg0MDpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0MS1cXHR1MzIgaSwgaiwgcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9ODY4PW10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NzItXFx0c3RydWN0IGh0YWJsZSAqdDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjg3MzpcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCA9IHZhbHVlO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6ODc0OlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODc1LVxcdHN0cnVjdCBoYnVja2V0ICpuLCAqb2xkID0gRVJSX1BUUigtRU5PRU5UKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAwMC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMDE6XFx0bWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAwMi1vdmVyd3JpdGVfZXh0ZW5zaW9uczpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTAzNS1cXHRcXHR4LVxcdTAwM2VhZCA9IElQU0VUX0FERDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEwMzY6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4LVxcdTAwM2VkLCB2YWx1ZSwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDM3LVxcdFxcdG1lbWNweShcXHUwMDI2eC1cXHUwMDNlZXh0LCBleHQsIHNpemVvZihzdHJ1Y3QgaXBfc2V0X2V4dCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMDY0PW10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDY4LVxcdHN0cnVjdCBodGFibGUgKnQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDY5OlxcdGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkID0gdmFsdWU7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxMDcwOlxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTA3MS1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTEyNi1cXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTEyNzpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMTI4LVxcdFxcdFxcdFxcdHgtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTExNzc9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTE3ODptdHlwZV9kYXRhX21hdGNoKHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE3OS1cXHRcXHQgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHN0cnVjdCBpcF9zZXQgKnNldCwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMTkxPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTI6bXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5My1cXHRcXHQgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTE5OC1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjExOTk6XFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjAwLSNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTIwMTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjAyLVxcdGludCByZXQsIGksIGogPSAwLCBrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMjUwPW10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI1NC1cXHRzdHJ1Y3QgaHRhYmxlICp0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTI1NTpcXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZCA9IHZhbHVlO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTI1Ni1cXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjEyNTc6XFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMjU4LVxcdGludCBpLCByZXQgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xMzkwPW10eXBlX2xpc3QoY29uc3Qgc3RydWN0IGlwX3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMzk1LVxcdGNvbnN0IHN0cnVjdCBoYnVja2V0ICpuO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTM5NjpcXHRjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEzOTctXFx0dTMyIGZpcnN0ID0gY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjM1LjExOTc5ODQzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDM0MTg1MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBzZXQgSGFzaCBEZWxldGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtdHlwZV9kZWxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBjcml0aWNhbCBmaXggaGVyZS4gSSdtIHNlZWluZyB0aGF0IGBtdHlwZV9lbGVtYCBpcywgYXMgZXhwZWN0ZWQsIGp1c3QgdGhlIGtleS4gVGhlIGV4dGVuc2lvbnMgYXJlIHN0b3JlZCByaWdodCBhZnRlciB0aGUga2V5IGluIHRoZSBoYXNoIGJ1Y2tldC4gVGhlIGBhaGFzaF9kYXRhYCBmdW5jdGlvbiBncmFicyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgaW5jbHVkaW5nIHRob3NlIGV4dGVuc2lvbnMsIGFuZCB0aGF0J3MgY3J1Y2lhbC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0IGluIGBtdHlwZV9kZWxgLCBzcGVjaWZpY2FsbHksIGBkYXRhID0gYWhhc2hfZGF0YShuLCBpLCBzZXQtXHUwMDNlZHNpemUpO2AgY29uZmlybXMgdGhpcy5cblxuVGhlIGtleSBwb2ludCBpcyB0aGlzIGNvbmRpdGlvbmFsOiBgaWYgKGV4dCkgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7YC4gV2hlbiBjYWxsZWQgZnJvbSBgbXR5cGVfcmVzaXplYCwgdGhlIGBleHRgIHZhcmlhYmxlIGlzIE5VTEwsIHdoaWNoIG1lYW5zIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gVGhpcyBpcyB0aGUgZml4LCBhcyB0aGUgZXh0ZW5zaW9ucyB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgZHVyaW5nIHJlc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguXG5cbk5vdywgbGV0IG1lIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgdGhpczogYElQX1NFVGAsIGBJUF9TRVRfSEFTSF9JUGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVmZm9ydHMgY2FwdHVyZSB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aHMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGVyZSBhcmVuJ3QgYW55IHNwZWNpZmljIGV4dGVuc2lvbiBjb25maWdzIHRvIHdvcnJ5IGFib3V0LCBzbyB0aG9zZSB0aHJlZSBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBhbmQgYGhhc2hfaXA2X3Jlc2l6ZWAgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGBtdHlwZV9kZWxgIGlzIGdlbmVyYXRlZCBmb3IgYWxsIGhhc2ggdHlwZXMsIHNvIHRoYXQgc2hvdWxkIGNvdmVyIGV2ZXJ5dGhpbmcuXG5cbkkgc2hvdWxkIGFkZCBhbGwgdGhvc2UgZnVuY3Rpb25zIHRvIHRoZSBsaXN0OyBgaGFzaF9pcDRfZGVsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBpdCBpZiBpdCdzIGluIHRoZSBzeW1ib2wgdGFibGUuIFN5emthbGxlciBpcyBjb3ZlcmFnZSBmb2N1c2VkLCBzbyBpZiBJIGluY2x1ZGUgdGhlc2Ugc3ltYm9scywgaXQgd2lsbCB0cnkgdG8gaGl0IHRoZW0uIExldCBtZSBjb25maXJtIHRoYXQgYGhhc2hfaXA0X2RlbGAgaXMgaW5kZWVkIGdlbmVyYXRlZCwgYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBmaWxlLiBJdCdzIGluIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmNgIG5vdyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0My41NTM5ODY0ODdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjU2NjY3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaF9pcDRfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0My43NDY1NjM1MzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTc3Nzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgTWFjcm8tR2VuZXJhdGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXaHkgaXNuJ3QgYGhhc2hfaXA0X2RlbGAgc2hvd2luZyB1cCBpbiBteSBgZ3JlcGAgc2VhcmNoPyBPaCByaWdodCwgaXQncyBhIG1hY3JvISBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgdXNpbmcgYCNkZWZpbmUgbXR5cGVfZGVsIElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKWAgYW5kIHRoZW4gYCAjZGVmaW5lIElQU0VUX1RPS0VOKGEsIGIpIGEjI2JgLiBTbywgYE1UWVBFYCBpcyBgaGFzaF9pcDRgIGFuZCBgX2RlbGAgaXMsIHdlbGwsIGBfZGVsYC4gVGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBnZW5lcmF0ZSBgaGFzaF9pcDRfZGVsYC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBkZWZpbml0ZWx5IGJlIGluIHRoZSBjb21waWxlZCBiaW5hcnkuIEdvdCBpdC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0IG1lIHRoaW5rLi4uIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBXYWl0LCB0aGF0J3MgYW4gYGlubGluZWAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhgLiBTaW5jZSBpdCdzIGlubGluZSwgaXQgcHJvYmFibHkgd29uJ3QgYmUgYSBzZXBhcmF0ZSBzeW1ib2wgaW4gdGhlIGNvbXBpbGVkIG91dHB1dC4gV2hhdCBhYm91dCBgaXBfc2V0X2NvbW1lbnRfZnJlZWA/IEFoLCB0aGF0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiwgZm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY2AuIEkgY291bGQgYWRkIHRoYXQgdG8gYEZvY3VzU3ltYm9sc2AsIGJ1dOKAplxuXG5Ib2xkIG9uLiBUaGUgYnVnIGlzbid0IHNwZWNpZmljYWxseSBhYm91dCBjb21tZW50czsgaXQncyBhYm91dCBleHRlbnNpb25zIGluIGdlbmVyYWwsIGlzbid0IGl0PyBMZXQgbWUgbGlzdCB0aGUgZXh0ZW5zaW9uczogYGlwX3NldF9za2JpbmZvYCwgYGlwX3NldF9jb3VudGVyYCwgYGlwX3NldF90aW1lb3V0YC4gQnV0LCBkYW1uIGl0LCBgaXBfc2V0X2V4dF9kZXN0cm95YCBvbmx5IGZyZWVzIGNvbW1lbnRzLiBTbyBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byByZXZpc2l0IGBpcF9zZXRfZXh0X2Rlc3Ryb3lgLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCBsb29rIGF0IHRoYXQgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIzNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1Mjo0OS4zMDgzNDM5MjVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMjg2OlxcdGlwX3NldF9leHRfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKmRhdGEpXFxuIDI4NzpcXHR7XFxuIDI4ODpcXHRcXHQvKiBDaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHNldCBhbmRcXG4gMjg5OlxcdFxcdCAqIGNhbGwgaXQncyBkZXN0cm95IGZ1bmN0aW9uIGZvciBpdHMgZXh0ZW5zaW9uIHBhcnQgaW4gZGF0YS5cXG4gMjkwOlxcdFxcdCAqL1xcbiAyOTE6XFx0XFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSkge1xcbiAyOTI6XFx0XFx0XFx0c3RydWN0IGlwX3NldF9jb21tZW50ICpjID0gZXh0X2NvbW1lbnQoZGF0YSwgc2V0KTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0aXBfc2V0X2V4dGVuc2lvbnNbSVBTRVRfRVhUX0lEX0NPTU1FTlRdLmRlc3Ryb3koc2V0LCBjKTtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0aW50IGlwX3NldF9wdXRfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3NldCAqc2V0KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0LyogTmV0bGluayBDQiBhcmdzICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdElQU0VUX0NCX05FVCA9IDAsXFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzMDM6XFx0XFx0SVBTRVRfQ0JfUFJPVE8sXFx0XFx0LyogaXBzZXQgcHJvdG9jb2wgKi9cXG4gMzA0OlxcdFxcdElQU0VUX0NCX0RVTVAsXFx0XFx0LyogZHVtcCBzaW5nbGUgc2V0L2FsbCBzZXRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjQ5LjMwODUyMTQ0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA3NDE0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRG91YmxlIEZyZWUgQnVnIGluIGlwc2V0IFJlc2l6ZSoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIG9ubHkgY2FsbHMgYGRlc3Ryb3lgIGZvciBjb21tZW50cywgd2hpY2ggaW1tZWRpYXRlbHkgcG9pbnRzIHRvIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvbW1lbnQgc3RyaW5nIGR1cmluZyByZXNpemUgcmVwbGF5LiBUbyByZXByb2R1Y2UgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzdGVwczogYW4gaXBzZXQgd2l0aCB0aGUgY29tbWVudCBleHRlbnNpb24gZW5hYmxlZCwgYWRkIGFuIGVsZW1lbnQgd2l0aCBhIGNvbW1lbnQsIHRyaWdnZXIgYSByZXNpemUgb2YgdGhlIGlwc2V0LCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBoYXZlIGEgY29uY3VycmVudCBkZWxldGUgb2YgdGhlIGVsZW1lbnQgaGFwcGVuIGR1cmluZyB0aGF0IHJlc2l6ZSBvcGVyYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHJlc2l6ZSByZXBsYXkgaGFuZGxlcyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgbWVudGlvbnM6XG5cbmBgYGNcblx0XHQvKiBPbiBhIHJlc2l6ZSByZXBsYXkgdGhlIGV4dGVuc2lvbnMgd2VyZSBhbHJlYWR5IGRlc3Ryb3llZC4gKi9cblx0XHRpZiAoZXh0KVxuXHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG5gYGBcblxuYW5kIHRoZSBgbXR5cGVfcmVzaXplYCBmdW5jdGlvbiB0aGF0IHJlcGxheXMgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlc2l6ZTpcblxuYGBgY1xuXHRcdGxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdCwgXHUwMDI2b3JpZy1cdTAwM2VhZCkge1xuXHRcdFx0eCA9IGxpc3RfZW50cnkobCwgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgbGlzdCk7XG5cdFx0XHRpZiAoeC1cdTAwM2VhZCA9PSBJUFNFVF9BREQpIHtcblx0XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG10eXBlX2RlbChzZXQsIFx1MDAyNngtXHUwMDNlZCwgTlVMTCwgTlVMTCwgMCk7XG5cdFx0XHR9XG5cdFx0XHRsaXN0X2RlbChsKTtcblx0XHRcdGtmcmVlKGwpO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyBpdCByZXBsYXlzIEFERCBhbmQgREVMIG9wZXJhdGlvbnMgcmVjb3JkZWQgZHVyaW5nIHRoZSByZXNpemUgaW4gYG9yaWctXHUwMDNlYWRgLiBJZiBhIERFTCBoYXBwZW5lZCAqZHVyaW5nKiB0aGUgcmVzaXplLCBgbXR5cGVfZGVsYCBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIHJlcGxheS4gVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG10eXBlX2RlbGAgaXMgY2FsbGVkIHdpdGggYGV4dCA9PSBOVUxMYC5cblxuQmVmb3JlIHRoZSBwYXRjaCwgYG10eXBlX2RlbGAgd291bGQgdGhlbiBuYWl2ZWx5IGNhbGwgYGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpYC4gQW5kIHRoYXQgaXMgdGhlIHByb2JsZW0uIGBkYXRhYCBpcyB0aGUgZWxlbWVudCBmcm9tIHRoZSAqbmV3KiBoYXNoIHRhYmxlIGB0YCwgdGhhdCB0aGUgZWxlbWVudCB0aGF0IHdhcyBkZWxldGVkICh3aXRoIHRoZSBjb21tZW50KSBkdXJpbmcgdGhlIHJlc2l6ZSB3YXMgY29waWVkIHRvLiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCB3YXMgZGVsZXRlZCBkdXJpbmcgcmVzaXplLCBpdCB3YXMgaW4gdGhlICpvbGQqIGhhc2ggdGFibGUgYG9yaWdgLlxuXG5EdXJpbmcgcmVzaXplLCB0aGUgb3JpZ2luYWwgZWxlbWVudHMgZnJvbSB0aGUgb2xkIGhhc2ggdGFibGUsIGBvcmlnYCwgYXJlIGNvcGllZCB0byB0aGUgbmV3IGhhc2ggdGFibGUsIGB0YC4gVGhlbiwgdGhpcyByZXBsYXlzIHRoZSBvcGVyYXRpb25zIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoZSByZXNpemUuIElmIGEgZGVsZXRlIGlzIHJlcGxheWVkLCB0aGF0IGRlbGV0ZSB0YXJnZXRzIHRoZSBlbGVtZW50IGluIGB0YC5cblxuSGVyZSdzIHRoZSBwcm9ibGVtLiBJdCBpcyBzdXBwb3NlZCB0byBkZWxldGUgZnJvbSBgdGAuXG5cbkR1cmluZyB0aGUgZGVsZXRlIGZyb20gYHRgLCBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgLiBCdXQgd2FpdC4uLiB0aGUgY29tbWVudCBzdGF0ZXMgdGhhdCBcInRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWRcIi4gU28sICp3aGVuKiB3ZXJlIHRoZXkgZGVzdHJveWVkP1xuXG5JIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBtdHlwZV9kZWxgIHdoZW4gaXQncyBjYWxsZWQgKmR1cmluZyogdGhlIHJlc2l6ZSBvcGVyYXRpb24gaXRzZWxmLCB0byB0cmFjayB3aGVuIHRoZSBleHRlbnNpb25zIHdlcmUgZGVzdHJveWVkLiBJIHN1c3BlY3QgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgbG9naWMgZmxhdyB3aGVyZSB0aGUgZXh0ZW5zaW9ucyBhcmUgY2xlYW5lZCB1cCBpbiBvbmUgcGFydCBvZiB0aGUgcmVzaXplIHByb2Nlc3MgYnV0IG5vdCBoYW5kbGVkIGNvcnJlY3RseSBkdXJpbmcgdGhlIHN1YnNlcXVlbnQgcmVwbGF5LiBUaGUgcmVwbGF5IG1pZ2h0IGJlIGNsZWFuaW5nIHVwIGEgc3RydWN0dXJlIGFscmVhZHkgY2xlYW5lZCB1cC4gVGhhdCBkb3VibGUtZnJlZSBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjc4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTI6NTguMDE1OTM4NjM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0XFx0XFx0LyogT24gYSByZXNpemUgcmVwbGF5IHRoZSBleHRlbnNpb25zIHdlcmUgYWxyZWFkeSBkZXN0cm95ZWQuICovXFxuMTExNjpcXHRcXHRcXHRpZiAoZXh0KVxcbjExMTc6XFx0XFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdFxcdGlmICh0LVxcdTAwM2VyZXNpemluZyBcXHUwMDI2XFx1MDAyNiBleHQgXFx1MDAyNlxcdTAwMjYgZXh0LVxcdTAwM2V0YXJnZXQpIHtcXG4xMTIwOlxcdFxcdFxcdFxcdC8qIFJlc2l6ZSBpcyBpbiBwcm9jZXNzIGFuZCBrZXJuZWwgc2lkZSBkZWwsXFxuMTEyMTpcXHRcXHRcXHRcXHQgKiBzYXZlIHZhbHVlc1xcbjExMjI6XFx0XFx0XFx0XFx0ICovXFxuMTEyMzpcXHRcXHRcXHRcXHR4ID0ga3phbGxvY19vYmooc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCwgR0ZQX0FUT01JQyk7XFxuMTEyNDpcXHRcXHRcXHRcXHRpZiAoeCkge1xcbjExMjU6XFx0XFx0XFx0XFx0XFx0eC1cXHUwMDNlYWQgPSBJUFNFVF9ERUw7XFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNngtXFx1MDAzZWQsIHZhbHVlLFxcbjExMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpO1xcbjExMjg6XFx0XFx0XFx0XFx0XFx0eC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4xMTI5OlxcdFxcdFxcdFxcdH1cXG4xMTMwOlxcdFxcdFxcdH1cXG4xMTMxOlxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2MgcG9zOyBpKyspIHtcXG4xMTMyOlxcdFxcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgbi1cXHUwMDNldXNlZCkpXFxuMTEzMzpcXHRcXHRcXHRcXHRcXHRrKys7XFxuMTEzNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUyOjU4LjAxNjE2OTY5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDgxMTY3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25jdXJyZW50IEVsZW1lbnQgTW9kaWZpY2F0aW9uIER1cmluZyBSZXNpemluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpZiBgdC1cdTAwM2VyZXNpemluZyBcdTAwMjZcdTAwMjYgZXh0IFx1MDAyNlx1MDAyNiBleHQtXHUwMDNldGFyZ2V0YCBpcyB0cnVlLCB0aGVuIHdlJ3ZlIGdvdCBhIGtlcm5lbC1zaWRlIGRlbGV0ZSBoYXBwZW5pbmcgY29uY3VycmVudGx5IHdpdGggYSByZXNpemUgb3BlcmF0aW9uLiBCdXQgd2hhdCBhYm91dCB1c2VyLXNpZGUgZGVsZXRlcz8gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggcG9zc2liaWxpdGllcy5cblxuTG9va2luZyBhdCBgbXR5cGVfcmVzaXplYCwgdGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBrZXJuZWwtc2lkZSBhZGRzL2RlbGV0ZXMgYXJlIHRoZSBvbmx5IGFjdGlvbnMgdGhhdCBjYW4gaGFwcGVuIGR1cmluZyByZXNpemUuIFVzZXItc3BhY2UgYWN0aW9ucyBhcmUgc2VyaWFsaXplZCBieSB0aGUgbXV0ZXgsIHNvIHRoZXkgc2hvdWxkbid0IGJlIGNvbmN1cnJlbnQuIFRoaXMgY2xhcmlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIGEga2VybmVsLXNpZGUgREVMIGR1cmluZyBhIHJlc2l6ZSB3aWxsIHRyaWdnZXIgYG10eXBlX2RlbGAuXG5cbkluc2lkZSBgbXR5cGVfZGVsYCwgaXQncyBnb2luZyB0byBmaW5kIHRoZSBlbGVtZW50IGluIGBvcmlnYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBgdGAgKHRoZSB0YXJnZXQgdGFibGUgYmVpbmcgcmVzaXplZCkgaXNuJ3QgeWV0IHB1Ymxpc2hlZC4gSXQgd2lsbCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYG9yaWdgLCBhbmQgdGhlbiBpdCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50ICppbiBgb3JpZ2AqLiBDcnVjaWFsbHksIGl0IHNhdmVzIHRoZSBERUwgb3BlcmF0aW9uIGluIGBvcmlnLVx1MDAzZWFkYC5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgbXkgZm9jdXMgc2hpZnRzOiBhZnRlciBgbXR5cGVfcmVzaXplYCBmaW5pc2hlcyBjb3B5aW5nIGV2ZXJ5dGhpbmcgZnJvbSBgb3JpZ2AgdG8gYHRgLCB3aGF0IGhhcHBlbnMgdG8gdGhhdCBkZWxldGVkIGVsZW1lbnQ/IElmIHRoZSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgLCB3aWxsIGl0IGJlIGNvcGllZCB0byBgdGAgZHVyaW5nIHRoZSByZXNpemUgcHJvY2Vzcz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb3B5IGxvb3Agd2l0aGluIGBtdHlwZV9yZXNpemVgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2xlYXJlZCBiaXQgaW4gYG9yaWdgIHByZXZlbnRzIHRoZSBlbGVtZW50IGZyb20gYmVpbmcgY29waWVkIG9yIGlmIGl0J3MgaGFuZGxlZCBkaWZmZXJlbnRseS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3OTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MzowMy40OTczNjg0OTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gNjkxOlxcdFxcdHByX2RlYnVnKFxcXCJhdHRlbXB0IHRvIHJlc2l6ZSBzZXQgJXMgZnJvbSAldSB0byAldSwgdCAlcFxcXFxuXFxcIixcXG4gNjkyOlxcdFxcdFxcdCBzZXQtXFx1MDAzZW5hbWUsIG9yaWctXFx1MDAzZWh0YWJsZV9iaXRzLCBodGFibGVfYml0cywgb3JpZyk7XFxuIDY5MzpcXHRcXHRmb3IgKHIgPSAwOyByIFxcdTAwM2MgYWhhc2hfbnVtb2ZfbG9ja3Mob3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyByKyspIHtcXG4gNjk0OlxcdFxcdFxcdC8qIEV4cGlyZSBtYXkgcmVwbGFjZSBhIGhidWNrZXQgd2l0aCBhbm90aGVyIG9uZSAqL1xcbiA2OTU6XFx0XFx0XFx0cmN1X3JlYWRfbG9ja19iaCgpO1xcbiA2OTY6XFx0XFx0XFx0Zm9yIChpID0gYWhhc2hfYnVja2V0X3N0YXJ0KHIsIG9yaWctXFx1MDAzZWh0YWJsZV9iaXRzKTtcXG4gNjk3OlxcdFxcdFxcdCAgICAgaSBcXHUwMDNjIGFoYXNoX2J1Y2tldF9lbmQociwgb3JpZy1cXHUwMDNlaHRhYmxlX2JpdHMpOyBpKyspIHtcXG4gNjk4OlxcdFxcdFxcdFxcdG4gPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGhidWNrZXQob3JpZywgaSkpO1xcbiA2OTk6XFx0XFx0XFx0XFx0aWYgKCFuKVxcbiA3MDA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcwMTpcXHRcXHRcXHRcXHRwb3MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZuLVxcdTAwM2Vwb3MpO1xcbiA3MDI6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHBvczsgaisrKSB7XFxuIDcwMzpcXHRcXHRcXHRcXHRcXHRpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi1cXHUwMDNldXNlZCkpXFxuIDcwNDpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdGRhdGEgPSBhaGFzaF9kYXRhKG4sIGosIGRzaXplKTtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChTRVRfRUxFTV9FWFBJUkVEKHNldCwgZGF0YSkpXFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzA4OlxcdCNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdC8qIFdlIGhhdmUgcmVhZGVycyBydW5uaW5nIHBhcmFsbGVsIHdpdGggdXMsXFxuIDcxMDpcXHRcXHRcXHRcXHRcXHQgKiBzbyB0aGUgbGl2ZSBkYXRhIGNhbm5vdCBiZSBtb2RpZmllZC5cXG4gNzExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA3MTI6XFx0XFx0XFx0XFx0XFx0ZmxhZ3MgPSAwO1xcbiA3MTM6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KHRtcCwgZGF0YSwgZHNpemUpO1xcbiA3MTQ6XFx0XFx0XFx0XFx0XFx0ZGF0YSA9IHRtcDtcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdG10eXBlX2RhdGFfcmVzZXRfZmxhZ3MoZGF0YSwgXFx1MDAyNmZsYWdzKTtcXG4gNzE2OlxcdCNlbmRpZlxcbiA3MTc6XFx0XFx0XFx0XFx0XFx0a2V5ID0gSEtFWShkYXRhLCBoLVxcdTAwM2Vpbml0dmFsLCBodGFibGVfYml0cyk7XFxuIDcxODpcXHRcXHRcXHRcXHRcXHRtID0gX19pcHNldF9kZXJlZmVyZW5jZShoYnVja2V0KHQsIGtleSkpO1xcbiA3MTk6XFx0XFx0XFx0XFx0XFx0bnIgPSBhaGFzaF9yZWdpb24oa2V5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6NTM6MDMuNDk3NTM1OTczWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjUzMjU3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEFuYWx5c2lzOiBEb3VibGUgRnJlZSBpbiBDb25jdXJyZW50IERFTCBhbmQgUmVzaXplKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBpZiAoIXRlc3RfYml0X2FjcXVpcmUoaiwgbi1cdTAwM2V1c2VkKSkgY29udGludWU7YCBpcyBrZXkuIEl0IG1lYW5zIHRoYXQgaWYgYSBiaXQgd2FzIGNsZWFyZWQgaW4gYG9yaWdgIGR1ZSB0byBhIGNvbmN1cnJlbnQgREVMIG9wZXJhdGlvbiAqYmVmb3JlKiBpdCB3YXMgY29waWVkIHRvIGB0YCwgd2UgKmRvbid0KiBjb3B5IHRoYXQgZWxlbWVudC4gQnV0IHdoeSBkb2VzIGBtdHlwZV9yZXNpemVgIHJlcGxheSB0aGUgREVMIG9uIGB0YCBpZiBpdCB3YXNuJ3QgY29waWVkPyBBaCwgaWYgaXQncyBub3QgY29waWVkIHRvIGB0YCwgYG10eXBlX2RlbGAgb24gYHRgIHdvbid0IGZpbmQgdGhlIGVsZW1lbnQuIFNvLCBsZXQncyBjb25maXJtIHRoYXQuXG5cbkxvb2tpbmcgYXQgdGhlIGBtdHlwZV9kZWxgIHJlcGxheSBsb29wOiBpZiBhbiBlbGVtZW50IHdhc24ndCBjb3BpZWQsIHRoZSBgbXR5cGVfZGVsYCBjYWxsIHdpbGwgbGlrZWx5IHJldHVybiBgLUVOT0VOVGAgb3IgYSBzaW1pbGFyIGVycm9yLiBCdXQgd2FpdCwgd2hhdCBpZiB0aGUgREVMIGhhcHBlbmVkICphZnRlciogdGhlIGJ1Y2tldCB3YXMgY29waWVkIHRvIGB0YD8gVGhhdCdzIHRoZSBjcnV4IG9mIGl0ISBJZiB0aGUgY29weSBvY2N1cnJlZCBiZWZvcmUgdGhlIGNvbmN1cnJlbnQgREVMLCB0aGUgZWxlbWVudCAqaXMqIGNvcGllZCB0byBgdGAuIFRoZW4sIHRoZSBERUwgY2xlYXJzIHRoZSBiaXQgaW4gYG9yaWdgIGFuZCBjYWxscyBgaXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSlgIG9uIHRoZSBlbGVtZW50IGluIGBvcmlnYC5cblxuVGhlbiB0aGUgcmVwbGF5IGNhbGxzIGBtdHlwZV9kZWxgIG9uIGB0YC4gYG10eXBlX2RlbGAgKmZpbmRzKiB0aGUgZWxlbWVudCBpbiBgdGAsIGNsZWFycyB0aGUgYml0IGluIGB0YCwgYW5kIGNhbGxzIGBpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKWAgb24gdGhlIGVsZW1lbnQgaW4gYHRgISBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IHRoZSBlbGVtZW50IGluIGB0YCBpcyBhIGNvcHkgb2YgdGhlIGVsZW1lbnQgaW4gYG9yaWdgLiBUaGlzIG1lYW5zIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlzIGNhbGxlZCAqdHdpY2UqIG9uIHRoZSAqc2FtZSogZXh0ZW5zaW9uIGRhdGEsIGxpa2UgdGhlIHNhbWUgY29tbWVudCBwb2ludGVyISBCaW5nbyEgVGhpcyBpcyB0aGUgZG91YmxlIGZyZWUhXG5cblRoZSBjb21tZW50IHN0cmluZyBpcyBmcmVlZCB3aGVuIHRoZSBpbml0aWFsIGNvbmN1cnJlbnQgREVMIGhhcHBlbnMgb24gYG9yaWdgLiBUaGVuLCB0aGUgcmVwbGF5IGZyZWVzIGl0IGFnYWluIG9uIGB0YCwgbGVhZGluZyB0byB0aGUgZG91YmxlIGZyZWUuIE15IGZpeCB0byBgbXR5cGVfZGVsYCwgaXMgdG8gYWRkIGEgY2hlY2sgYGlmIChleHQpYCB0byBza2lwIGBpcF9zZXRfZXh0X2Rlc3Ryb3lgIGlmIGBleHQgPT0gTlVMTGAgaW4gdGhlIHJlcGxheSwgdGh1cyBwcmV2ZW50aW5nIHRoZSBkb3VibGUgZnJlZSwgc2luY2UgdGhlcmUgaXMgbm8gYGV4dGAgdG8gZGVzdHJveS4gVGhhdCdzIGEgc29saWQgYW5hbHlzaXMuXG5cblNvLCB0aGUgY29yZSBpc3N1ZSBpcyBhIGRvdWJsZSBmcmVlIG9mIHRoZSBjb21tZW50IGV4dGVuc2lvbiBkdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIERFTCBhbmQgcmVzaXplIG9wZXJhdGlvbi4gVG8gdHJpZ2dlciB0aGlzLCB3ZSBuZWVkIGBDT05GSUdfSVBfU0VUYCwgYENPTkZJR19JUF9TRVRfSEFTSF9JUGAgKG9yIGFub3RoZXIgaGFzaCB0eXBlKSwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTkVURklMVEVSX1hUX1NFVGAgdG8gZW5hYmxlIHRoZSBTRVQgdGFyZ2V0IGZvciBrZXJuZWwtc2lkZSBvcGVyYXRpb25zLiBUaW1lIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL3h0X3NldC5jYCBub3cgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUzOjExLjcyMjg2NTI3OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzExMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh0X3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE2MD1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLKSArPSB4dF9jb25ubWFyay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9TRVQpICs9IHh0X3NldC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNjItb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9OQVQpICs9IHh0X25hdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTIyNz1zdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTIzOS1cXHQgKiBwcm90ZWN0ZWQgYnkgdGhlIGlwX3NldF9yZWZfbG9jay5cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI0MDpcXHQgKiBFeHRlcm5hbCBzeXN0ZW1zIChpLmUuIHh0X3NldCkgbXVzdCBjYWxsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyNDEtXFx0ICogaXBfc2V0X25mbmxfZ2V0XyogZnVuY3Rpb25zLCB0aGF0IHdheSB3ZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzE9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NDEtXFx0XFx0aWYgKGR1bXBfZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX0xJU1RfU0VUTkFNRSlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY0MjpcXHRcXHRcXHRnb3RvIG5leHRfc2V0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjQzLVxcdFxcdHN3aXRjaCAoY2ItXFx1MDAzZWFyZ3NbSVBTRVRfQ0JfQVJHMF0pIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYxLVxcdFxcdFxcdGlmIChkdW1wX2ZsYWdzIFxcdTAwMjYgSVBTRVRfRkxBR19MSVNUX0hFQURFUilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY2MjpcXHRcXHRcXHRcXHRnb3RvIG5leHRfc2V0O1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNjYzLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjctXFx0XFx0XFx0XFx0LyogU2V0IGlzIGRvbmUsIHByb2NlZWQgd2l0aCBuZXh0IG9uZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNjY4OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9zZXQ7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2NjktXFx0XFx0XFx0Z290byByZWxlYXNlX3JlZmNvdW50O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE2ODQtXFx0cmV0ID0gLUVGQVVMVDtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTY4NTpuZXh0X3NldDpcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTY4Ni1cXHRpZiAoZHVtcF90eXBlID09IERVTVBfT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTc6I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NldC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTU0PXNldF9tYXRjaF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01NS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo1NjpcXHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz02Nj1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6Njc6Y29tcGF0X2ZsYWdzKHN0cnVjdCB4dF9zZXRfaW5mb192MCAqaW5mbylcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9ODM9c2V0X21hdGNoX3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy04NC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo4NTpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTg2LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xMDg9c2V0X21hdGNoX3YwX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTA5LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjExMDpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjAgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTExMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTE4PXNldF9tYXRjaF92MShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xMTkte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTIwOlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTIxLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xMzQ9c2V0X21hdGNoX3YxX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xMzUte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTM2OlxcdHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MSAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTM3LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xNTY9c2V0X21hdGNoX3YxX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTU3LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjE1ODpcXHRzdHJ1Y3QgeHRfc2V0X2luZm9fbWF0Y2hfdjEgKmluZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9MTY2PXNldF9tYXRjaF92Myhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xNjcte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MTY4OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb19tYXRjaF92MyAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMTY5LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0xODk9c2V0X21hdGNoX3Y0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTE5MC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoxOTE6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0ICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0xOTItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIxMj1zZXRfdGFyZ2V0X3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTIxMy17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyMTQ6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMTUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTIzMj1zZXRfdGFyZ2V0X3YwX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yMzMte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MjM0OlxcdHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjAgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMjM1LVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0yNzQ9c2V0X3RhcmdldF92MF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTI3NS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyNzY6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yNzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTI4Nz1zZXRfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTI4OC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzoyODk6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0yOTAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTMwNz1zZXRfdGFyZ2V0X3YxX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zMDgte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6MzA5OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjEgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtMzEwLVxcdGlwX3NldF9pZF90IGluZGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz0zNDU9c2V0X3RhcmdldF92MV9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM0Ni17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozNDc6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM1OD1zZXRfdGFyZ2V0X3YyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM1OS17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozNjA6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zNjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTM4OT1zZXRfdGFyZ2V0X3YzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTM5MC17XFxubmV0L25ldGZpbHRlci94dF9zZXQuYzozOTE6XFx0Y29uc3Qgc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxubmV0L25ldGZpbHRlci94dF9zZXQuYy0zOTItXFx0aW50IHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NDM0PXNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy00MzUte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NDM2OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNDM3LVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz00NTc9c2V0X3RhcmdldF92M19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNDU4LXtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjQ1OTpcXHRjb25zdCBzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTQ2MC1cXHRpcF9zZXRfaWRfdCBpbmRleDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM9NTE3PXNldF90YXJnZXRfdjNfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy01MTgte1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NTE5OlxcdGNvbnN0IHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNTIwLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYz01Mjk9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzZXRfbWF0Y2hlc1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTUzNC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjUzNTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YwKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTUzNi1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YwX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU0NC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU0NTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU0Ni1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1NC1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU1NTpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU1Ni1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU2NS1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU2NjpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU2Ny1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3NS1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU3NjpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU3Ny1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4Ni1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU4NzpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU4OC1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU5Ni1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjU5NzpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTU5OC1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3YzX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYwNy1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92NCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYwODpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYwOS1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxNy1cXHRcXHQubWF0Y2hcXHRcXHQ9IHNldF9tYXRjaF92NCxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjYxODpcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX21hdGNoX3Y0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYxOS1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X21hdGNoX3Y0X2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jPTYyNT1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBzZXRfdGFyZ2V0c1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTYzMC1cXHRcXHQudGFyZ2V0XFx0XFx0PSBzZXRfdGFyZ2V0X3YwLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjMxOlxcdFxcdC50YXJnZXRzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MCksXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02MzItXFx0XFx0LmNoZWNrZW50cnlcXHQ9IHNldF90YXJnZXRfdjBfY2hlY2tlbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjQwLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjEsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2NDE6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YxKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY0Mi1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X3RhcmdldF92MV9jaGVja2VudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02NTAtXFx0XFx0LnRhcmdldFxcdFxcdD0gc2V0X3RhcmdldF92MSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjY1MTpcXHRcXHQudGFyZ2V0c2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjEpLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjUyLVxcdFxcdC5jaGVja2VudHJ5XFx0PSBzZXRfdGFyZ2V0X3YxX2NoZWNrZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY2MS1cXHRcXHQudGFyZ2V0XFx0XFx0PSBzZXRfdGFyZ2V0X3YyLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NjYyOlxcdFxcdC50YXJnZXRzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3NldF9pbmZvX3RhcmdldF92MiksXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02NjMtXFx0XFx0LmNoZWNrZW50cnlcXHQ9IHNldF90YXJnZXRfdjJfY2hlY2tlbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjcxLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjIsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2NzI6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YyKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY3My1cXHRcXHQuY2hlY2tlbnRyeVxcdD0gc2V0X3RhcmdldF92Ml9jaGVja2VudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9zZXQuYy02ODItXFx0XFx0LnRhcmdldFxcdFxcdD0gc2V0X3RhcmdldF92MyxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjY4MzpcXHRcXHQudGFyZ2V0c2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCB4dF9zZXRfaW5mb190YXJnZXRfdjMpLFxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjg0LVxcdFxcdC5jaGVja19ob29rc1xcdD0gc2V0X3RhcmdldF92M19jaGVja19ob29rcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNjkzLVxcdFxcdC50YXJnZXRcXHRcXHQ9IHNldF90YXJnZXRfdjMsXFxubmV0L25ldGZpbHRlci94dF9zZXQuYzo2OTQ6XFx0XFx0LnRhcmdldHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfc2V0X2luZm9fdGFyZ2V0X3YzKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTY5NS1cXHRcXHQuY2hlY2tfaG9va3NcXHQ9IHNldF90YXJnZXRfdjNfY2hlY2tfaG9va3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jLTcwMS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcwMjpzdGF0aWMgaW50IF9faW5pdCB4dF9zZXRfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzAzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE1LVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzE2OnN0YXRpYyB2b2lkIF9fZXhpdCB4dF9zZXRfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzE3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmMtNzIxLVxcbm5ldC9uZXRmaWx0ZXIveHRfc2V0LmM6NzIyOm1vZHVsZV9pbml0KHh0X3NldF9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3NldC5jOjcyMzptb2R1bGVfZXhpdCh4dF9zZXRfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjUzOjExLjk1NTU4MjMzMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU5MDAzMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNldCBEb3VibGUtRnJlZSBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTkVURklMVEVSX1hUX1NFVGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3IgYHh0X3NldGAuIFRoYXQncyBnb2luZyBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm93LCBsZXQncyBsb29rIGF0IHRob3NlIGZvY3VzIHN5bWJvbHMgYWdhaW4uIFdlIGhhdmU6XG5cbmBoYXNoX2lwNF9kZWxgLCBgaGFzaF9pcDZfZGVsYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ2X2RlbGAsIGBoYXNoX2lwNF9yZXNpemVgLCBgaGFzaF9pcDZfcmVzaXplYCwgYGhhc2hfbmV0NF9yZXNpemVgLCBgaGFzaF9uZXQ2X3Jlc2l6ZWAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuXG5cbldhaXQgYSBtaW51dGUsIGBoYXNoX2lwNF9kZWxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGJlIHRyaWNreS4gQnV0LCB1bmxlc3MgaXQncyBpbmxpbmVkLCBpdCAqc2hvdWxkKiBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBMZXQgbWUgY29uZmlybS4uLiBZZXAsIGBtdHlwZV9kZWxgIGlzIHN0YXRpYywgYW5kIGl0J3Mgc3Vic3RhbnRpYWwgZW5vdWdoIHRoYXQgaW5saW5pbmcgaXMgdW5saWtlbHkuIEknbGwgdmVyaWZ5IGlmIGBtdHlwZV9kZWxgIGlzIGRlY2xhcmVkIGFzIGlubGluZS4gTm8sIGl0J3MganVzdCBgc3RhdGljIGludCBtdHlwZV9kZWwoLi4uKWAuIFNvLCB0aGF0J3MgZGVmaW5pdGVseSBhIGRpc3RpbmN0IHN5bWJvbC5cblxuV2hpbGUgSSdtIGhlcmUsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBzeW1ib2xzLiBBbmQgeWVzLCBgbXR5cGVfcmVzaXplYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gY29uZmlybSB0aGF0IGBoYXNoX2lwNF9yZXNpemVgIHdpbGwgYWxzbyBiZSBhIHN5bWJvbCB3ZSBjYW4gdXNlLlxuXG5BbHJpZ2h0LCBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoYXQgc2V0IG9mIGZvY3VzIHN5bWJvbHMgbm93LiBMb29rcyBzb2xpZC5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBjb25maWdzOiBgSVBfU0VUYCwgYElQX1NFVF9IQVNIX0lQYCwgYElQX1NFVF9IQVNIX05FVGAsIGFuZCBgTkVURklMVEVSX1hUX1NFVGAuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBXaGF0IGhhcHBlbnMgaXMgdGhpczogdGhlcmUncyBhIGtlcm5lbC1zaWRlIGRlbGV0ZSwgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBsaWtlIGFuIGlwdGFibGVzIFNFVCB0YXJnZXQsIGFuZCBpdCdzIGhhcHBlbmluZyBjb25jdXJyZW50bHkgd2l0aCBhIGhhc2gtYmFzZWQgaXBzZXQgcmVzaXplLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdvIHdyb25nOiB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMsIGxpa2UgY29tbWVudHMsIGdldCBkZXN0cm95ZWQuIFRoZW4sIHRoZSByZXNpemUgb3BlcmF0aW9uIHJlcGxheXMgdGhlIGRlbGV0ZSBvbiB0aGUgbmV3IGhhc2ggdGFibGUsIGFuZCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCAqYWdhaW4qLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuIFRoZSBwYXRjaCBzaW1wbHkgYWRkcyBhIGNoZWNrLCBgaWYgKGV4dClgLCB0byBza2lwIGRlc3Ryb3lpbmcgdGhlIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIHdvdWxkIGJlIE5VTEwgaW4gdGhlIHNlY29uZCBjYWxsKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGEgcmVhY2hhYmxlIGJ1Zy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4gYElQX1NFVF9IQVNIX0lQYCBhbmQgYElQX1NFVF9IQVNIX05FVGAgYXJlIGdvb2QgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBoYXNoIHR5cGVzLiBgTkVURklMVEVSX1hUX1NFVGAgaXMgcmVxdWlyZWQgdG8gdHJpZ2dlciB0aGUga2VybmVsLXNpZGUgZGVsZXRlLCBhbmQgYElQX1NFVGAgaXMgdGhlIGNvcmUgaXBzZXQgc3Vic3lzdGVtLiBZZXMsIHRoYXQncyBhbGwuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDk5LCJPdXRwdXRUb2tlbnMiOjI3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjo1MzoyMS40MTQ1ODg2NDdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1NDU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhc2hfaXA0X2RlbFwiLFxuICAgIFwiaGFzaF9pcDZfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDZfZGVsXCIsXG4gICAgXCJoYXNoX2lwNF9yZXNpemVcIixcbiAgICBcImhhc2hfaXA2X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9uZXQ2X3Jlc2l6ZVwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZyZWUgYnVnIGluIHRoZSBuZXRmaWx0ZXIgaXBzZXQgc3Vic3lzdGVtLiBEdXJpbmcgYSBjb25jdXJyZW50IGtlcm5lbC1zaWRlIGRlbGV0ZSAoZS5nLiwgdmlhIHRoZSBpcHRhYmxlcyBTRVQgdGFyZ2V0KSBhbmQgYSByZXNpemUgb2YgYSBoYXNoLWJhc2VkIGlwc2V0LCB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbnMgKGxpa2UgY29tbWVudHMpIGFyZSBkZXN0cm95ZWQuIFdoZW4gdGhlIHJlc2l6ZSBvcGVyYXRpb24gcmVwbGF5cyB0aGUgZGVsZXRlIG9uIHRoZSBuZXcgaGFzaCB0YWJsZSwgaXQgcHJldmlvdXNseSBjYWxsZWQgYGlwX3NldF9leHRfZGVzdHJveWAgYWdhaW4sIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaWYgKGV4dClgIHRvIHNraXAgZGVzdHJveWluZyBleHRlbnNpb25zIGR1cmluZyB0aGUgcmVwbGF5ICh3aGVyZSBgZXh0YCBpcyBOVUxMKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIHJlYWNoYWJsZSBidWcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFzaF9pcDRfZGVsXCIsXG4gICAgXCJoYXNoX2lwNl9kZWxcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0Nl9kZWxcIixcbiAgICBcImhhc2hfaXA0X3Jlc2l6ZVwiLFxuICAgIFwiaGFzaF9pcDZfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDRfcmVzaXplXCIsXG4gICAgXCJoYXNoX25ldDZfcmVzaXplXCIsXG4gICAgXCJpcF9zZXRfY29tbWVudF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZnJlZSBidWcgaW4gdGhlIG5ldGZpbHRlciBpcHNldCBzdWJzeXN0ZW0uIER1cmluZyBhIGNvbmN1cnJlbnQga2VybmVsLXNpZGUgZGVsZXRlIChlLmcuLCB2aWEgdGhlIGlwdGFibGVzIFNFVCB0YXJnZXQpIGFuZCBhIHJlc2l6ZSBvZiBhIGhhc2gtYmFzZWQgaXBzZXQsIHRoZSBlbGVtZW50J3MgZXh0ZW5zaW9ucyAobGlrZSBjb21tZW50cykgYXJlIGRlc3Ryb3llZC4gV2hlbiB0aGUgcmVzaXplIG9wZXJhdGlvbiByZXBsYXlzIHRoZSBkZWxldGUgb24gdGhlIG5ldyBoYXNoIHRhYmxlLCBpdCBwcmV2aW91c2x5IGNhbGxlZCBgaXBfc2V0X2V4dF9kZXN0cm95YCBhZ2FpbiwgbGVhZGluZyB0byBhIGRvdWJsZSBmcmVlLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpZiAoZXh0KWAgdG8gc2tpcCBkZXN0cm95aW5nIGV4dGVuc2lvbnMgZHVyaW5nIHRoZSByZXBsYXkgKHdoZXJlIGBleHRgIGlzIE5VTEwpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmVhY2hhYmxlIGJ1Zy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[1] Phase: Succeeded StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-13 22:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-13 22:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2] Phase: Succeeded StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-13 22:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 22:53:33 +0000 UTC FinishedAt: 2026-07-13 22:53:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1105800244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 22:53:43 +0000 UTC FinishedAt: 2026-07-13 23:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 22:53:43 +0000 UTC FinishedAt: 2026-07-13 23:23:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*30ac5fad-20b5-4813-a150-2e82b5be75ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1105800244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5253d016-b3f6-4c23-a755-a6d3ee847859", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2655838770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 22:53:43 +0000 UTC FinishedAt: 2026-07-13 23:22:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*30ac5fad-20b5-4813-a150-2e82b5be75ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1105800244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5253d016-b3f6-4c23-a755-a6d3ee847859", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2655838770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 23:23:12 +0000 UTC FinishedAt: 2026-07-13 23:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 23:23:12 +0000 UTC FinishedAt: 2026-07-13 23:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 23:23:12 +0000 UTC FinishedAt: 2026-07-13 23:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 23:23:12 +0000 UTC FinishedAt: 2026-07-13 23:23:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1273240051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 23:23:22 +0000 UTC FinishedAt: 2026-07-13 23:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 23:23:22 +0000 UTC FinishedAt: 2026-07-13 23:25:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5253d016-b3f6-4c23-a755-a6d3ee847859,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2655838770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 23:25:37 +0000 UTC FinishedAt: 2026-07-13 23:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 23:25:37 +0000 UTC FinishedAt: 2026-07-13 23:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 23:25:37 +0000 UTC FinishedAt: 2026-07-13 23:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 23:25:37 +0000 UTC FinishedAt: 2026-07-13 23:58:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*30ac5fad-20b5-4813-a150-2e82b5be75ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1273240051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "56c9fed1-b9db-45f5-818e-76e6e3d6818b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2970276263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 23:25:37 +0000 UTC FinishedAt: 2026-07-13 23:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*30ac5fad-20b5-4813-a150-2e82b5be75ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-1273240051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "56c9fed1-b9db-45f5-818e-76e6e3d6818b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2970276263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 23:58:29 +0000 UTC FinishedAt: 2026-07-13 23:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 23:58:29 +0000 UTC FinishedAt: 2026-07-13 23:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 23:58:29 +0000 UTC FinishedAt: 2026-07-14 00:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 23:58:29 +0000 UTC FinishedAt: 2026-07-14 00:00:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56c9fed1-b9db-45f5-818e-76e6e3d6818b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2970276263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5253d016-b3f6-4c23-a755-a6d3ee847859,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56c9fed1-b9db-45f5-818e-76e6e3d6818b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2655838770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2970276263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 00:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 00:00:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-296843500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 00:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 00:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 00:00:20 +0000 UTC FinishedAt: 2026-07-14 00:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 00:00:30 +0000 UTC FinishedAt: 2026-07-14 03:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4vxt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hash_ip4_del","hash_ip6_del","hash_net4_del","hash_net6_del","hash_ip4_resize","hash_ip6_resize","hash_net4_resize","hash_net6_resize","ip_set_comment_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SET","IP_SET_HASH_IP","IP_SET_HASH_NET","NETFILTER_XT_SET"],"series_id":"bc05cd38-238d-45da-8307-8a0d42a98c38","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 00:00:30 +0000 UTC FinishedAt: 2026-07-14 03:03:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5253d016-b3f6-4c23-a755-a6d3ee847859,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56c9fed1-b9db-45f5-818e-76e6e3d6818b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2655838770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-build-action-2970276263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4vxt/series-workflowd4vxt-convert-artifact-296843500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}