Name: series-workflowl8k9f Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[0] Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:50:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "f375df7f-5729-4bf2-b2f1-2feae1c106c8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_from_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGZvciB0aGUgJiMzOTtmaWxlJiMzOTsgYXJndW1lbnQgaW4gdGhlICYjMzk7YnBmX3NvY2tfZnJvbV9maWxlJiMzOTsgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICYjMzk7c29ja19mcm9tX2ZpbGUmIzM5OyBpcyBjYWxsZWQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAoc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgb29wc2VzKSBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YWU5MjQzZWE5MzgxYTFmYWQ3NjU5MDBlZjhlZTNmZGExMWVkYTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XHRpZiAoZmlsZSlcbiYjNDM7XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQ3OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTIxODIsNyAmIzQzOzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7CiAKIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwogfQogCiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29jayBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNlZW1zIGxpa2Ugc29tZW9uZSBmb3VuZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBxdWljayBsb29rLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogdGhleSYjMzk7dmUgYWRkZWQgYSBgaWYgKGZpbGUpYCBjaGVjayByaWdodCBiZWZvcmUgdGhlIGBzb2NrX2Zyb21fZmlsZShmaWxlKWAgY2FsbC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBgZmlsZWAgaXNuJiMzOTt0IE5VTEwgYmVmb3JlIHBhc3NpbmcgaXQgdG8gYHNvY2tfZnJvbV9maWxlYC4gQSBnb29kLCBjbGVhbiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXBwcm9hY2guCgpJIG5lZWQgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgaXRzIG5lY2Vzc2l0eSwgc28gbGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMsIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzIHRydWx5IHdhcnJhbnRlZC4gVGhpcyBsb29rcyBsaWtlIGEgcXVpY2sgd2luIGlmIGl0JiMzOTtzIGNvcnJlY3QsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Mi1CVEZfSUQoc3RydWN0LCBzb2NrZXQpXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5Olx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIwMC1cdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIwMTpcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSGVscGVyIEZ1bmN0aW9uIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEl0JiMzOTtzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN04oCUdGhvc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhYm91dCBwcmV2ZW50aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgaWYgYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGBmaWxlYCBwb2ludGVyIHRvIGl0LiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBldmVuIHBvc3NpYmxlPyBgQVJHX1BUUl9UT19CVEZfSURgIHVzdWFsbHkgcmVzdHJpY3RzIE5VTEwsIHVubGVzcyBpdOKAmXMgdGhlIGBPUl9OVUxMYCB2YXJpYW50LiBIbW0sIGlzIHRoaXMgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IGluIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBvciBpcyBpdCBhIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogYSB3b3J0aHdoaWxlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gWWVwLCBpdCYjMzk7cyBhIEJQRiBoZWxwZXIsIHNvIGFic29sdXRlbHkgaXQgaXMuIE5vdywgSSBuZWVkIHRvIGNsYXJpZnkgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9sIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBtYWNybyB0aGF04oCZcyBhY3R1YWxseSB1c2VkOiBgQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIC4uLilgLiBJIHNob3VsZCB2ZXJpZnkgaG93IGl0IGV4cGFuZHMsIGFzIHNvbWV0aW1lcyB0aG9zZSBtYWNyb3MgYWRkIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gTGV0JiMzOTtzIHNlZS4uLiBpdCBleHBhbmRzIHN0cmFpZ2h0IHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLiBOb3QgZXh0cmEgY29tcGxleGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIEJQRi9uZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYW5kbGVzIHNvY2tldC1yZWxhdGVkIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIG5hbWUsIGJ1dCBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgc3RhdGljIGFuYWx5c2lzLCBlaXRoZXIgbWFudWFsbHkgdGhyb3VnaCBjb2RlIG5hdmlnYXRpb24gb3IgYnkgbGV2ZXJhZ2luZyB0b29scyBsaWtlIGBncmVwYCwgYGNzY29wZWAsIGBjbGFuZ2RgLCBvciBzaW1pbGFyIGNvZGUgc2VhcmNoIHRlY2huaXF1ZXMgb24gdGhlIHJlbGV2YW50IGNvZGViYXNlIChsaWtlbHkgdGhlIGtlcm5lbCkuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIHRoZSB0eXBlcyBvZiBvcGVyYXRpb25zIGl0JiMzOTtzIGludm9sdmVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZV9wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkyNjpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXHRjYXNlIEJQRl9GVU5DX3NvY2tfZnJvbV9maWxlOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XHRcdHJldHVybiBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3NvY2tldF9jb29raWU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIEhlbHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gUmlnaHQsIHRoaXMgaXMgYSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdHJhY2luZyBwcm9ncmFtcy4gVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBhIGJpdCBvZmYuIEkgc2VlIGBCUEZfQ0FMTF8xYCBleHBhbmRzIHRvICpib3RoKiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgYW5kIGp1c3QgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRoYXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGFuZCBsaWtlbHkgc3VnZ2VzdHMgc29tZSBsb3ctbGV2ZWwgaW5kaXJlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoaXMg4oCTIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBCUEZfQ0FMTF8xYCBtYWNybyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCBjb3VsZCBiZSBmb3IgQUJJIGNvbXBhdGliaWxpdHksIHZlcnNpb25pbmcgb3IgYSBidW5jaCBvZiBvdGhlciByZWFzb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjYtI2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBCUEZfQ0FMTF94YCwmIzM0OyBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGNvbnNpZGVyaW5nIGl0IGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQlBGX0NBTExfeGAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgSSYjMzk7bSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24sIGxpa2VseSBvbmUgb2YgdGhlIG1hbnkgYXZhaWxhYmxlIGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGVjb3N5c3RlbS4gVGhlICYjMzQ7eCYjMzQ7IGlzIG9idmlvdXNseSBhIHBsYWNlaG9sZGVyIOKAkyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgKnBhcnRpY3VsYXIqIGZ1bmN0aW9uLCBidXQgaGF2ZW4mIzM5O3Qgc3BlY2lmaWVkIHdoaWNoIG9uZSB5ZXQuIE15IG1pbmQgaXMgcHJvYmFibHkgc2lmdGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBwcmV2aW91cyBjb2RlIEkmIzM5O3ZlIHdyaXR0ZW4sIG9yIHByb2JsZW1zIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlIHRvIGRldGVybWluZSB3aGljaCBgQlBGX0NBTExgIGlzIG1vc3QgcmVsZXZhbnQgdG8gdGhlIHRhc2sgYXQgaGFuZC4gVGhpcyBpcyB0aGUgbW9tZW50IEkgY2hvb3NlIHdoYXQgZnVuY3Rpb24gSSYjMzk7bSBpbXBsZW1lbnRpbmcuIEkmIzM5O20gbGlrZWx5IGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGxpa2U6ICYjMzQ7V2hhdCBmdW5jdGlvbmFsaXR5IGRvIEkgbmVlZD8gQW0gSSBkZWFsaW5nIHdpdGggbWFwcywgbmV0d29ya2luZyBkYXRhLCB0cmFjaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8mIzM0OyBUaGUgcGFydGljdWxhciB1c2UgY2FzZSB3aWxsIGRldGVybWluZSB0aGUgYmVzdCBoZWxwZXIuIFBlcmhhcHMgSSYjMzk7bSB0cnlpbmcgdG8gaW1wbGVtZW50IGEgc3BlY2lmaWMgQlBGIHByb2dyYW0sIG9wdGltaXplIGFuIGV4aXN0aW5nIG9uZSwgb3IgZGVidWcgYSBwZXJmb3JtYW5jZSBpc3N1ZS4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgYXJndW1lbnRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlIHJlc3VsdHMgSSBuZWVkLiBUaGUga2V5IGZvciBhIEJQRiBjYWxsIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUga2VybmVsLXByb3ZpZGVkIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQlBGIEZpbHRlcmluZyBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLiBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYxMS4gSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBmaW5kIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgaG93IHRoZXNlIGZpbHRlcnMgYXJlIG9yZ2FuaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCBob3cgdG8gZGVidWcgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgQlBGIHByb2dyYW0gcmVwcmVzZW50YXRpb24sIHRoZSBjb250ZXh0IHN0cnVjdHVyZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YS4gS25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgYWxsIHdvcmsgdG9nZXRoZXIuIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgdW5jb3ZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcbiA2MTE6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTI6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTM6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2MTQ6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2MTU6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2MTY6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2MTc6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE4Olx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2MTk6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIwOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIxOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjIyOlx0XG4gNjIzOlx0I2RlZmluZSBfX05PQVRUUlxuIDYyNDpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2MjU6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI2Olx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNzpcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjg6XHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI5Olx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTk2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBIZWxwZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEJQRiBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAgaXMgZGVmaW5pbmcgYSBmdW5jdGlvbiBjYWxsZWQgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgLiBSaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzIGluIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCwgYXMgaXMgdHlwaWNhbC4gSG1tbSwganVzdCBtYWtpbmcgc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGlzLCB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGFjdHVhbGx5IG5hbWVkIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLgoKTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbCDigJMgYSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCBkZWZpbmVkIGFzIGEgZnVuY3Rpb24uIEFscmlnaHQsIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSBCUEYgaGVscGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2sgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgbXkgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMgZW5hYmxlZC4gRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlIGZvciBGaWx0ZXIubyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZmlsdGVyLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0L2NvcmUgc3Vic3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgc2tpbSBpdCwgbG9va2luZyBmb3IgYW55IHJ1bGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGludm9sdmUgdGhhdCBzcGVjaWZpYyBvYmplY3QgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgaW5jbHVzaW9uLCBhIHZhcmlhYmxlIGRlZmluaXRpb24gdGhhdCBpbmNsdWRlcyBpdCwgb3IgcG9zc2libHkgYSB0YXJnZXQgdGhhdCBidWlsZHMgaXQgYXMgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBmaWx0ZXIub2AgaXMgYnVpbHQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfTkVUYCBpcyBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGJ1aWxkaW5nIHRoZSBlbnRpcmUgYG5ldC9jb3JlYCBzdWJzeXN0ZW0sIHRoZW4gYGZpbHRlci5vYCBnZXRzIGNvbXBpbGVkIHRvby4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGlzIGZ1bmN0aW9uLgoKQWgsIHJpZ2h0LCB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaGVscGVyIGZ1bmN0aW9uLiBUaGF0IG9uZSYjMzk7cyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQmIzM5O3Mgbm90IGFsd2F5cyBvYnZpb3VzLCBzbyBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgYmV5b25kIGp1c3QgdGhlIGJ1aWxkIG9mIGBmaWx0ZXIub2AgaXRzZWxmLiBBbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgZGlzYWJsZSBvciBlbmFibGUgaXQ/IEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyMTc1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzpCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk2Olx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cdC5ncGxfb25seVx0PSBmYWxzZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIwMi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDEyMTgzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgbHVya2luZyBhcm91bmQgdGhlcmUuIFRoYXQgc2VjdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgY29uZGl0aW9ucyBpZiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLiBHb3R0YSBnZXQgYSBmZWVsIGZvciB3aGF0JiMzOTtzIGFjdGl2ZSBhbmQgd2hhdCBpc24mIzM5O3Qgd2l0aGluIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTcwOlx0e1xuMTIxNzE6XHRcdEJURl9UWVBFX0VNSVQoc3RydWN0IG1wdGNwX3NvY2spO1xuMTIxNzI6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfbXB0Y3Bfc29ja19mcm9tX3N1YmZsb3coc2spO1xuMTIxNzM6XHR9XG4xMjE3NDpcdFxuMTIxNzU6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuMTIxNzY6XHRcdC5mdW5jXHRcdD0gYnBmX3NrY190b19tcHRjcF9zb2NrLFxuMTIxNzc6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjEyMTc4Olx0XHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTc5Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fU09DS19DT01NT04sXG4xMjE4MDpcdFx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfTVBUQ1BdLFxuMTIxODE6XHR9O1xuMTIxODI6XHRcbjEyMTgzOlx0QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4xMjE4NDpcdHtcbjEyMTg1Olx0XHRpZiAoZmlsZSlcbjEyMTg2Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbjEyMTg3Olx0XG4xMjE4ODpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4xMjE4OTpcdH1cbjEyMTkwOlx0XG4xMjE5MTpcdEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuMTIxOTI6XHRCVEZfSUQoc3RydWN0LCBzb2NrZXQpXG4xMjE5MzpcdEJURl9JRChzdHJ1Y3QsIGZpbGUpXG4xMjE5NDpcdFxuMTIxOTU6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xuMTIxOTY6XHRcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxuMTIxOTc6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjEyMTk4Olx0XHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTk5Olx0XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbjEyMjAwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuMTIyMDE6XHRcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcbjEyMjAyOlx0fTtcbjEyMjAzOlx0XG4xMjIwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuMTIyMDU6XHRicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuMTIyMDY6XHR7XG4xMjIwNzpcdFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmdW5jO1xuMTIyMDg6XHRcbjEyMjA5Olx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwgb2YgYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGdhdGluZyB0aGUgZnVuY3Rpb24gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gU2luY2UgaXQgaXMgYSBCUEYgaGVscGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIGFuZCB0aGVyZWZvcmUsIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBtYWtlIHRoaXMgd29yaywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIHRoaXMgaXMgcmVsYXRlZCB0byBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGxpa2VseSB3aGF0IGFsbG93cyB1cyB0byB1c2UgaXQuCgpJbml0aWFsbHksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIHN5bWJvbC4gSG9sZCBvbiwgYEJQRl9DQUxMXzFgIGV4cGFuZHMgdG8gYm90aCBgYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIOKAkyBJJiMzOTtsbCBpbmNsdWRlIGJvdGggaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIGFsbCBiYXNlcy4gQWgsIHJpZ2h0LCBgYnBmX3NvY2tfZnJvbV9maWxlYCBpcyB0aGUgd3JhcHBlciwgYW5kIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBpcyB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi4KCkxldCBtZSBjaGVjayBpZiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBZZXMsIGl0IGlzOiBgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgX19fXyMjbmFtZSguLi4pYC4gVGhpcyBtZWFucyB0aGF0IGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBnZXRzIGlubGluZWQgZGlyZWN0bHkgaW50byBgYnBmX3NvY2tfZnJvbV9maWxlYC4gU28sIHRoZSBhY3R1YWwgc3ltYm9sIHRoYXQgd2lsbCBiZSBwcmVzZW50IGluIHRoZSBiaW5hcnkgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRodXMsIEkgd2lsbCB1c2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGFjdHVhbGx5IHVzYWJsZSBieSBCUEYgcHJvZ3JhbXMuIEFuZCB5ZXMsIGl0IGlzIHJldHVybmVkIGJ5IGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgZm9yIGBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZWAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIHRvIHRyYWNpbmcgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gQ29uc2VxdWVudGx5LCBpbiBhZGRpdGlvbiB0byBgQlBGX1NZU0NBTExgLCBJJiMzOTtsbCBuZWVkIGBCUEZfRVZFTlRTYCB0byBzdXBwb3J0IHRyYWNpbmcgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGNsZWFyIHRoYXQgd2UgYWJzb2x1dGVseSBuZWVkIGBCUEZfRVZFTlRTYCBlbmFibGVkIGZvciBwcm9wZXIgQlBGIHByb2dyYW0gdHJhY2luZy4gQWRkaXRpb25hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIHdlbGwsIGFzIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggc3lzdGVtIGNhbGxzLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvZGUgaXRzZWxmOgoKYGBgYwpCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSkKewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwp9CmBgYAoKQWgsIGEgc2ltcGxlIGJ1dCBpbXBvcnRhbnQgYWRkaXRpb24uIFdlJiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgc29ja19mcm9tX2ZpbGVgLiBTbWFydC4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyB0eXBlIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgZnV6emluZyBpcyBtZWFudCB0byBjYXRjaC4gSSYjMzk7bGwgZmxhZyBgYnBmX3NvY2tfZnJvbV9maWxlYCBhcyB0aGUgZm9jYWwgcG9pbnQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiwgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGlzIHVzZWQgaW4gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gV2Ugc2hvdWxkIGtub3cgaWYgaXQmIzM5O3MgY29ubmVjdGVkIGluIGFueSB1bmZvcmVzZWVuIHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkyNjpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcwLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTE3MTogKiBzdHJ1Y3Qgc29ja2V0ICpicGZfc29ja19mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3Mi0gKlx0RGVzY3JpcHRpb25cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1NC1cdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUxNzAtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MTcxOiAqIHN0cnVjdCBzb2NrZXQgKmJwZl9zb2NrX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcyLSAqXHREZXNjcmlwdGlvblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfc2tfc3RvcmFnZV9oZWxwZXJzLmM9MjY9aW50IGZpbGxfc29ja2V0X293bmVyKHN0cnVjdCBicGZfaXRlcl9fdGFza19maWxlICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfc2tfc3RvcmFnZV9oZWxwZXJzLmM6MzY6XHRzb2NrID0gYnBmX3NvY2tfZnJvbV9maWxlKGZpbGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNy1cdGlmICghc29jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODEKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQlBGIE9ic2VydmF0aW9uKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QganVzdCBsaW1pdGVkIHRvIG9uZSBhcmVhLiBJJiMzOTttIHNlZWluZyBpdCB1c2VkIGluIEJQRiBpdGVyYXRvciBwcm9ncmFtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBicm9hZGx5IGFjY2Vzc2libGUgdG8gYm90aCB0cmFjaW5nIGFuZCBpdGVyYXRvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSXQgYWxzbyBzZWVtcyBsaWtlIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgY29uZmlndXJhdGlvbnMgcHJvdmlkZSBlbm91Z2ggZ3JvdW5kd29yayBmb3IgdGhpcyBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2Agd2l0aCB3aGF0IEkmIzM5O3ZlIGZvdW5kLiBUaGlzIGNvbmZpcm1hdGlvbiBhbGxvd3MgbWUgdG8gcHJvY2VlZCBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICYjMzk7ZmlsZSYjMzk7IGFyZ3VtZW50IGluIHRoZSAmIzM5O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzk7IEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAmIzM5O3NvY2tfZnJvbV9maWxlJiMzOTsgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhZTkyNDNlYTkzODFhMWZhZDc2NTkwMGVmOGVlM2ZkYTExZWRhNjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0Nzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0gewogCiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSkKIHsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CWlmIChmaWxlKQomIzQzOwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpOwomIzQzOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDsKIH0KIAogQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXQvQ29yZS9GaWx0ZXIuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBmb3IgYSBOVUxMIGBmaWxlYCBwb2ludGVyIGluIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhbiBgaWYgKGZpbGUpYCBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGVyZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZWAgd2l0aCBhIE5VTEwgYGZpbGVgIHdvdWxkIGxpa2VseSBjcmFzaCB0aGUga2VybmVsLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgdGhlIGtlcm5lbCBoYXMgbWVjaGFuaXNtcyBsaWtlIHBhZ2UgZmF1bHRzLCBvb3BzZXMsIGFuZCBLQVNBTiB0aGF0IHdvdWxkIGhhdmUgY2F1Z2h0IGl0IGV2ZW50dWFsbHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGVsaW1pbmF0ZXMgdGhhdCBwb3RlbnRpYWwuIFRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbiByZWNlaXZlcyBhIGBzdHJ1Y3QgZmlsZSAqYCwgYW5kIGlmIGl0ICppcyogTlVMTCwgYHNvY2tfZnJvbV9maWxlYCB3b3VsZCBiZSBjYWxsZWQgb24gdGhhdCBOVUxMLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcy4KCkNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMsIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIGhlcmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGFkZHJlc3NlZCBieSB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSXQmIzM5O3MgYSBjbGVhbiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZml4LiBNeSBleHBlcnQgb3BpbmlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBnb29kLCBjbGVhbiBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAmIzM5O2ZpbGUmIzM5OyBhcmd1bWVudCBpbiB0aGUgJiMzOTticGZfc29ja19mcm9tX2ZpbGUmIzM5OyBCUEYgaGVscGVyIGZ1bmN0aW9uLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gJiMzOTtzb2NrX2Zyb21fZmlsZSYjMzk7IGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICYjMzk7ZmlsZSYjMzk7IGFyZ3VtZW50IGluIHRoZSAmIzM5O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzk7IEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAmIzM5O3NvY2tfZnJvbV9maWxlJiMzOTsgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUxLjg4ODQ4Mzk5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjI0NDkyNjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICdmaWxlJyBhcmd1bWVudCBpbiB0aGUgJ2JwZl9zb2NrX2Zyb21fZmlsZScgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICdzb2NrX2Zyb21fZmlsZScgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUxLjg4ODQ5MDYzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyNDAwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0Nzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XFxuIFxcbiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcXG4ge1xcbi1cXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuK1xcdGlmIChmaWxlKVxcbitcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuK1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4gfVxcbiBcXG4gQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUyLjU1MTY3MDA2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODI1NjQwNzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YWU5MjQzZWE5MzgxYTFmYWQ3NjU5MDBlZjhlZTNmZGExMWVkYTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDc6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTIxODIsNyArMTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbiBcbiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbiB7XG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4rXHRpZiAoZmlsZSlcbitcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDc6NTIuNTUxNjcyMDE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE2NDgxOTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2sgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTZWVtcyBsaWtlIHNvbWVvbmUgZm91bmQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgcXVpY2sgbG9vay4gVGhlIGNoYW5nZSBpcyBzaW1wbGU6IHRoZXkndmUgYWRkZWQgYSBgaWYgKGZpbGUpYCBjaGVjayByaWdodCBiZWZvcmUgdGhlIGBzb2NrX2Zyb21fZmlsZShmaWxlKWAgY2FsbC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBgZmlsZWAgaXNuJ3QgTlVMTCBiZWZvcmUgcGFzc2luZyBpdCB0byBgc29ja19mcm9tX2ZpbGVgLiBBIGdvb2QsIGNsZWFuIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IGl0cyBuZWNlc3NpdHksIHNvIGxldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMsIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzIHRydWx5IHdhcnJhbnRlZC4gVGhpcyBsb29rcyBsaWtlIGEgcXVpY2sgd2luIGlmIGl0J3MgY29ycmVjdCwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MDAuNzE2NDk1NTA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA1NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5OlxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MDAuNzY5MzA3MjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3ODE3NjUzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEhlbHBlciBGdW5jdGlvbiBmb3IgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSXQncyBhIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdOKAlHRob3NlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWJvdXQgcHJldmVudGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IGlmIGEgQlBGIHByb2dyYW0gcGFzc2VzIGEgTlVMTCBgZmlsZWAgcG9pbnRlciB0byBpdC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBwb3NzaWJsZT8gYEFSR19QVFJfVE9fQlRGX0lEYCB1c3VhbGx5IHJlc3RyaWN0cyBOVUxMLCB1bmxlc3MgaXTigJlzIHRoZSBgT1JfTlVMTGAgdmFyaWFudC4gSG1tLCBpcyB0aGlzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBpbiB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiwgb3IgaXMgaXQgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogYSB3b3J0aHdoaWxlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gWWVwLCBpdCdzIGEgQlBGIGhlbHBlciwgc28gYWJzb2x1dGVseSBpdCBpcy4gTm93LCBJIG5lZWQgdG8gY2xhcmlmeSBteSBmb2N1cy4gVGhlIGtleSBzeW1ib2wgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhlIG1hY3JvIHRoYXTigJlzIGFjdHVhbGx5IHVzZWQ6IGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAuIEkgc2hvdWxkIHZlcmlmeSBob3cgaXQgZXhwYW5kcywgYXMgc29tZXRpbWVzIHRob3NlIG1hY3JvcyBhZGQgYSBsYXllciBvZiBpbmRpcmVjdGlvbiB0aGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZS4uLiBpdCBleHBhbmRzIHN0cmFpZ2h0IHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLiBOb3QgZXh0cmEgY29tcGxleGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0ODoxNi41NTEwNzU4MDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MzE4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0ODoxNi42MDY2MTUzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzI2OTM2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIEJQRi9uZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGFzc3VtaW5nIGl0IGhhbmRsZXMgc29ja2V0LXJlbGF0ZWQgb3BlcmF0aW9ucyBnaXZlbiB0aGUgbmFtZSwgYnV0IGtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCB0byBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBpZGVudGlmeWluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIHJlcXVpcmUgc29tZSBzdGF0aWMgYW5hbHlzaXMsIGVpdGhlciBtYW51YWxseSB0aHJvdWdoIGNvZGUgbmF2aWdhdGlvbiBvciBieSBsZXZlcmFnaW5nIHRvb2xzIGxpa2UgYGdyZXBgLCBgY3Njb3BlYCwgYGNsYW5nZGAsIG9yIHNpbWlsYXIgY29kZSBzZWFyY2ggdGVjaG5pcXVlcyBvbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UgKGxpa2VseSB0aGUga2VybmVsKS4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIHNjb3BlIGFuZCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBpdCdzIGludm9sdmVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MjYuMzMzNTU0OTIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM0MjY0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjI3Ljk0Njk4NTk5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDQxMjkyOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgSGVscGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gUmlnaHQsIHRoaXMgaXMgYSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdHJhY2luZyBwcm9ncmFtcy4gVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBhIGJpdCBvZmYuIEkgc2VlIGBCUEZfQ0FMTF8xYCBleHBhbmRzIHRvICpib3RoKiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgYW5kIGp1c3QgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRoYXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGFuZCBsaWtlbHkgc3VnZ2VzdHMgc29tZSBsb3ctbGV2ZWwgaW5kaXJlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoaXMg4oCTIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYEJQRl9DQUxMXzFgIG1hY3JvIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQgY291bGQgYmUgZm9yIEFCSSBjb21wYXRpYmlsaXR5LCB2ZXJzaW9uaW5nIG9yIGEgYnVuY2ggb2Ygb3RoZXIgcmVhc29ucy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MzkuMzg4MjgyMzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTM5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjQxLjQ3MzQzMTE0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzODU2ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBCUEZfQ0FMTF94YCxcIiBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaXQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBCUEZfQ0FMTF94YC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBJJ20gZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9uLCBsaWtlbHkgb25lIG9mIHRoZSBtYW55IGF2YWlsYWJsZSBpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBlY29zeXN0ZW0uIFRoZSBcInhcIiBpcyBvYnZpb3VzbHkgYSBwbGFjZWhvbGRlciDigJMgSSdtIHRoaW5raW5nIGFib3V0IGEgKnBhcnRpY3VsYXIqIGZ1bmN0aW9uLCBidXQgaGF2ZW4ndCBzcGVjaWZpZWQgd2hpY2ggb25lIHlldC4gTXkgbWluZCBpcyBwcm9iYWJseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHByZXZpb3VzIGNvZGUgSSd2ZSB3cml0dGVuLCBvciBwcm9ibGVtcyBJJ20gdHJ5aW5nIHRvIHNvbHZlIHRvIGRldGVybWluZSB3aGljaCBgQlBGX0NBTExgIGlzIG1vc3QgcmVsZXZhbnQgdG8gdGhlIHRhc2sgYXQgaGFuZC4gVGhpcyBpcyB0aGUgbW9tZW50IEkgY2hvb3NlIHdoYXQgZnVuY3Rpb24gSSdtIGltcGxlbWVudGluZy4gSSdtIGxpa2VseSBhc2tpbmcgbXlzZWxmIHF1ZXN0aW9ucyBsaWtlOiBcIldoYXQgZnVuY3Rpb25hbGl0eSBkbyBJIG5lZWQ/IEFtIEkgZGVhbGluZyB3aXRoIG1hcHMsIG5ldHdvcmtpbmcgZGF0YSwgdHJhY2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XCIgVGhlIHBhcnRpY3VsYXIgdXNlIGNhc2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGJlc3QgaGVscGVyLiBQZXJoYXBzIEknbSB0cnlpbmcgdG8gaW1wbGVtZW50IGEgc3BlY2lmaWMgQlBGIHByb2dyYW0sIG9wdGltaXplIGFuIGV4aXN0aW5nIG9uZSwgb3IgZGVidWcgYSBwZXJmb3JtYW5jZSBpc3N1ZS4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIGNhcGFiaWxpdGllcywgaXRzIGFyZ3VtZW50cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBnZXR0aW5nIHRoZSByZXN1bHRzIEkgbmVlZC4gVGhlIGtleSBmb3IgYSBCUEYgY2FsbCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGtlcm5lbC1wcm92aWRlZCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjUzLjcxMjAwMjU3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTUwNTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6NTUuMjQzNTEyNTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjgxNDU1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlBGIEZpbHRlcmluZyBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgQlBGIGZpbHRlcmluZyBpbXBsZW1lbnRhdGlvbi4gSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYxMS4gSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNydWNpYWwgc3RydWN0dXJlcyB0aGF0IGRlZmluZSBob3cgdGhlc2UgZmlsdGVycyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRhdGEgc3RydWN0dXJlcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZWJ1ZyB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIEJQRiBwcm9ncmFtIHJlcHJlc2VudGF0aW9uLCB0aGUgY29udGV4dCBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEuIEtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBhcmUgbGFpZCBvdXQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCB3b3JrIHRvZ2V0aGVyLiBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjU4LjQ3MTY2MTA4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFxuIDYxMTpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMjpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEzOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTQ6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNTpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTc6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE5OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjA6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMTpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMjpcXHRcXG4gNjIzOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjI0OlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNTpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjY6XFx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI3OlxcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyODpcXHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjk6XFx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6NTguNDcxNzgzMjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzU1NDY3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEhlbHBlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAgaXMgZGVmaW5pbmcgYSBmdW5jdGlvbiBjYWxsZWQgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgLiBSaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzIGluIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCwgYXMgaXMgdHlwaWNhbC4gSG1tbSwganVzdCBtYWtpbmcgc3VyZSBJJ20gZm9sbG93aW5nIHRoaXMsIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aCBpcyBhY3R1YWxseSBuYW1lZCBgYnBmX3NvY2tfZnJvbV9maWxlYC4gT2theSwgZ29vZC5cblxuTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbCDigJMgYSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgaW5kZWVkIGRlZmluZWQgYXMgYSBmdW5jdGlvbi4gQWxyaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIEJQRiBoZWxwZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2sgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMgZW5hYmxlZC4gRmluYWxseSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjAzLjgwNzMzMzUzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NTIyNTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MDUuNTYyNTY3MDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDUyNTg2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBNYWtlZmlsZSBmb3IgRmlsdGVyLm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZmlsdGVyLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0L2NvcmUgc3Vic3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBza2ltIGl0LCBsb29raW5nIGZvciBhbnkgcnVsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW52b2x2ZSB0aGF0IHNwZWNpZmljIG9iamVjdCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgZGlyZWN0IGluY2x1c2lvbiwgYSB2YXJpYWJsZSBkZWZpbml0aW9uIHRoYXQgaW5jbHVkZXMgaXQsIG9yIHBvc3NpYmx5IGEgdGFyZ2V0IHRoYXQgYnVpbGRzIGl0IGFzIHBhcnQgb2YgYSBsYXJnZXIgbW9kdWxlLiBMZXQncyBkaWcgaW4gYW5kIHNlZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTEuNjY3ODI5NDA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkwOTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTEuNzE1NzQzNjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk0NzI4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgRGVwZW5kZW5jaWVzIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmaWx0ZXIub2AgaXMgYnVpbHQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfTkVUYCBpcyBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGJ1aWxkaW5nIHRoZSBlbnRpcmUgYG5ldC9jb3JlYCBzdWJzeXN0ZW0sIHRoZW4gYGZpbHRlci5vYCBnZXRzIGNvbXBpbGVkIHRvby4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZWZpbmVzIHRoaXMgZnVuY3Rpb24uXG5cbkFoLCByaWdodCwgdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIGhlbHBlciBmdW5jdGlvbi4gVGhhdCBvbmUncyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQncyBub3QgYWx3YXlzIG9idmlvdXMsIHNvIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBicGZfc29ja19mcm9tX2ZpbGVgIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIGJleW9uZCBqdXN0IHRoZSBidWlsZCBvZiBgZmlsdGVyLm9gIGl0c2VsZi4gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgb3IgZW5hYmxlIGl0PyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTYuNDQ1MjIxMjE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg2MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19mcm9tX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjE2LjUwMTA4Nzk5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ5MTYwNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxMjE4My4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGx1cmtpbmcgYXJvdW5kIHRoZXJlLiBUaGF0IHNlY3Rpb24gbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbnMgaWYgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZS4gR290dGEgZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGFjdGl2ZSBhbmQgd2hhdCBpc24ndCB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjI2Ljk5MjY5NjQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNzA6XFx0e1xcbjEyMTcxOlxcdFxcdEJURl9UWVBFX0VNSVQoc3RydWN0IG1wdGNwX3NvY2spO1xcbjEyMTcyOlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfbXB0Y3Bfc29ja19mcm9tX3N1YmZsb3coc2spO1xcbjEyMTczOlxcdH1cXG4xMjE3NDpcXHRcXG4xMjE3NTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbjEyMTc2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc2tjX3RvX21wdGNwX3NvY2ssXFxuMTIxNzc6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4xMjE3ODpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNzk6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcXG4xMjE4MDpcXHRcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcXG4xMjE4MTpcXHR9O1xcbjEyMTgyOlxcdFxcbjEyMTgzOlxcdEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbjEyMTg0OlxcdHtcXG4xMjE4NTpcXHRcXHRpZiAoZmlsZSlcXG4xMjE4NjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuMTIxODc6XFx0XFxuMTIxODg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxODk6XFx0fVxcbjEyMTkwOlxcdFxcbjEyMTkxOlxcdEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbjEyMTkyOlxcdEJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG4xMjE5MzpcXHRCVEZfSUQoc3RydWN0LCBmaWxlKVxcbjEyMTk0OlxcdFxcbjEyMTk1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxuMTIxOTY6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG4xMjE5NzpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjEyMTk4OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE5OTpcXHRcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbjEyMjAwOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbjEyMjAxOlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbjEyMjAyOlxcdH07XFxuMTIyMDM6XFx0XFxuMTIyMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuMTIyMDU6XFx0YnBmX3NrX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4xMjIwNjpcXHR7XFxuMTIyMDc6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmdW5jO1xcbjEyMjA4OlxcdFxcbjEyMjA5OlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OToyNi45OTMxMzAwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM5NjM1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGdhdGluZyB0aGUgZnVuY3Rpb24gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gU2luY2UgaXQgaXMgYSBCUEYgaGVscGVyLCBpdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgYW5kIHRoZXJlZm9yZSwgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIG1ha2UgdGhpcyB3b3JrLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyB0aGlzIGlzIHJlbGF0ZWQgdG8gQlBGIGZ1bmN0aW9uYWxpdHksIGFuZCBsaWtlbHkgd2hhdCBhbGxvd3MgdXMgdG8gdXNlIGl0LlxuXG5Jbml0aWFsbHksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIHN5bWJvbC4gSG9sZCBvbiwgYEJQRl9DQUxMXzFgIGV4cGFuZHMgdG8gYm90aCBgYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIOKAkyBJJ2xsIGluY2x1ZGUgYm90aCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY292ZXIgYWxsIGJhc2VzLiBBaCwgcmlnaHQsIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSB3cmFwcGVyLCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLlxuXG5MZXQgbWUgY2hlY2sgaWYgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gWWVzLCBpdCBpczogYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IF9fX18jI25hbWUoLi4uKWAuIFRoaXMgbWVhbnMgdGhhdCBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgZ2V0cyBpbmxpbmVkIGRpcmVjdGx5IGludG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFNvLCB0aGUgYWN0dWFsIHN5bWJvbCB0aGF0IHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgYmluYXJ5IGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLiBUaHVzLCBJIHdpbGwgdXNlIGBicGZfc29ja19mcm9tX2ZpbGVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgaWYgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgdXNhYmxlIGJ5IEJQRiBwcm9ncmFtcy4gQW5kIHllcywgaXQgaXMgcmV0dXJuZWQgYnkgYHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvYCBmb3IgYEJQRl9GVU5DX3NvY2tfZnJvbV9maWxlYC4gVGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSB0byB0cmFjaW5nIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi4gQ29uc2VxdWVudGx5LCBpbiBhZGRpdGlvbiB0byBgQlBGX1NZU0NBTExgLCBJJ2xsIG5lZWQgYEJQRl9FVkVOVFNgIHRvIHN1cHBvcnQgdHJhY2luZyBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjM0LjEzMjc2ODA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzc1NTYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODU0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MzYuMjcwNTI5MDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzE5NjQ0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0J3MgY2xlYXIgdGhhdCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYEJQRl9FVkVOVFNgIGVuYWJsZWQgZm9yIHByb3BlciBCUEYgcHJvZ3JhbSB0cmFjaW5nLiBBZGRpdGlvbmFsbHksIEknbGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhcyB3ZWxsLCBhcyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIHN5c3RlbSBjYWxscy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29kZSBpdHNlbGY6XG5cbmBgYGNcbkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxue1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xufVxuYGBgXG5cbkFoLCBhIHNpbXBsZSBidXQgaW1wb3J0YW50IGFkZGl0aW9uLiBXZSdyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgc29ja19mcm9tX2ZpbGVgLiBTbWFydC4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyB0eXBlIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgZnV6emluZyBpcyBtZWFudCB0byBjYXRjaC4gSSdsbCBmbGFnIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIHRoZSBmb2NhbCBwb2ludCBmb3IgYW55IGZ1enppbmcgZWZmb3J0cy5cblxuRmluYWxseSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiwgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGlzIHVzZWQgaW4gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gV2Ugc2hvdWxkIGtub3cgaWYgaXQncyBjb25uZWN0ZWQgaW4gYW55IHVuZm9yZXNlZW4gd2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo0NC43MDI0OTY2NjRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTIxNzE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcwLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUxNzE6ICogc3RydWN0IHNvY2tldCAqYnBmX3NvY2tfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcyLSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3MC0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MTcxOiAqIHN0cnVjdCBzb2NrZXQgKmJwZl9zb2NrX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3Mi0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jPTI2PWludCBmaWxsX3NvY2tldF9vd25lcihzdHJ1Y3QgYnBmX2l0ZXJfX3Rhc2tfZmlsZSAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jOjM2OlxcdHNvY2sgPSBicGZfc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNy1cXHRpZiAoIXNvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjQ2LjM5NDY3NzU4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3ODg4NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipNeSBCUEYgT2JzZXJ2YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIGNsZWFyIHRoaXMgZnVuY3Rpb25hbGl0eSBpc24ndCBqdXN0IGxpbWl0ZWQgdG8gb25lIGFyZWEuIEknbSBzZWVpbmcgaXQgdXNlZCBpbiBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGJwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBicm9hZGx5IGFjY2Vzc2libGUgdG8gYm90aCB0cmFjaW5nIGFuZCBpdGVyYXRvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSXQgYWxzbyBzZWVtcyBsaWtlIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgY29uZmlndXJhdGlvbnMgcHJvdmlkZSBlbm91Z2ggZ3JvdW5kd29yayBmb3IgdGhpcyBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2Agd2l0aCB3aGF0IEkndmUgZm91bmQuIFRoaXMgY29uZmlybWF0aW9uIGFsbG93cyBtZSB0byBwcm9jZWVkIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MSwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC43MTI1Njk2OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTUwMzA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGEgQlBGIHByb2dyYW0gcGFzc2VzIGEgTlVMTCBmaWxlIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgaGVscGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC44MDgwODIyMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjUzMTQ2ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC44MDg2NjgxMzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMyNDcyMjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICdmaWxlJyBhcmd1bWVudCBpbiB0aGUgJ2JwZl9zb2NrX2Zyb21fZmlsZScgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICdzb2NrX2Zyb21fZmlsZScgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQ3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4ge1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuIH1cbiBcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjUwLjgwODY2OTIxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzI0Njc4NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldC9Db3JlL0ZpbHRlci5jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBmb3IgYSBOVUxMIGBmaWxlYCBwb2ludGVyIGluIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGFuIGBpZiAoZmlsZSlgIGNvbmRpdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoZXJlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlYCB3aXRoIGEgTlVMTCBgZmlsZWAgd291bGQgbGlrZWx5IGNyYXNoIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIOKAkyB0aGUga2VybmVsIGhhcyBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdHMsIG9vcHNlcywgYW5kIEtBU0FOIHRoYXQgd291bGQgaGF2ZSBjYXVnaHQgaXQgZXZlbnR1YWxseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGZpeCBlbGltaW5hdGVzIHRoYXQgcG90ZW50aWFsLiBUaGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgZnVuY3Rpb24gcmVjZWl2ZXMgYSBgc3RydWN0IGZpbGUgKmAsIGFuZCBpZiBpdCAqaXMqIE5VTEwsIGBzb2NrX2Zyb21fZmlsZWAgd291bGQgYmUgY2FsbGVkIG9uIHRoYXQgTlVMTC4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMuXG5cbkNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMsIHRoZXJlJ3Mgbm8gZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIGJlaW5nIGludHJvZHVjZWQgb3IgYWRkcmVzc2VkIGJ5IHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBJdCdzIGEgY2xlYW4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGZpeC4gTXkgZXhwZXJ0IG9waW5pb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGdvb2QsIGNsZWFuIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1OC4xMzMzNjIyMzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAnZmlsZScgYXJndW1lbnQgaW4gdGhlICdicGZfc29ja19mcm9tX2ZpbGUnIEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAnc29ja19mcm9tX2ZpbGUnIGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAnZmlsZScgYXJndW1lbnQgaW4gdGhlICdicGZfc29ja19mcm9tX2ZpbGUnIEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAnc29ja19mcm9tX2ZpbGUnIGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:49:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "f375df7f-5729-4bf2-b2f1-2feae1c106c8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_from_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGZvciB0aGUgJiMzOTtmaWxlJiMzOTsgYXJndW1lbnQgaW4gdGhlICYjMzk7YnBmX3NvY2tfZnJvbV9maWxlJiMzOTsgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICYjMzk7c29ja19mcm9tX2ZpbGUmIzM5OyBpcyBjYWxsZWQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAoc3VjaCBhcyBwYWdlIGZhdWx0cyBhbmQgb29wc2VzKSBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YWU5MjQzZWE5MzgxYTFmYWQ3NjU5MDBlZjhlZTNmZGExMWVkYTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XHRpZiAoZmlsZSlcbiYjNDM7XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQ3OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTIxODIsNyAmIzQzOzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7CiAKIEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwogfQogCiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29jayBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGBicGZfc29ja19mcm9tX2ZpbGVgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNlZW1zIGxpa2Ugc29tZW9uZSBmb3VuZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBxdWljayBsb29rLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogdGhleSYjMzk7dmUgYWRkZWQgYSBgaWYgKGZpbGUpYCBjaGVjayByaWdodCBiZWZvcmUgdGhlIGBzb2NrX2Zyb21fZmlsZShmaWxlKWAgY2FsbC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBgZmlsZWAgaXNuJiMzOTt0IE5VTEwgYmVmb3JlIHBhc3NpbmcgaXQgdG8gYHNvY2tfZnJvbV9maWxlYC4gQSBnb29kLCBjbGVhbiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXBwcm9hY2guCgpJIG5lZWQgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgaXRzIG5lY2Vzc2l0eSwgc28gbGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMsIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzIHRydWx5IHdhcnJhbnRlZC4gVGhpcyBsb29rcyBsaWtlIGEgcXVpY2sgd2luIGlmIGl0JiMzOTtzIGNvcnJlY3QsIGJ1dCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NvY2tfZnJvbV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Mi1CVEZfSUQoc3RydWN0LCBzb2NrZXQpXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5Olx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIwMC1cdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjIwMTpcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSGVscGVyIEZ1bmN0aW9uIGZvciBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEl0JiMzOTtzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN04oCUdGhvc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhYm91dCBwcmV2ZW50aW5nIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgaWYgYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGBmaWxlYCBwb2ludGVyIHRvIGl0LiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgaXMgdGhpcyBldmVuIHBvc3NpYmxlPyBgQVJHX1BUUl9UT19CVEZfSURgIHVzdWFsbHkgcmVzdHJpY3RzIE5VTEwsIHVubGVzcyBpdOKAmXMgdGhlIGBPUl9OVUxMYCB2YXJpYW50LiBIbW0sIGlzIHRoaXMgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IGluIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBvciBpcyBpdCBhIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogYSB3b3J0aHdoaWxlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gWWVwLCBpdCYjMzk7cyBhIEJQRiBoZWxwZXIsIHNvIGFic29sdXRlbHkgaXQgaXMuIE5vdywgSSBuZWVkIHRvIGNsYXJpZnkgbXkgZm9jdXMuIFRoZSBrZXkgc3ltYm9sIGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBtYWNybyB0aGF04oCZcyBhY3R1YWxseSB1c2VkOiBgQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIC4uLilgLiBJIHNob3VsZCB2ZXJpZnkgaG93IGl0IGV4cGFuZHMsIGFzIHNvbWV0aW1lcyB0aG9zZSBtYWNyb3MgYWRkIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gTGV0JiMzOTtzIHNlZS4uLiBpdCBleHBhbmRzIHN0cmFpZ2h0IHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLiBOb3QgZXh0cmEgY29tcGxleGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19mcm9tX2ZpbGVfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTYtXHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIEJQRi9uZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYW5kbGVzIHNvY2tldC1yZWxhdGVkIG9wZXJhdGlvbnMgZ2l2ZW4gdGhlIG5hbWUsIGJ1dCBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgc3RhdGljIGFuYWx5c2lzLCBlaXRoZXIgbWFudWFsbHkgdGhyb3VnaCBjb2RlIG5hdmlnYXRpb24gb3IgYnkgbGV2ZXJhZ2luZyB0b29scyBsaWtlIGBncmVwYCwgYGNzY29wZWAsIGBjbGFuZ2RgLCBvciBzaW1pbGFyIGNvZGUgc2VhcmNoIHRlY2huaXF1ZXMgb24gdGhlIHJlbGV2YW50IGNvZGViYXNlIChsaWtlbHkgdGhlIGtlcm5lbCkuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIHRoZSB0eXBlcyBvZiBvcGVyYXRpb25zIGl0JiMzOTtzIGludm9sdmVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZV9wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkyNjpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXHRjYXNlIEJQRl9GVU5DX3NvY2tfZnJvbV9maWxlOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3NTU6XHRcdHJldHVybiBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3NvY2tldF9jb29raWU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIEhlbHBlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gUmlnaHQsIHRoaXMgaXMgYSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdHJhY2luZyBwcm9ncmFtcy4gVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBhIGJpdCBvZmYuIEkgc2VlIGBCUEZfQ0FMTF8xYCBleHBhbmRzIHRvICpib3RoKiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgYW5kIGp1c3QgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRoYXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGFuZCBsaWtlbHkgc3VnZ2VzdHMgc29tZSBsb3ctbGV2ZWwgaW5kaXJlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoaXMg4oCTIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBCUEZfQ0FMTF8xYCBtYWNybyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCBjb3VsZCBiZSBmb3IgQUJJIGNvbXBhdGliaWxpdHksIHZlcnNpb25pbmcgb3IgYSBidW5jaCBvZiBvdGhlciByZWFzb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjYtI2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBCUEZfQ0FMTF94YCwmIzM0OyBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGNvbnNpZGVyaW5nIGl0IGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQlBGX0NBTExfeGAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgSSYjMzk7bSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIEJQRiBoZWxwZXIgZnVuY3Rpb24sIGxpa2VseSBvbmUgb2YgdGhlIG1hbnkgYXZhaWxhYmxlIGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGVjb3N5c3RlbS4gVGhlICYjMzQ7eCYjMzQ7IGlzIG9idmlvdXNseSBhIHBsYWNlaG9sZGVyIOKAkyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgKnBhcnRpY3VsYXIqIGZ1bmN0aW9uLCBidXQgaGF2ZW4mIzM5O3Qgc3BlY2lmaWVkIHdoaWNoIG9uZSB5ZXQuIE15IG1pbmQgaXMgcHJvYmFibHkgc2lmdGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBwcmV2aW91cyBjb2RlIEkmIzM5O3ZlIHdyaXR0ZW4sIG9yIHByb2JsZW1zIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlIHRvIGRldGVybWluZSB3aGljaCBgQlBGX0NBTExgIGlzIG1vc3QgcmVsZXZhbnQgdG8gdGhlIHRhc2sgYXQgaGFuZC4gVGhpcyBpcyB0aGUgbW9tZW50IEkgY2hvb3NlIHdoYXQgZnVuY3Rpb24gSSYjMzk7bSBpbXBsZW1lbnRpbmcuIEkmIzM5O20gbGlrZWx5IGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGxpa2U6ICYjMzQ7V2hhdCBmdW5jdGlvbmFsaXR5IGRvIEkgbmVlZD8gQW0gSSBkZWFsaW5nIHdpdGggbWFwcywgbmV0d29ya2luZyBkYXRhLCB0cmFjaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8mIzM0OyBUaGUgcGFydGljdWxhciB1c2UgY2FzZSB3aWxsIGRldGVybWluZSB0aGUgYmVzdCBoZWxwZXIuIFBlcmhhcHMgSSYjMzk7bSB0cnlpbmcgdG8gaW1wbGVtZW50IGEgc3BlY2lmaWMgQlBGIHByb2dyYW0sIG9wdGltaXplIGFuIGV4aXN0aW5nIG9uZSwgb3IgZGVidWcgYSBwZXJmb3JtYW5jZSBpc3N1ZS4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgYXJndW1lbnRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlIHJlc3VsdHMgSSBuZWVkLiBUaGUga2V5IGZvciBhIEJQRiBjYWxsIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUga2VybmVsLXByb3ZpZGVkIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQlBGIEZpbHRlcmluZyBTdHJ1Y3R1cmVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgZmlsdGVyaW5nIGltcGxlbWVudGF0aW9uLiBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYxMS4gSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBmaW5kIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgaG93IHRoZXNlIGZpbHRlcnMgYXJlIG9yZ2FuaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCBob3cgdG8gZGVidWcgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgQlBGIHByb2dyYW0gcmVwcmVzZW50YXRpb24sIHRoZSBjb250ZXh0IHN0cnVjdHVyZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YS4gS25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBsYWlkIG91dCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgYWxsIHdvcmsgdG9nZXRoZXIuIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgdW5jb3ZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcbiA2MTE6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTI6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTM6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2MTQ6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2MTU6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2MTY6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2MTc6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE4Olx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2MTk6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIwOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIxOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjIyOlx0XG4gNjIzOlx0I2RlZmluZSBfX05PQVRUUlxuIDYyNDpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2MjU6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI2Olx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNzpcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjg6XHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI5Olx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTk2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBIZWxwZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEJQRiBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAgaXMgZGVmaW5pbmcgYSBmdW5jdGlvbiBjYWxsZWQgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgLiBSaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzIGluIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCwgYXMgaXMgdHlwaWNhbC4gSG1tbSwganVzdCBtYWtpbmcgc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGlzLCB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGFjdHVhbGx5IG5hbWVkIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLgoKTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbCDigJMgYSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGluZGVlZCBkZWZpbmVkIGFzIGEgZnVuY3Rpb24uIEFscmlnaHQsIHRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSBCUEYgaGVscGVyLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2sgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgbXkgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMgZW5hYmxlZC4gRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlIGZvciBGaWx0ZXIubyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZmlsdGVyLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0L2NvcmUgc3Vic3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgc2tpbSBpdCwgbG9va2luZyBmb3IgYW55IHJ1bGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGludm9sdmUgdGhhdCBzcGVjaWZpYyBvYmplY3QgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBkaXJlY3QgaW5jbHVzaW9uLCBhIHZhcmlhYmxlIGRlZmluaXRpb24gdGhhdCBpbmNsdWRlcyBpdCwgb3IgcG9zc2libHkgYSB0YXJnZXQgdGhhdCBidWlsZHMgaXQgYXMgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIERlcGVuZGVuY2llcyBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBmaWx0ZXIub2AgaXMgYnVpbHQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfTkVUYCBpcyBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGJ1aWxkaW5nIHRoZSBlbnRpcmUgYG5ldC9jb3JlYCBzdWJzeXN0ZW0sIHRoZW4gYGZpbHRlci5vYCBnZXRzIGNvbXBpbGVkIHRvby4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGlzIGZ1bmN0aW9uLgoKQWgsIHJpZ2h0LCB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaGVscGVyIGZ1bmN0aW9uLiBUaGF0IG9uZSYjMzk7cyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQmIzM5O3Mgbm90IGFsd2F5cyBvYnZpb3VzLCBzbyBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAgZ3VhcmRlZCBieSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgYmV5b25kIGp1c3QgdGhlIGJ1aWxkIG9mIGBmaWx0ZXIub2AgaXRzZWxmLiBBbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgZGlzYWJsZSBvciBlbmFibGUgaXQ/IEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyMTc1PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzpCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk2Olx0LmZ1bmNcdFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cdC5ncGxfb25seVx0PSBmYWxzZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcdC5yZXRfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIwMi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDEyMTgzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgbHVya2luZyBhcm91bmQgdGhlcmUuIFRoYXQgc2VjdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgY29uZGl0aW9ucyBpZiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLiBHb3R0YSBnZXQgYSBmZWVsIGZvciB3aGF0JiMzOTtzIGFjdGl2ZSBhbmQgd2hhdCBpc24mIzM5O3Qgd2l0aGluIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTcwOlx0e1xuMTIxNzE6XHRcdEJURl9UWVBFX0VNSVQoc3RydWN0IG1wdGNwX3NvY2spO1xuMTIxNzI6XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfbXB0Y3Bfc29ja19mcm9tX3N1YmZsb3coc2spO1xuMTIxNzM6XHR9XG4xMjE3NDpcdFxuMTIxNzU6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuMTIxNzY6XHRcdC5mdW5jXHRcdD0gYnBmX3NrY190b19tcHRjcF9zb2NrLFxuMTIxNzc6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjEyMTc4Olx0XHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTc5Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fU09DS19DT01NT04sXG4xMjE4MDpcdFx0LnJldF9idGZfaWRcdD0gXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfTVBUQ1BdLFxuMTIxODE6XHR9O1xuMTIxODI6XHRcbjEyMTgzOlx0QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4xMjE4NDpcdHtcbjEyMTg1Olx0XHRpZiAoZmlsZSlcbjEyMTg2Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbjEyMTg3Olx0XG4xMjE4ODpcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4xMjE4OTpcdH1cbjEyMTkwOlx0XG4xMjE5MTpcdEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuMTIxOTI6XHRCVEZfSUQoc3RydWN0LCBzb2NrZXQpXG4xMjE5MzpcdEJURl9JRChzdHJ1Y3QsIGZpbGUpXG4xMjE5NDpcdFxuMTIxOTU6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xuMTIxOTY6XHRcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxuMTIxOTc6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjEyMTk4Olx0XHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcbjEyMTk5Olx0XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbjEyMjAwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuMTIyMDE6XHRcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1sxXSxcbjEyMjAyOlx0fTtcbjEyMjAzOlx0XG4xMjIwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuMTIyMDU6XHRicGZfc2tfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuMTIyMDY6XHR7XG4xMjIwNzpcdFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmdW5jO1xuMTIyMDg6XHRcbjEyMjA5Olx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwgb2YgYGJwZl9zb2NrX2Zyb21fZmlsZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGdhdGluZyB0aGUgZnVuY3Rpb24gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gU2luY2UgaXQgaXMgYSBCUEYgaGVscGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIGFuZCB0aGVyZWZvcmUsIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBtYWtlIHRoaXMgd29yaywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIHRoaXMgaXMgcmVsYXRlZCB0byBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGxpa2VseSB3aGF0IGFsbG93cyB1cyB0byB1c2UgaXQuCgpJbml0aWFsbHksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIHN5bWJvbC4gSG9sZCBvbiwgYEJQRl9DQUxMXzFgIGV4cGFuZHMgdG8gYm90aCBgYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIOKAkyBJJiMzOTtsbCBpbmNsdWRlIGJvdGggaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIGFsbCBiYXNlcy4gQWgsIHJpZ2h0LCBgYnBmX3NvY2tfZnJvbV9maWxlYCBpcyB0aGUgd3JhcHBlciwgYW5kIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBpcyB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi4KCkxldCBtZSBjaGVjayBpZiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBZZXMsIGl0IGlzOiBgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgX19fXyMjbmFtZSguLi4pYC4gVGhpcyBtZWFucyB0aGF0IGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCBnZXRzIGlubGluZWQgZGlyZWN0bHkgaW50byBgYnBmX3NvY2tfZnJvbV9maWxlYC4gU28sIHRoZSBhY3R1YWwgc3ltYm9sIHRoYXQgd2lsbCBiZSBwcmVzZW50IGluIHRoZSBiaW5hcnkgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRodXMsIEkgd2lsbCB1c2UgYGJwZl9zb2NrX2Zyb21fZmlsZWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIGFjdHVhbGx5IHVzYWJsZSBieSBCUEYgcHJvZ3JhbXMuIEFuZCB5ZXMsIGl0IGlzIHJldHVybmVkIGJ5IGB0cmFjaW5nX3Byb2dfZnVuY19wcm90b2AgZm9yIGBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZWAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIHRvIHRyYWNpbmcgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gQ29uc2VxdWVudGx5LCBpbiBhZGRpdGlvbiB0byBgQlBGX1NZU0NBTExgLCBJJiMzOTtsbCBuZWVkIGBCUEZfRVZFTlRTYCB0byBzdXBwb3J0IHRyYWNpbmcgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGNsZWFyIHRoYXQgd2UgYWJzb2x1dGVseSBuZWVkIGBCUEZfRVZFTlRTYCBlbmFibGVkIGZvciBwcm9wZXIgQlBGIHByb2dyYW0gdHJhY2luZy4gQWRkaXRpb25hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIHdlbGwsIGFzIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggc3lzdGVtIGNhbGxzLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvZGUgaXRzZWxmOgoKYGBgYwpCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSkKewotCXJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTsKJiM0MzsJaWYgKGZpbGUpCiYjNDM7CQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZylOVUxMOwp9CmBgYAoKQWgsIGEgc2ltcGxlIGJ1dCBpbXBvcnRhbnQgYWRkaXRpb24uIFdlJiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgc29ja19mcm9tX2ZpbGVgLiBTbWFydC4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyB0eXBlIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgZnV6emluZyBpcyBtZWFudCB0byBjYXRjaC4gSSYjMzk7bGwgZmxhZyBgYnBmX3NvY2tfZnJvbV9maWxlYCBhcyB0aGUgZm9jYWwgcG9pbnQgZm9yIGFueSBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiwgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGlzIHVzZWQgaW4gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gV2Ugc2hvdWxkIGtub3cgaWYgaXQmIzM5O3MgY29ubmVjdGVkIGluIGFueSB1bmZvcmVzZWVuIHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkyNjpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkyNy1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc29ja2V0X3B0cl9jb29raWVfcHJvdG87XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcwLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTE3MTogKiBzdHJ1Y3Qgc29ja2V0ICpicGZfc29ja19mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3Mi0gKlx0RGVzY3JpcHRpb25cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1NC1cdGNhc2UgQlBGX0ZVTkNfc29ja19mcm9tX2ZpbGU6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc29ja2V0X2Nvb2tpZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5MTpCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTctXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5OC1cdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTk6XHQucmV0X2J0Zl9pZFx0PSBcdTAwMjZicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkc1swXSxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUxNzAtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MTcxOiAqIHN0cnVjdCBzb2NrZXQgKmJwZl9zb2NrX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcyLSAqXHREZXNjcmlwdGlvblxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfc2tfc3RvcmFnZV9oZWxwZXJzLmM9MjY9aW50IGZpbGxfc29ja2V0X293bmVyKHN0cnVjdCBicGZfaXRlcl9fdGFza19maWxlICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfc2tfc3RvcmFnZV9oZWxwZXJzLmM6MzY6XHRzb2NrID0gYnBmX3NvY2tfZnJvbV9maWxlKGZpbGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNy1cdGlmICghc29jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODEKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgQlBGIE9ic2VydmF0aW9uKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QganVzdCBsaW1pdGVkIHRvIG9uZSBhcmVhLiBJJiMzOTttIHNlZWluZyBpdCB1c2VkIGluIEJQRiBpdGVyYXRvciBwcm9ncmFtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBicm9hZGx5IGFjY2Vzc2libGUgdG8gYm90aCB0cmFjaW5nIGFuZCBpdGVyYXRvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSXQgYWxzbyBzZWVtcyBsaWtlIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgY29uZmlndXJhdGlvbnMgcHJvdmlkZSBlbm91Z2ggZ3JvdW5kd29yayBmb3IgdGhpcyBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2Agd2l0aCB3aGF0IEkmIzM5O3ZlIGZvdW5kLiBUaGlzIGNvbmZpcm1hdGlvbiBhbGxvd3MgbWUgdG8gcHJvY2VlZCBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19mcm9tX2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICYjMzk7ZmlsZSYjMzk7IGFyZ3VtZW50IGluIHRoZSAmIzM5O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzk7IEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAmIzM5O3NvY2tfZnJvbV9maWxlJiMzOTsgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhZTkyNDNlYTkzODFhMWZhZDc2NTkwMGVmOGVlM2ZkYTExZWRhNjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0Nzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyMTgyLDcgJiM0MzsxMjE4MiwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0gewogCiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSkKIHsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7CiYjNDM7CWlmIChmaWxlKQomIzQzOwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpOwomIzQzOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDsKIH0KIAogQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk3CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXQvQ29yZS9GaWx0ZXIuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBmb3IgYSBOVUxMIGBmaWxlYCBwb2ludGVyIGluIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhbiBgaWYgKGZpbGUpYCBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGVyZSBjYWxsaW5nIGBzb2NrX2Zyb21fZmlsZWAgd2l0aCBhIE5VTEwgYGZpbGVgIHdvdWxkIGxpa2VseSBjcmFzaCB0aGUga2VybmVsLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgdGhlIGtlcm5lbCBoYXMgbWVjaGFuaXNtcyBsaWtlIHBhZ2UgZmF1bHRzLCBvb3BzZXMsIGFuZCBLQVNBTiB0aGF0IHdvdWxkIGhhdmUgY2F1Z2h0IGl0IGV2ZW50dWFsbHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGVsaW1pbmF0ZXMgdGhhdCBwb3RlbnRpYWwuIFRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbiByZWNlaXZlcyBhIGBzdHJ1Y3QgZmlsZSAqYCwgYW5kIGlmIGl0ICppcyogTlVMTCwgYHNvY2tfZnJvbV9maWxlYCB3b3VsZCBiZSBjYWxsZWQgb24gdGhhdCBOVUxMLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcy4KCkNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMsIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIGhlcmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGFkZHJlc3NlZCBieSB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSXQmIzM5O3MgYSBjbGVhbiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZml4LiBNeSBleHBlcnQgb3BpbmlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBnb29kLCBjbGVhbiBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAmIzM5O2ZpbGUmIzM5OyBhcmd1bWVudCBpbiB0aGUgJiMzOTticGZfc29ja19mcm9tX2ZpbGUmIzM5OyBCUEYgaGVscGVyIGZ1bmN0aW9uLiBUaGlzIHByZXZlbnRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gJiMzOTtzb2NrX2Zyb21fZmlsZSYjMzk7IGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICYjMzk7ZmlsZSYjMzk7IGFyZ3VtZW50IGluIHRoZSAmIzM5O2JwZl9zb2NrX2Zyb21fZmlsZSYjMzk7IEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAmIzM5O3NvY2tfZnJvbV9maWxlJiMzOTsgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUxLjg4ODQ4Mzk5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjI0NDkyNjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICdmaWxlJyBhcmd1bWVudCBpbiB0aGUgJ2JwZl9zb2NrX2Zyb21fZmlsZScgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICdzb2NrX2Zyb21fZmlsZScgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayB0byB0aGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgQlBGIGhlbHBlciBmdW5jdGlvbiwgcHJldmVudGluZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhIEJQRiBwcm9ncmFtIHBhc3NlcyBhIE5VTEwgZmlsZSBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIGhlbHBlciwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUxLjg4ODQ5MDYzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyNDAwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0Nzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XFxuIFxcbiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcXG4ge1xcbi1cXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuK1xcdGlmIChmaWxlKVxcbitcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuK1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpTlVMTDtcXG4gfVxcbiBcXG4gQlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ3OjUyLjU1MTY3MDA2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODI1NjQwNzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YWU5MjQzZWE5MzgxYTFmYWQ3NjU5MDBlZjhlZTNmZGExMWVkYTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDc6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAxNjg0NTk4N2IyNDQ5Li43YzNjYWFlNGJhZmMzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTIxODIsNyArMTIxODIsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcbiBcbiBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgc3RydWN0IGZpbGUgKiwgZmlsZSlcbiB7XG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4rXHRpZiAoZmlsZSlcbitcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XG4gfVxuIFxuIEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDc6NTIuNTUxNjcyMDE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE2NDgxOTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2sgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byBgYnBmX3NvY2tfZnJvbV9maWxlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTZWVtcyBsaWtlIHNvbWVvbmUgZm91bmQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgcXVpY2sgbG9vay4gVGhlIGNoYW5nZSBpcyBzaW1wbGU6IHRoZXkndmUgYWRkZWQgYSBgaWYgKGZpbGUpYCBjaGVjayByaWdodCBiZWZvcmUgdGhlIGBzb2NrX2Zyb21fZmlsZShmaWxlKWAgY2FsbC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBgZmlsZWAgaXNuJ3QgTlVMTCBiZWZvcmUgcGFzc2luZyBpdCB0byBgc29ja19mcm9tX2ZpbGVgLiBBIGdvb2QsIGNsZWFuIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IGl0cyBuZWNlc3NpdHksIHNvIGxldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMsIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgdXNlZCBpbiB0aGUgd2lkZXIgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzIHRydWx5IHdhcnJhbnRlZC4gVGhpcyBsb29rcyBsaWtlIGEgcXVpY2sgd2luIGlmIGl0J3MgY29ycmVjdCwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MDAuNzE2NDk1NTA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA1NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zb2NrX2Zyb21fZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjE3NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxODM6QlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTE6QlRGX0lEX0xJU1QoYnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTItQlRGX0lEKHN0cnVjdCwgc29ja2V0KVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk3LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTgtXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX0JURl9JRF9PUl9OVUxMLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk5OlxcdC5yZXRfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDAtXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMDE6XFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX3NvY2tfZnJvbV9maWxlX2J0Zl9pZHNbMV0sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMDItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MDAuNzY5MzA3MjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3ODE3NjUzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEhlbHBlciBGdW5jdGlvbiBmb3IgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBgYnBmX3NvY2tfZnJvbV9maWxlYC4gSXQncyBhIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdOKAlHRob3NlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWJvdXQgcHJldmVudGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgc3BlY2lmaWNhbGx5IGlmIGEgQlBGIHByb2dyYW0gcGFzc2VzIGEgTlVMTCBgZmlsZWAgcG9pbnRlciB0byBpdC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgZXZlbiBwb3NzaWJsZT8gYEFSR19QVFJfVE9fQlRGX0lEYCB1c3VhbGx5IHJlc3RyaWN0cyBOVUxMLCB1bmxlc3MgaXTigJlzIHRoZSBgT1JfTlVMTGAgdmFyaWFudC4gSG1tLCBpcyB0aGlzIGEgcG90ZW50aWFsIG92ZXJzaWdodCBpbiB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiwgb3IgaXMgaXQgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgICppcyogYSB3b3J0aHdoaWxlIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gWWVwLCBpdCdzIGEgQlBGIGhlbHBlciwgc28gYWJzb2x1dGVseSBpdCBpcy4gTm93LCBJIG5lZWQgdG8gY2xhcmlmeSBteSBmb2N1cy4gVGhlIGtleSBzeW1ib2wgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhlIG1hY3JvIHRoYXTigJlzIGFjdHVhbGx5IHVzZWQ6IGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAuIEkgc2hvdWxkIHZlcmlmeSBob3cgaXQgZXhwYW5kcywgYXMgc29tZXRpbWVzIHRob3NlIG1hY3JvcyBhZGQgYSBsYXllciBvZiBpbmRpcmVjdGlvbiB0aGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIExldCdzIHNlZS4uLiBpdCBleHBhbmRzIHN0cmFpZ2h0IHRvIGBicGZfc29ja19mcm9tX2ZpbGVgLiBPa2F5LCBnb29kLiBOb3QgZXh0cmEgY29tcGxleGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0ODoxNi41NTEwNzU4MDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MzE4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyMTkzPUJURl9JRChzdHJ1Y3QsIGZpbGUpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxOTQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ni1cXHQuZnVuY1xcdFxcdD0gYnBmX3NvY2tfZnJvbV9maWxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0ODoxNi42MDY2MTUzMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzI2OTM2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Zyb21fZmlsZV9wcm90b2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIEJQRi9uZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGFzc3VtaW5nIGl0IGhhbmRsZXMgc29ja2V0LXJlbGF0ZWQgb3BlcmF0aW9ucyBnaXZlbiB0aGUgbmFtZSwgYnV0IGtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCB0byBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBpZGVudGlmeWluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyB3aWxsIHJlcXVpcmUgc29tZSBzdGF0aWMgYW5hbHlzaXMsIGVpdGhlciBtYW51YWxseSB0aHJvdWdoIGNvZGUgbmF2aWdhdGlvbiBvciBieSBsZXZlcmFnaW5nIHRvb2xzIGxpa2UgYGdyZXBgLCBgY3Njb3BlYCwgYGNsYW5nZGAsIG9yIHNpbWlsYXIgY29kZSBzZWFyY2ggdGVjaG5pcXVlcyBvbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UgKGxpa2VseSB0aGUga2VybmVsKS4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIHNjb3BlIGFuZCB0aGUgdHlwZXMgb2Ygb3BlcmF0aW9ucyBpdCdzIGludm9sdmVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MjYuMzMzNTU0OTIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM0MjY0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxOTM9QlRGX0lEKHN0cnVjdCwgZmlsZSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5NC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5NTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfZnJvbV9maWxlX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk2LVxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19mcm9tX2ZpbGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjI3Ljk0Njk4NTk5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDQxMjkyOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgSGVscGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgdHJhY2luZ19wcm9nX2Z1bmNfcHJvdG9gIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gUmlnaHQsIHRoaXMgaXMgYSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdHJhY2luZyBwcm9ncmFtcy4gVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGhlcmUgaXMgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIEJ1dCBob2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBhIGJpdCBvZmYuIEkgc2VlIGBCUEZfQ0FMTF8xYCBleHBhbmRzIHRvICpib3RoKiBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgYW5kIGp1c3QgYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFRoYXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGFuZCBsaWtlbHkgc3VnZ2VzdHMgc29tZSBsb3ctbGV2ZWwgaW5kaXJlY3Rpb24uIFRpbWUgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoaXMg4oCTIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYEJQRl9DQUxMXzFgIG1hY3JvIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQgY291bGQgYmUgZm9yIEFCSSBjb21wYXRpYmlsaXR5LCB2ZXJzaW9uaW5nIG9yIGEgYnVuY2ggb2Ygb3RoZXIgcmVhc29ucy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6MzkuMzg4MjgyMzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTM5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjQxLjQ3MzQzMTE0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzODU2ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGBCUEZfQ0FMTF94YCxcIiBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgaXQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGBCUEZfQ0FMTF94YC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBJJ20gZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBCUEYgaGVscGVyIGZ1bmN0aW9uLCBsaWtlbHkgb25lIG9mIHRoZSBtYW55IGF2YWlsYWJsZSBpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBlY29zeXN0ZW0uIFRoZSBcInhcIiBpcyBvYnZpb3VzbHkgYSBwbGFjZWhvbGRlciDigJMgSSdtIHRoaW5raW5nIGFib3V0IGEgKnBhcnRpY3VsYXIqIGZ1bmN0aW9uLCBidXQgaGF2ZW4ndCBzcGVjaWZpZWQgd2hpY2ggb25lIHlldC4gTXkgbWluZCBpcyBwcm9iYWJseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHByZXZpb3VzIGNvZGUgSSd2ZSB3cml0dGVuLCBvciBwcm9ibGVtcyBJJ20gdHJ5aW5nIHRvIHNvbHZlIHRvIGRldGVybWluZSB3aGljaCBgQlBGX0NBTExgIGlzIG1vc3QgcmVsZXZhbnQgdG8gdGhlIHRhc2sgYXQgaGFuZC4gVGhpcyBpcyB0aGUgbW9tZW50IEkgY2hvb3NlIHdoYXQgZnVuY3Rpb24gSSdtIGltcGxlbWVudGluZy4gSSdtIGxpa2VseSBhc2tpbmcgbXlzZWxmIHF1ZXN0aW9ucyBsaWtlOiBcIldoYXQgZnVuY3Rpb25hbGl0eSBkbyBJIG5lZWQ/IEFtIEkgZGVhbGluZyB3aXRoIG1hcHMsIG5ldHdvcmtpbmcgZGF0YSwgdHJhY2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XCIgVGhlIHBhcnRpY3VsYXIgdXNlIGNhc2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGJlc3QgaGVscGVyLiBQZXJoYXBzIEknbSB0cnlpbmcgdG8gaW1wbGVtZW50IGEgc3BlY2lmaWMgQlBGIHByb2dyYW0sIG9wdGltaXplIGFuIGV4aXN0aW5nIG9uZSwgb3IgZGVidWcgYSBwZXJmb3JtYW5jZSBpc3N1ZS4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIGNhcGFiaWxpdGllcywgaXRzIGFyZ3VtZW50cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBnZXR0aW5nIHRoZSByZXN1bHRzIEkgbmVlZC4gVGhlIGtleSBmb3IgYSBCUEYgY2FsbCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGtlcm5lbC1wcm92aWRlZCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjUzLjcxMjAwMjU3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTUwNTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6NTUuMjQzNTEyNTQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjgxNDU1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlBGIEZpbHRlcmluZyBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgQlBGIGZpbHRlcmluZyBpbXBsZW1lbnRhdGlvbi4gSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYxMS4gSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNydWNpYWwgc3RydWN0dXJlcyB0aGF0IGRlZmluZSBob3cgdGhlc2UgZmlsdGVycyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRhdGEgc3RydWN0dXJlcyB0byBmaWd1cmUgb3V0IGhvdyB0byBkZWJ1ZyB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIEJQRiBwcm9ncmFtIHJlcHJlc2VudGF0aW9uLCB0aGUgY29udGV4dCBzdHJ1Y3R1cmVzLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEuIEtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBhcmUgbGFpZCBvdXQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFsbCB3b3JrIHRvZ2V0aGVyLiBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ4OjU4LjQ3MTY2MTA4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFxuIDYxMTpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMjpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEzOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTQ6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNTpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTc6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE5OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjA6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMTpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMjpcXHRcXG4gNjIzOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjI0OlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNTpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjY6XFx0I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI3OlxcdCNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyODpcXHQjZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjk6XFx0I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDg6NTguNDcxNzgzMjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzU1NDY3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEhlbHBlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIGBCUEZfQ0FMTF8xKGJwZl9zb2NrX2Zyb21fZmlsZSwgLi4uKWAgaXMgZGVmaW5pbmcgYSBmdW5jdGlvbiBjYWxsZWQgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgLiBSaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzIGluIGBfX19fYnBmX3NvY2tfZnJvbV9maWxlYCwgYXMgaXMgdHlwaWNhbC4gSG1tbSwganVzdCBtYWtpbmcgc3VyZSBJJ20gZm9sbG93aW5nIHRoaXMsIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aCBpcyBhY3R1YWxseSBuYW1lZCBgYnBmX3NvY2tfZnJvbV9maWxlYC4gT2theSwgZ29vZC5cblxuTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSBjb3JyZWN0IHN5bWJvbCDigJMgYSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgaW5kZWVkIGRlZmluZWQgYXMgYSBmdW5jdGlvbi4gQWxyaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIEJQRiBoZWxwZXIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2sgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMgZW5hYmxlZC4gRmluYWxseSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjAzLjgwNzMzMzUzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NTIyNTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MDUuNTYyNTY3MDg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDUyNTg2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBNYWtlZmlsZSBmb3IgRmlsdGVyLm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZmlsdGVyLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0L2NvcmUgc3Vic3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBza2ltIGl0LCBsb29raW5nIGZvciBhbnkgcnVsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW52b2x2ZSB0aGF0IHNwZWNpZmljIG9iamVjdCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgZGlyZWN0IGluY2x1c2lvbiwgYSB2YXJpYWJsZSBkZWZpbml0aW9uIHRoYXQgaW5jbHVkZXMgaXQsIG9yIHBvc3NpYmx5IGEgdGFyZ2V0IHRoYXQgYnVpbGRzIGl0IGFzIHBhcnQgb2YgYSBsYXJnZXIgbW9kdWxlLiBMZXQncyBkaWcgaW4gYW5kIHNlZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTEuNjY3ODI5NDA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkwOTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTEuNzE1NzQzNjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk0NzI4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgRGVwZW5kZW5jaWVzIG9mIGBicGZfc29ja19mcm9tX2ZpbGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmaWx0ZXIub2AgaXMgYnVpbHQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfTkVUYCBpcyBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGJ1aWxkaW5nIHRoZSBlbnRpcmUgYG5ldC9jb3JlYCBzdWJzeXN0ZW0sIHRoZW4gYGZpbHRlci5vYCBnZXRzIGNvbXBpbGVkIHRvby4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZWZpbmVzIHRoaXMgZnVuY3Rpb24uXG5cbkFoLCByaWdodCwgdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIGhlbHBlciBmdW5jdGlvbi4gVGhhdCBvbmUncyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQncyBub3QgYWx3YXlzIG9idmlvdXMsIHNvIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBicGZfc29ja19mcm9tX2ZpbGVgIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYD8gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIGJleW9uZCBqdXN0IHRoZSBidWlsZCBvZiBgZmlsdGVyLm9gIGl0c2VsZi4gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgb3IgZW5hYmxlIGl0PyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MTYuNDQ1MjIxMjE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg2MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19mcm9tX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjE2LjUwMTA4Nzk5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ5MTYwNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxMjE4My4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGx1cmtpbmcgYXJvdW5kIHRoZXJlLiBUaGF0IHNlY3Rpb24gbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbnMgaWYgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZS4gR290dGEgZ2V0IGEgZmVlbCBmb3Igd2hhdCdzIGFjdGl2ZSBhbmQgd2hhdCBpc24ndCB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjI2Ljk5MjY5NjQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNzA6XFx0e1xcbjEyMTcxOlxcdFxcdEJURl9UWVBFX0VNSVQoc3RydWN0IG1wdGNwX3NvY2spO1xcbjEyMTcyOlxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfbXB0Y3Bfc29ja19mcm9tX3N1YmZsb3coc2spO1xcbjEyMTczOlxcdH1cXG4xMjE3NDpcXHRcXG4xMjE3NTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY190b19tcHRjcF9zb2NrX3Byb3RvID0ge1xcbjEyMTc2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc2tjX3RvX21wdGNwX3NvY2ssXFxuMTIxNzc6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4xMjE3ODpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fQlRGX0lEX09SX05VTEwsXFxuMTIxNzk6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19TT0NLX0NPTU1PTixcXG4xMjE4MDpcXHRcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX01QVENQXSxcXG4xMjE4MTpcXHR9O1xcbjEyMTgyOlxcdFxcbjEyMTgzOlxcdEJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbjEyMTg0OlxcdHtcXG4xMjE4NTpcXHRcXHRpZiAoZmlsZSlcXG4xMjE4NjpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxuMTIxODc6XFx0XFxuMTIxODg6XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKU5VTEw7XFxuMTIxODk6XFx0fVxcbjEyMTkwOlxcdFxcbjEyMTkxOlxcdEJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbjEyMTkyOlxcdEJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG4xMjE5MzpcXHRCVEZfSUQoc3RydWN0LCBmaWxlKVxcbjEyMTk0OlxcdFxcbjEyMTk1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxuMTIxOTY6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG4xMjE5NzpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjEyMTk4OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG4xMjE5OTpcXHRcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbjEyMjAwOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbjEyMjAxOlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbjEyMjAyOlxcdH07XFxuMTIyMDM6XFx0XFxuMTIyMDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxuMTIyMDU6XFx0YnBmX3NrX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4xMjIwNjpcXHR7XFxuMTIyMDc6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmdW5jO1xcbjEyMjA4OlxcdFxcbjEyMjA5OlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OToyNi45OTMxMzAwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM5NjM1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYnBmX3NvY2tfZnJvbV9maWxlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGdhdGluZyB0aGUgZnVuY3Rpb24gYGJwZl9zb2NrX2Zyb21fZmlsZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gU2luY2UgaXQgaXMgYSBCUEYgaGVscGVyLCBpdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgYW5kIHRoZXJlZm9yZSwgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIG1ha2UgdGhpcyB3b3JrLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyB0aGlzIGlzIHJlbGF0ZWQgdG8gQlBGIGZ1bmN0aW9uYWxpdHksIGFuZCBsaWtlbHkgd2hhdCBhbGxvd3MgdXMgdG8gdXNlIGl0LlxuXG5Jbml0aWFsbHksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIHN5bWJvbC4gSG9sZCBvbiwgYEJQRl9DQUxMXzFgIGV4cGFuZHMgdG8gYm90aCBgYnBmX3NvY2tfZnJvbV9maWxlYCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIOKAkyBJJ2xsIGluY2x1ZGUgYm90aCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY292ZXIgYWxsIGJhc2VzLiBBaCwgcmlnaHQsIGBicGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSB3cmFwcGVyLCBhbmQgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLlxuXG5MZXQgbWUgY2hlY2sgaWYgYF9fX19icGZfc29ja19mcm9tX2ZpbGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gWWVzLCBpdCBpczogYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IF9fX18jI25hbWUoLi4uKWAuIFRoaXMgbWVhbnMgdGhhdCBgX19fX2JwZl9zb2NrX2Zyb21fZmlsZWAgZ2V0cyBpbmxpbmVkIGRpcmVjdGx5IGludG8gYGJwZl9zb2NrX2Zyb21fZmlsZWAuIFNvLCB0aGUgYWN0dWFsIHN5bWJvbCB0aGF0IHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgYmluYXJ5IGlzIGBicGZfc29ja19mcm9tX2ZpbGVgLiBUaHVzLCBJIHdpbGwgdXNlIGBicGZfc29ja19mcm9tX2ZpbGVgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgaWYgYGJwZl9zb2NrX2Zyb21fZmlsZWAgaXMgYWN0dWFsbHkgdXNhYmxlIGJ5IEJQRiBwcm9ncmFtcy4gQW5kIHllcywgaXQgaXMgcmV0dXJuZWQgYnkgYHRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvYCBmb3IgYEJQRl9GVU5DX3NvY2tfZnJvbV9maWxlYC4gVGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSB0byB0cmFjaW5nIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi4gQ29uc2VxdWVudGx5LCBpbiBhZGRpdGlvbiB0byBgQlBGX1NZU0NBTExgLCBJJ2xsIG5lZWQgYEJQRl9FVkVOVFNgIHRvIHN1cHBvcnQgdHJhY2luZyBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjM0LjEzMjc2ODA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzc1NTYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODU0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDk6MzYuMjcwNTI5MDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzE5NjQ0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0J3MgY2xlYXIgdGhhdCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYEJQRl9FVkVOVFNgIGVuYWJsZWQgZm9yIHByb3BlciBCUEYgcHJvZ3JhbSB0cmFjaW5nLiBBZGRpdGlvbmFsbHksIEknbGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhcyB3ZWxsLCBhcyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIHN5c3RlbSBjYWxscy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29kZSBpdHNlbGY6XG5cbmBgYGNcbkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxue1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xufVxuYGBgXG5cbkFoLCBhIHNpbXBsZSBidXQgaW1wb3J0YW50IGFkZGl0aW9uLiBXZSdyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgc29ja19mcm9tX2ZpbGVgLiBTbWFydC4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyB0eXBlIG9mIGNoYW5nZSBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgZnV6emluZyBpcyBtZWFudCB0byBjYXRjaC4gSSdsbCBmbGFnIGBicGZfc29ja19mcm9tX2ZpbGVgIGFzIHRoZSBmb2NhbCBwb2ludCBmb3IgYW55IGZ1enppbmcgZWZmb3J0cy5cblxuRmluYWxseSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiwgYGJwZl9zb2NrX2Zyb21fZmlsZWAsIGlzIHVzZWQgaW4gYW55IG90aGVyIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gV2Ugc2hvdWxkIGtub3cgaWYgaXQncyBjb25uZWN0ZWQgaW4gYW55IHVuZm9yZXNlZW4gd2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo0NC43MDI0OTY2NjRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTIxNzE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NvY2tfZnJvbV9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM5MjU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3RpbWVfZ2V0X2NvYXJzZV9uc19wcm90bztcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MjY6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTI3LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zb2NrZXRfcHRyX2Nvb2tpZV9wcm90bztcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcwLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUxNzE6ICogc3RydWN0IHNvY2tldCAqYnBmX3NvY2tfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MTcyLSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3NTQtXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2Zyb21fZmlsZTpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTc1NTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTc1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zb2NrZXRfY29va2llOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzU9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfdG9fbXB0Y3Bfc29ja19wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTgyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTgzOkJQRl9DQUxMXzEoYnBmX3NvY2tfZnJvbV9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTkxOkJURl9JRF9MSVNUKGJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTkyLUJURl9JRChzdHJ1Y3QsIHNvY2tldClcXG5uZXQvY29yZS9maWx0ZXIuYz0xMjE5Mz1CVEZfSUQoc3RydWN0LCBmaWxlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTk1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19mcm9tX2ZpbGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxOTY6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2Zyb21fZmlsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE5Ny1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTk4LVxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19CVEZfSURfT1JfTlVMTCxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE5OTpcXHQucmV0X2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAwLVxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjAxOlxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9zb2NrX2Zyb21fZmlsZV9idGZfaWRzWzFdLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjAyLX07XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3MC0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MTcxOiAqIHN0cnVjdCBzb2NrZXQgKmJwZl9zb2NrX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTE3Mi0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jPTI2PWludCBmaWxsX3NvY2tldF9vd25lcihzdHJ1Y3QgYnBmX2l0ZXJfX3Rhc2tfZmlsZSAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3NrX3N0b3JhZ2VfaGVscGVycy5jOjM2OlxcdHNvY2sgPSBicGZfc29ja19mcm9tX2ZpbGUoZmlsZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuYy0zNy1cXHRpZiAoIXNvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjQ2LjM5NDY3NzU4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3ODg4NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipNeSBCUEYgT2JzZXJ2YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIGNsZWFyIHRoaXMgZnVuY3Rpb25hbGl0eSBpc24ndCBqdXN0IGxpbWl0ZWQgdG8gb25lIGFyZWEuIEknbSBzZWVpbmcgaXQgdXNlZCBpbiBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGJwZl9pdGVyX2JwZl9za19zdG9yYWdlX2hlbHBlcnMuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBicm9hZGx5IGFjY2Vzc2libGUgdG8gYm90aCB0cmFjaW5nIGFuZCBpdGVyYXRvciBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gSXQgYWxzbyBzZWVtcyBsaWtlIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AgY29uZmlndXJhdGlvbnMgcHJvdmlkZSBlbm91Z2ggZ3JvdW5kd29yayBmb3IgdGhpcyBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBHaXZlbiB0aGlzLCBJIGNhbiBjb25maWRlbnRseSBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2Agd2l0aCB3aGF0IEkndmUgZm91bmQuIFRoaXMgY29uZmlybWF0aW9uIGFsbG93cyBtZSB0byBwcm9jZWVkIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MSwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC43MTI1Njk2OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTUwMzA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19mcm9tX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBCUEYgaGVscGVyIGZ1bmN0aW9uLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGEgQlBGIHByb2dyYW0gcGFzc2VzIGEgTlVMTCBmaWxlIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgaGVscGVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Zyb21fZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gdGhlIGBicGZfc29ja19mcm9tX2ZpbGVgIEJQRiBoZWxwZXIgZnVuY3Rpb24sIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYSBCUEYgcHJvZ3JhbSBwYXNzZXMgYSBOVUxMIGZpbGUgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBoZWxwZXIsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC44MDgwODIyMzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjUzMTQ2ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1MC44MDg2NjgxMzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMyNDcyMjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdGhlICdmaWxlJyBhcmd1bWVudCBpbiB0aGUgJ2JwZl9zb2NrX2Zyb21fZmlsZScgQlBGIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuICdzb2NrX2Zyb21fZmlsZScgaXMgY2FsbGVkLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHN1Y2ggYXMgcGFnZSBmYXVsdHMgYW5kIG9vcHNlcykgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWFlOTI0M2VhOTM4MWExZmFkNzY1OTAwZWY4ZWUzZmRhMTFlZGE2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQ3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMTY4NDU5ODdiMjQ0OS4uN2MzY2FhZTRiYWZjMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTEyMTgyLDcgKzEyMTgyLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX3RvX21wdGNwX3NvY2tfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc29ja19mcm9tX2ZpbGUsIHN0cnVjdCBmaWxlICosIGZpbGUpXG4ge1xuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXNvY2tfZnJvbV9maWxlKGZpbGUpO1xuK1x0aWYgKGZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylzb2NrX2Zyb21fZmlsZShmaWxlKTtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylOVUxMO1xuIH1cbiBcbiBCVEZfSURfTElTVChicGZfc29ja19mcm9tX2ZpbGVfYnRmX2lkcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQ5OjUwLjgwODY2OTIxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzI0Njc4NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldC9Db3JlL0ZpbHRlci5jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOiBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBmb3IgYSBOVUxMIGBmaWxlYCBwb2ludGVyIGluIHRoZSBgYnBmX3NvY2tfZnJvbV9maWxlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGFuIGBpZiAoZmlsZSlgIGNvbmRpdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoZXJlIGNhbGxpbmcgYHNvY2tfZnJvbV9maWxlYCB3aXRoIGEgTlVMTCBgZmlsZWAgd291bGQgbGlrZWx5IGNyYXNoIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIOKAkyB0aGUga2VybmVsIGhhcyBtZWNoYW5pc21zIGxpa2UgcGFnZSBmYXVsdHMsIG9vcHNlcywgYW5kIEtBU0FOIHRoYXQgd291bGQgaGF2ZSBjYXVnaHQgaXQgZXZlbnR1YWxseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGZpeCBlbGltaW5hdGVzIHRoYXQgcG90ZW50aWFsLiBUaGUgYGJwZl9zb2NrX2Zyb21fZmlsZWAgZnVuY3Rpb24gcmVjZWl2ZXMgYSBgc3RydWN0IGZpbGUgKmAsIGFuZCBpZiBpdCAqaXMqIE5VTEwsIGBzb2NrX2Zyb21fZmlsZWAgd291bGQgYmUgY2FsbGVkIG9uIHRoYXQgTlVMTC4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMuXG5cbkNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMsIHRoZXJlJ3Mgbm8gZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgYW55IGluZm9ybWF0aW9uIGxlYWtzIGJlaW5nIGludHJvZHVjZWQgb3IgYWRkcmVzc2VkIGJ5IHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBJdCdzIGEgY2xlYW4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGZpeC4gTXkgZXhwZXJ0IG9waW5pb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGdvb2QsIGNsZWFuIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0OTo1OC4xMzMzNjIyMzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAnZmlsZScgYXJndW1lbnQgaW4gdGhlICdicGZfc29ja19mcm9tX2ZpbGUnIEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAnc29ja19mcm9tX2ZpbGUnIGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIHRoZSAnZmlsZScgYXJndW1lbnQgaW4gdGhlICdicGZfc29ja19mcm9tX2ZpbGUnIEJQRiBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiAnc29ja19mcm9tX2ZpbGUnIGlzIGNhbGxlZC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChzdWNoIGFzIHBhZ2UgZmF1bHRzIGFuZCBvb3BzZXMpIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[1] Phase: Succeeded StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 15:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 15:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2] Phase: Succeeded StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 15:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 15:50:09 +0000 UTC FinishedAt: 2026-08-20 15:50:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowl8k9f/series-workflowl8k9f-convert-artifact-1852031723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 15:50:19 +0000 UTC FinishedAt: 2026-08-20 16:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 15:50:19 +0000 UTC FinishedAt: 2026-08-20 16:11:04 +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:*9b5889f1-dca3-4aec-9a0f-739db794f8a0,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-workflowl8k9f/series-workflowl8k9f-convert-artifact-1852031723/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": "a0286da6-d07d-4895-a306-8014cab58cc3", "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-workflowl8k9f/series-workflowl8k9f-build-action-897988329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 15:50:19 +0000 UTC FinishedAt: 2026-08-20 16:10:54 +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:*9b5889f1-dca3-4aec-9a0f-739db794f8a0,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-workflowl8k9f/series-workflowl8k9f-convert-artifact-1852031723/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": "a0286da6-d07d-4895-a306-8014cab58cc3", "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-workflowl8k9f/series-workflowl8k9f-build-action-897988329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 16:11:04 +0000 UTC FinishedAt: 2026-08-20 16:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 16:11:04 +0000 UTC FinishedAt: 2026-08-20 16:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 16:11:04 +0000 UTC FinishedAt: 2026-08-20 16:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 16:11:04 +0000 UTC FinishedAt: 2026-08-20 16:11:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowl8k9f/series-workflowl8k9f-convert-artifact-2237037506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 16:11:14 +0000 UTC FinishedAt: 2026-08-20 16:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 16:11:14 +0000 UTC FinishedAt: 2026-08-20 16:13:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0286da6-d07d-4895-a306-8014cab58cc3,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-workflowl8k9f/series-workflowl8k9f-build-action-897988329/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-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 16:13:23 +0000 UTC FinishedAt: 2026-08-20 16:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 16:13:23 +0000 UTC FinishedAt: 2026-08-20 16:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 16:13:23 +0000 UTC FinishedAt: 2026-08-20 16:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 16:13:23 +0000 UTC FinishedAt: 2026-08-20 16:34: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:*9b5889f1-dca3-4aec-9a0f-739db794f8a0,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-workflowl8k9f/series-workflowl8k9f-convert-artifact-2237037506/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": "d26d8033-02ca-4acc-b572-c6895516a62f", "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-workflowl8k9f/series-workflowl8k9f-build-action-3092590102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 16:13:23 +0000 UTC FinishedAt: 2026-08-20 16:34:09 +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:*9b5889f1-dca3-4aec-9a0f-739db794f8a0,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-workflowl8k9f/series-workflowl8k9f-convert-artifact-2237037506/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": "d26d8033-02ca-4acc-b572-c6895516a62f", "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-workflowl8k9f/series-workflowl8k9f-build-action-3092590102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 16:34:19 +0000 UTC FinishedAt: 2026-08-20 16:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 16:34:19 +0000 UTC FinishedAt: 2026-08-20 16:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 16:34:19 +0000 UTC FinishedAt: 2026-08-20 16:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 16:34:19 +0000 UTC FinishedAt: 2026-08-20 16:36:16 +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:*d26d8033-02ca-4acc-b572-c6895516a62f,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-workflowl8k9f/series-workflowl8k9f-build-action-3092590102/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-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"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:*a0286da6-d07d-4895-a306-8014cab58cc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d26d8033-02ca-4acc-b572-c6895516a62f,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-workflowl8k9f/series-workflowl8k9f-build-action-897988329/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-workflowl8k9f/series-workflowl8k9f-build-action-3092590102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 16:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 16:36:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"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-workflowl8k9f/series-workflowl8k9f-convert-artifact-177686775/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 16:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 16:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 16:36:25 +0000 UTC FinishedAt: 2026-08-20 16:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 16:36:35 +0000 UTC FinishedAt: 2026-08-20 19:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8k9f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_from_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"f375df7f-5729-4bf2-b2f1-2feae1c106c8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 16:36:35 +0000 UTC FinishedAt: 2026-08-20 19:40:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0286da6-d07d-4895-a306-8014cab58cc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d26d8033-02ca-4acc-b572-c6895516a62f,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-workflowl8k9f/series-workflowl8k9f-build-action-897988329/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-workflowl8k9f/series-workflowl8k9f-build-action-3092590102/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-workflowl8k9f/series-workflowl8k9f-convert-artifact-177686775/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,}