Name: series-workflow55bkv Phase: Succeeded StartedAt: 2026-09-12 14:08:14 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[0] Phase: Succeeded StartedAt: 2026-09-12 14:08:14 +0000 UTC FinishedAt: 2026-09-12 15:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 14:08:14 +0000 UTC FinishedAt: 2026-09-12 15:01:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_handle_xprt", "svc_recv", "svc_add_new_temp_xprt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2hhbmRsZV94cHJ0JiMzNDssCiAgICAmIzM0O3N2Y19yZWN2JiMzNDssCiAgICAmIzM0O3N2Y19hZGRfbmV3X3RlbXBfeHBydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YTdjZDg5OTg4MWI1YmIyNjNjMTViMjI2NGEyNWEwMjg1ZWFlNjc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTQ6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5pbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcbkBAIC04NTIsOCAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIFx0XHRuZXd4cHQgPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcbiBcdFx0aWYgKG5ld3hwdCkge1xuIFx0XHRcdG5ld3hwdC1cdTAwM2V4cHRfY3JlZCA9IGdldF9jcmVkKHhwcnQtXHUwMDNleHB0X2NyZWQpO1xuJiM0MztcdFx0XHRzdmNfeHBydF9nZXQobmV3eHB0KTtcbiBcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbiBcdFx0XHR0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuJiM0MztcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19oYW5kbGVfeHBydCYjMzQ7LAogICAgJiMzNDtzdmNfcmVjdiYjMzQ7LAogICAgJiMzNDtzdmNfYWRkX25ld190ZW1wX3hwcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3ZjX2hhbmRsZV94cHJ0KCkgaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAodmlhIHN2Y194cHJ0X2dldC9wdXQpIGFjcm9zcyBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBhbmQgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZS9VQUYgd2hlcmUgdGhlIHRyYW5zcG9ydCBtaWdodCBiZSBjbG9zZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgcnVucy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBjb3JlIGtlcm5lbCBSUEMgbmV0d29ya2luZyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gaW5jb21pbmcgY29ubmVjdGlvbnMgYXJlIGFjY2VwdGVkIG9uIFNVTlJQQyBsaXN0ZW5lciBzb2NrZXRzIChlLmcuLCBORlNELCBsb2NrZCkuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gdGVzdCB0cmFuc3BvcnQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNDo1OToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC04NTIsOCAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogCQluZXd4cHQgPSB4cHJ0LSZndDt4cHRfb3BzLSZndDt4cG9fYWNjZXB0KHhwcnQpOwogCQlpZiAobmV3eHB0KSB7CiAJCQluZXd4cHQtJmd0O3hwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC0mZ3Q7eHB0X2NyZWQpOwomIzQzOwkJCXN2Y194cHJ0X2dldChuZXd4cHQpOwogCQkJc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7CiAJCQl0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LSZndDtzdl9uYW1lKTsKJiM0MzsJCQlzdmNfeHBydF9wdXQobmV3eHB0KTsKIAkJfSBlbHNlIHsKIAkJCW1vZHVsZV9wdXQoeHBydC0mZ3Q7eHB0X2NsYXNzLSZndDt4Y2xfb3duZXIpOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBBTUQ2NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gSSBzZWUgaXQmIzM5O3MgYSBkaWZmLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gYXBwbGllZCBieSBhIHN5ei1jbHVzdGVyIGJvdCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhIGJ1ZyBmaXggb3IgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBgc3ZjX2hhbmRsZV94cHJ0YCBmdW5jdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgYHN2Y194cHJ0X2dldGAgY2FsbCBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgYW5kIGEgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAuIFRoaXMgaXMgZ29vZCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG9zc2libGUgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBgbmV3eHB0YC4KCkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpY2F0aW9ucyBvZiBgc3ZjX3hwcnRfZ2V0YCBvciBgc3ZjX3hwcnRfcHV0YC4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdyBhbmQgdGhlIG92ZXJhbGwgbG9naWMgb2YgYHN2Y19oYW5kbGVfeHBydGAgYW5kIGhvdyBgc3ZjX3hwcnRgIG9iamVjdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gVGltZSB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIHVzZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlLCByZWxhdGVkIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y194cHJ0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiA4MzU6XHRcdGludCBsZW4gPSAwO1xuIDgzNjpcdFxuIDgzNzpcdFx0aWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODM4Olx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBUX0tJTExfVEVNUCwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKVxuIDgzOTpcdFx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fa2lsbF90ZW1wX3hwcnQoeHBydCk7XG4gODQwOlx0XHRcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcbiA4NDE6XHRcdFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXG4gODQyOlx0XHRcdGdvdG8gb3V0O1xuIDg0MzpcdFx0fVxuIDg0NDpcdFx0aWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODQ1Olx0XHRcdHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0O1xuIDg0NjpcdFx0XHQvKlxuIDg0NzpcdFx0XHQgKiBXZSBrbm93IHRoaXMgbW9kdWxlX2dldCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSB0aGVcbiA4NDg6XHRcdFx0ICogbGlzdGVuZXIgaG9sZHMgYSByZWZlcmVuY2UgdG9vXG4gODQ5Olx0XHRcdCAqL1xuIDg1MDpcdFx0XHRfX21vZHVsZV9nZXQoeHBydC1cdTAwM2V4cHRfY2xhc3MtXHUwMDNleGNsX293bmVyKTtcbiA4NTE6XHRcdFx0c3ZjX2NoZWNrX2Nvbm5fbGltaXRzKHhwcnQtXHUwMDNleHB0X3NlcnZlcik7XG4gODUyOlx0XHRcdG5ld3hwdCA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xuIDg1MzpcdFx0XHRpZiAobmV3eHB0KSB7XG4gODU0Olx0XHRcdFx0bmV3eHB0LVx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cdTAwM2V4cHRfY3JlZCk7XG4gODU1Olx0XHRcdFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XG4gODU2Olx0XHRcdFx0c3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG4gODU3Olx0XHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbiA4NTg6XHRcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiA4NTk6XHRcdFx0fSBlbHNlIHtcbiA4NjA6XHRcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gODYxOlx0XHRcdH1cbiA4NjI6XHRcdFx0c3ZjX3hwcnRfcmVjZWl2ZWQoeHBydCk7XG4gODYzOlx0XHR9IGVsc2UgaWYgKHRlc3RfYml0KFhQVF9IQU5EU0hBS0UsIFx1MDAyNnhwcnQtXHUwMDNleHB0X2ZsYWdzKSkge1xuIDg2NDpcdFx0XHR4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2hhbmRzaGFrZSh4cHJ0KTtcbiA4NjU6XHRcdFx0c3ZjX3hwcnRfcmVjZWl2ZWQoeHBydCk7XG4gODY2Olx0XHR9IGVsc2UgaWYgKHN2Y194cHJ0X3Jlc2VydmVfc2xvdChycXN0cCwgeHBydCkpIHtcbiA4Njc6XHRcdFx0LyogWFBUX0RBVEF8WFBUX0RFRkVSUkVEIGNhc2U6ICovXG4gODY4Olx0XHRcdHJxc3RwLVx1MDAzZXJxX2RlZmVycmVkID0gc3ZjX2RlZmVycmVkX2RlcXVldWUoeHBydCk7XG4gODY5Olx0XHRcdGlmIChycXN0cC1cdTAwM2VycV9kZWZlcnJlZClcbiA4NzA6XHRcdFx0XHRsZW4gPSBzdmNfZGVmZXJyZWRfcmVjdihycXN0cCk7XG4gODcxOlx0XHRcdGVsc2VcbiA4NzI6XHRcdFx0XHRsZW4gPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX3JlY3Zmcm9tKHJxc3RwKTtcbiA4NzM6XHRcdFx0cnFzdHAtXHUwMDNlcnFfcmVzZXJ2ZWQgPSBzZXJ2LVx1MDAzZXN2X21heF9tZXNnO1xuIDg3NDpcdFx0XHRhdG9taWNfYWRkKHJxc3RwLVx1MDAzZXJxX3Jlc2VydmVkLCBcdTAwMjZ4cHJ0LVx1MDAzZXhwdF9yZXNlcnZlZCk7XG4gODc1Olx0XHRcdGlmIChsZW4gXHUwMDNjPSAwKVxuIDg3NjpcdFx0XHRcdGdvdG8gb3V0O1xuIDg3NzpcdFxuIDg3ODpcdFx0XHR0cmFjZV9zdmNfeGRyX3JlY3Zmcm9tKFx1MDAyNnJxc3RwLVx1MDAzZXJxX2FyZyk7XG4gODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgUHVycG9zZSBvZiBUaGlzIFBhdGNoIGFuZCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgbW9kaWZpY2F0aW9ucyBpdCBicmluZ3MgdG8gdGhlIGV4aXN0aW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24uIFRpbWUgdG8gcmVhZCB0aHJvdWdoIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX2FkZF9uZXdfdGVtcF94cHJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE1LVxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz04MzI9c3RhdGljIHZvaWQgc3ZjX2hhbmRsZV94cHJ0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfeHBydCAqeHBydClcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODU1LVx0XHRcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjg1NjpcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04NTctXHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gUlBDIFRyYW5zcG9ydCBMaWZlY3ljbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byBsaW5lcyA4MTAtODM1IG9mIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBvZiBhbiBSUEMgdHJhbnNwb3J0LiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBnb2luZyB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMsIHJlZ2lzdHJhdGlvbiwgZGUtcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHRyYW5zcG9ydCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBjb2RlIGJsb2NrIGlzIHByb2JhYmx5IGludHJpY2F0ZWx5IGxpbmtlZCB0byB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBpbiBkZXRhaWwuIFdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpcyB0aGUgZmxvdyBvZiBldmVudHMsIGhvdyB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB1c2VkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHJlcXVlc3RzIGFuZCByZXBsaWVzIGFyZSBxdWV1ZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hldGhlciB0aGlzIHNlY3Rpb24gY292ZXJzIHRoZSBSUEMgbGF5ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrLCBhbmQgSSYjMzk7bSBwcmVwYXJlZCBmb3IgdGhpcyB0byBpbnZvbHZlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNvY2tldCBtYW5hZ2VtZW50LiBJIGV4cGVjdCBhIGxvdCBvZiBgc3Bpbl9sb2NrYCBhbmQgYG11dGV4YCB1c2FnZSwgZ2l2ZW4gaXQmIzM5O3MgdGhlIFJQQyBjb3JlLiBBbmQgSSBiZXQgdGhlcmUgYXJlIHNvbWUgc3VidGxldGllcyByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZSB0b28uIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODExOlx0XHR9XG4gODEyOlx0XHR0cnlfdG9fZnJlZXplKCk7XG4gODEzOlx0XHRyZXR1cm4gZGlkX3RpbWVvdXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuIDgxNzpcdHtcbiA4MTg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXJ2LVx1MDAzZXN2X2xvY2spO1xuIDgxOTpcdFx0c2V0X2JpdChYUFRfVEVNUCwgXHUwMDI2bmV3eHB0LVx1MDAzZXhwdF9mbGFncyk7XG4gODIwOlx0XHRsaXN0X2FkZChcdTAwMjZuZXd4cHQtXHUwMDNleHB0X2xpc3QsIFx1MDAyNnNlcnYtXHUwMDNlc3ZfdGVtcHNvY2tzKTtcbiA4MjE6XHRcdHNlcnYtXHUwMDNlc3ZfdG1wY250JiM0MzsmIzQzOztcbiA4MjI6XHRcdGlmIChzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XG4gODIzOlx0XHRcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cbiA4MjQ6XHRcdFx0c2Vydi1cdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XG4gODI1Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lcixcbiA4MjY6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcbiA4Mjc6XHRcdH1cbiA4Mjg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlcnYtXHUwMDNlc3ZfbG9jayk7XG4gODI5Olx0XHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xuIDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIFNVTlJQQyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IHJhaXNpbmcgc29tZSBmbGFncy4gSSBzZWUgdGhhdCBpdCYjMzk7cyBtYW5pcHVsYXRpbmcgdGhlIGBuZXd4cHRgIHRyYW5zcG9ydCBzdHJ1Y3R1cmUsIG1hcmtpbmcgaXQgYXMgdGVtcG9yYXJ5LCBhZGRpbmcgaXQgdG8gYSBsaXN0LCBhbmQgdGhlbiBjcnVjaWFsbHksIGNhbGxpbmcgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgcHJvYmxlbSBpcywgYHN2Y194cHJ0X3JlY2VpdmVkYCBjb3VsZCBwb3RlbnRpYWxseSByZWxlYXNlIGBuZXd4cHRgIHZlcnkgcXVpY2tseSwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgdGhyZWFkIGltbWVkaWF0ZWx5LgoKVGhlbiBJIHNlZSB0aGF0IGBzdmNfaGFuZGxlX3hwcnRgIGNhbGxzIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgLCBidXQgKmJlZm9yZSogdGhhdCBpdCBkb2VzOgoKYGBgYwpzdmNfeHBydF9nZXQobmV3eHB0KTsKc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7CnRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtJmd0O3N2X25hbWUpOwpzdmNfeHBydF9wdXQobmV3eHB0KTsKYGBgCgpUaGUgcmVhc29uIGZvciB0aGUgYGdldGAgYW5kIGBwdXRgIGlzIGNsZWFyOiBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCBpcyBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYG5ld3hwdGAsIGFuZCB3aXRob3V0IHRoYXQgcmVmZXJlbmNlLCB0aGVyZSYjMzk7cyBhIGRlZmluaXRlIHVzZS1hZnRlci1mcmVlIHJpc2sgaWYgYHN2Y194cHJ0X3JlY2VpdmVkYCBoYXMgZHJvcHBlZCBpdC4gU28sIHRoYXQgYHN2Y194cHJ0X2dldGAgYmVmb3JlIGNhbGxpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24sIGFuZCB0aGUgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgaXMgYSB2ZXJ5IGltcG9ydGFudCBhbmQgZGVsaWJlcmF0ZSBtZWFzdXJlIHRvIG1ha2Ugc3VyZSBgbmV3eHB0YCBpcyBzdGlsbCBhbGl2ZSBhbmQgaGFzIGEgdmFsaWQgcmVmZXJlbmNlIGZvciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB0byB1c2UuIFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBzdGFyaW5nIGF0IGEgcmVhbCBidWcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IFRoaXMgaXMgU1VOUlBDIHNlcnZlciBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLCBzbyBpdCYjMzk7cyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLiBUaGlzIGlzIHVzZWQgYnkgbmZzZCwgc28gYW55IHJlbW90ZSBORlMgc2VydmVyIGlzIGV4cG9zZWQuIFdlIGFsc28ga25vdyB0aGF0IG90aGVyIGluLWtlcm5lbCBSUEMgc2VydmljZXMgdXNlIGl0LCBzbyB0aGVyZSYjMzk7cyBhIGJyb2FkIGF0dGFjayBzdXJmYWNlIGhlcmUuCgpOZXh0IHF1ZXN0aW9uOiBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgTkZTIHNlcnZlciBpcyBjb25maWd1cmVkIG9yIHVzZWQgaW4gc3l6a2FsbGVyIHRvIGVuc3VyZSBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYHN1bnJwY2AgYW5kIGBzdmNfeHBydC5jYCB0byBjb25maXJtIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiB0aGUgZnV6emluZyBoYXJuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfeHBydFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL01ha2VmaWxlPTExPXN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxuLS1cbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTUtXHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxNjpcdCAgICBzdmNfeHBydC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTE3LVx0ICAgIHhwcnRtdWx0aXBhdGgubyBuZXRsaW5rLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgUlBDIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIFJQQyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHVzdWFsbHkgZmluZCB0aGUgZnVuZGFtZW50YWwgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIFN1biBSUEMgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgYXQgcGxheS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGZlYXR1cmVzIGRlZmluZWQgaGVyZSwgYW5kIHRoZW4gb3RoZXIgcGFydHMgb2YgdGhlIFJQQyBzdGFjayBwcm9iYWJseSByZWZlcmVuY2luZyBpdC4gS25vd2luZyB3aGF0JiMzOTtzIGNvbmZpZ3VyZWQgaGVyZSBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGFueSBpc3N1ZXMgSSBtaWdodCBiZSBzZWVpbmcgd2l0aCBSUEMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNVTlJQQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTVVMVElVU0VSXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNVTlJQQ19HU1NcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XHRzZWxlY3QgT0lEX1JFR0lTVFJZXG4gICA5Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcdGRlcGVuZHMgb24gU1VOUlBDXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFNVTlJQQ19TV0FQXG4gIDE2Olx0XHRib29sXG4gIDE3Olx0XHRkZXBlbmRzIG9uIFNVTlJQQ1xuICAxODpcdFxuICAxOTpcdGNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgQ1JZUFRPXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdHNlbGVjdCBTVU5SUENfR1NTXG4gIDI0Olx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgU2VjdXJlIFJQQyB1c2luZyB0aGUgS2VyYmVyb3MgdmVyc2lvbiA1XG4gIDI3Olx0XHQgIEdTUy1BUEkgbWVjaGFuaXNtIChSRkMgMTk2NCkuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIFNlY3VyZSBSUEMgY2FsbHMgd2l0aCBLZXJiZXJvcyByZXF1aXJlIGFuIGF1eGlsaWFyeSB1c2VyLXNwYWNlXG4gIDMwOlx0XHQgIGRhZW1vbiB3aGljaCBtYXkgYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlscyBwYWNrYWdlXG4gIDMxOlx0XHQgIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIEluIGFkZGl0aW9uLCB1c2VyLXNwYWNlXG4gIDMyOlx0XHQgIEtlcmJlcm9zIHN1cHBvcnQgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgU1VOUlBDX0RFQlVHXG4gIDM3Olx0XHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgU1lTQ1RMXG4gIDM5Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHN5c2N0bC1iYXNlZCBkZWJ1Z2dpbmcgaW50ZXJmYWNlXG4gIDQyOlx0XHQgIHRoYXQgaXMgYmUgdXNlZCBieSB0aGUgJiMzOTtycGNkZWJ1ZyYjMzk7IHV0aWxpdHkgdG8gdHVybiBvbiBvciBvZmZcbiAgNDM6XHRcdCAgbG9nZ2luZyBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsIFJQQyBhY3Rpdml0eS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSB5b3VyIGtlcm5lbCBzbGlnaHRseSBzbWFsbGVyLFxuICA0NjpcdFx0ICBidXQgbWFrZXMgdHJvdWJsZXNob290aW5nIE5GUyBpc3N1ZXMgc2lnbmlmaWNhbnRseSBoYXJkZXIuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjb25uZWN0aW9ucyBoZXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgU1VOUlBDYC4gVGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoaWNoIGtlcm5lbCBjb21wb25lbnRzIGFyZSBhY3R1YWxseSAqc2VsZWN0aW5nKiBgU1VOUlBDYD8gSXMgaXQgTkZTRD8gTkZTX0ZTPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCk15IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdobyYjMzk7cyBhY3R1YWxseSB1dGlsaXppbmcgdGhlIGtleSBSUEMgc2VydmljZSBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgZnVuY3Rpb25zLiBGdW5jdGlvbnMgbGlrZSBgc3ZjX2NyZWF0ZWAsIGBzdmNfaGFuZGxlX3hwcnRgLCBvciBtYXliZSBldmVuIGRpcmVjdGx5IGluIGBuZnNkYCBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcy4KClRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29tcG9uZW50cywgSeKAmWxsIHRoZW4gY2hlY2sgdGhlIE5GU0QgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGUuIEl0IHNob3VsZCBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyB1c2VkIHRvIGNvbXBpbGUgTkZTRC4gVGhpcyBzaG91bGQgZ2l2ZSBhIGdvb2QgdmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyB3aG9sZSBuZXR3b3JrIGZpbGUgc3lzdGVtIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTkZTRGAsIHNwZWNpZmljYWxseSwgaXMgdXNpbmcgYFNVTlJQQ2AuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmcuIEFuZCBgbG9ja2RgLCB0aGF0JiMzOTtzIHRoZSBsb2NrIGRhZW1vbiwgaXQmIzM5O3MgYWxzbyBrZXllZCBpbnRvIGBTVU5SUENgLiBUaGF0IG1ha2VzIHNlbnNlOyBsb2NraW5nIG5lZWRzIHRvIGJlIHJvYnVzdCwgYW5kIFJQQyBvZmZlcnMgdGhhdCBmb3VuZGF0aW9uYWwgcmVtb3RlIGNvbW11bmljYXRpb24gbGF5ZXIuCgpOb3csIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hvJiMzOTtzIGNhbGxpbmcgYHN2Y19oYW5kbGVfeHBydGAuIFRoYXQgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyB0aGUgdHJhbnNwb3J0IGxheWVyOyBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgcmVxdWVzdHMuIElkZW50aWZ5aW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIHByZWNpc2UgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25uZWN0ZWQgYW5kIHRoZSBkYXRhIHRyYW5zZmVyIGZsb3cgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGF0IGlzIGtleSB0byBkaWFnbm9zaW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl04oCZcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfaGFuZGxlX3hwcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y194cHJ0LmM9ODE2PXN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MzEtXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODMyOnN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODMzLXtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9OTIxPWludCBzdmNfcmVjdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy05NjktXHRcdHRyYWNlX3N2Y194cHJ0X2RlcXVldWUocnFzdHApO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjk3MDpcdFx0c3ZjX2hhbmRsZV94cHJ0KHJxc3RwLCB4cHJ0KTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy05NzEtXHR9XG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYz00Mzg9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX3JkbWFfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcbi0tXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jLTYyNS1cdCAqXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jOjYyNjpcdCAqIHN2Y19oYW5kbGVfeHBydCgpIGRyb3BzIGl0cyBwcmUtYWNxdWlyZWQgbW9kdWxlIHJlZmVyZW5jZSB3aGVuXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jLTYyNy1cdCAqIC1cdTAwM2V4cG9fYWNjZXB0KCkgcmV0dXJucyBOVUxMLiBUYWtlIGEgcmVwbGFjZW1lbnQgcmVmZXJlbmNlIGJlZm9yZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA4NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyBpbiB0aGUgUlBDIFN5c3RlbSoqCgpPa2F5LCBzbyBgc3ZjX2hhbmRsZV94cHJ0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIGEgcmVjZWl2ZWQgUlBDIHJlcXVlc3QuIE1ha2VzIHNlbnNlLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhlIHJlcXVlc3QgdGFrZXMgdG8gKmdldCogdG8gYHN2Y19oYW5kbGVfeHBydGAuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYHN2Y19yZWN2YCBjYWxscyBpdC4gUmlnaHQsIHNvIEkga25vdyB0aGUgaW1tZWRpYXRlIGNhbGxlciwgYnV0IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgZnVydGhlciB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWQsIGFuZCBhdCB3aGF0IHBvaW50IHRoZSBzeXN0ZW0gcmVhbGl6ZXMgYW4gaW5jb21pbmcgbWVzc2FnZSAqaXMqIGFjdHVhbGx5IHNvbWV0aGluZyB0byBiZSBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbnRvIHdoZXJlIGBzdmNfcmVjdmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3JlY3ZcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg9MTI0Mz11bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLFxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEyNzgtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMjc5Oi8qIHN2Y19yZWN2KClcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEyODAtICogVFJBUDpcdEhWX0ZBU1RfVFJBUFxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTEzMjI9dW5zaWduZWQgbG9uZyBzdW40dl9zdmNfc2VuZCh1bnNpZ25lZCBsb25nIHN2Y19pZCxcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMzI2OnVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX3JlY3YodW5zaWduZWQgbG9uZyBzdmNfaWQsXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI3LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBidWZmZXIsXG4tLVxuZnMvbG9ja2Qvc3ZjLmM9MTI0PWxvY2tkKHZvaWQgKnZycXN0cClcbi0tXG5mcy9sb2NrZC9zdmMuYy0xMzEtXG5mcy9sb2NrZC9zdmMuYzoxMzI6XHQvKiB0cnlfdG9fZnJlZXplKCkgaXMgY2FsbGVkIGZyb20gc3ZjX3JlY3YoKSAqL1xuZnMvbG9ja2Qvc3ZjLmMtMTMzLVx0c2V0X2ZyZWV6YWJsZSgpO1xuLS1cbmZzL2xvY2tkL3N2Yy5jLTE0Mi1cdFx0bmxtc3ZjX3JldHJ5X2Jsb2NrZWQocnFzdHApO1xuZnMvbG9ja2Qvc3ZjLmM6MTQzOlx0XHRzdmNfcmVjdihycXN0cCwgMCk7XG5mcy9sb2NrZC9zdmMuYy0xNDQtXHR9XG4tLVxuZnMvbmZzL2NhbGxiYWNrLmM9NzU9bmZzNF9jYWxsYmFja19zdmModm9pZCAqdnJxc3RwKVxuLS1cbmZzL25mcy9jYWxsYmFjay5jLTgzLVx0d2hpbGUgKCFzdmNfdGhyZWFkX3Nob3VsZF9zdG9wKHJxc3RwKSlcbmZzL25mcy9jYWxsYmFjay5jOjg0Olx0XHRzdmNfcmVjdihycXN0cCwgMCk7XG5mcy9uZnMvY2FsbGJhY2suYy04NS1cbi0tXG5mcy9uZnNkL25mc3N2Yy5jPTg4OT1uZnNkKHZvaWQgKnZycXN0cClcbi0tXG5mcy9uZnNkL25mc3N2Yy5jLTkxOC1cdHdoaWxlICghc3ZjX3RocmVhZF9zaG91bGRfc3RvcChycXN0cCkpIHtcbmZzL25mc2QvbmZzc3ZjLmM6OTE5Olx0XHRzd2l0Y2ggKHN2Y19yZWN2KHJxc3RwLCA1ICogSFopKSB7XG5mcy9uZnNkL25mc3N2Yy5jLTkyMC1cdFx0Y2FzZSAtRVRJTUVET1VUOlxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD01Nj1zdGF0aWMgaW5saW5lIHUzMiBzdmNfc29ja19maW5hbF9yZWMoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02My0gKi9cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NDppbnRcdFx0c3ZjX3JlY3Yoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbyk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjUtdm9pZFx0XHRzdmNfc2VuZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9ODk3PXN0YXRpYyB2b2lkIHN2Y190aHJlYWRfd2FrZV9uZXh0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTkyMC0gKi9cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo5MjE6aW50IHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtOTIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX3JlY3ZgIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHN2Y19yZWN2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggYW5kIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGBzdmNfcmVjdmAgaXMgYSBwcmV0dHkgY29yZSBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGJ5IGEgZmV3IGNydWNpYWwgY29tcG9uZW50czogYGxvY2tkYCAoc3BlY2lmaWNhbGx5IGluIGBmcy9sb2NrZC9zdmMuY2ApLCBgbmZzNF9jYWxsYmFja19zdmNgIChsb2NhdGVkIGluIGBmcy9uZnMvY2FsbGJhY2suY2ApLCBhbmQgdGhlIHByaW1hcnkgTkZTIGRhZW1vbiwgYG5mc2RgIChmb3VuZCB3aXRoaW4gYGZzL25mc2QvbmZzc3ZjLmNgKS4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGhhbmRsaW5nIGluY29taW5nIFJQQyByZXF1ZXN0cy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGxpc3RlbmVyIHRyYW5zcG9ydHMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBhIHRyYW5zcG9ydCBpcyBpbml0aWFsaXplZCBhbmQgYWN0aXZlbHkgbGlzdGVuaW5nIHdoZW4gZWl0aGVyIHRoZSBORlMgc2VydmVyLCBsb2NrZCBzZXJ2aWNlLCBvciBhIGNhbGxiYWNrIG1lY2hhbmlzbSBiaW5kcyB0byBhIHBvcnQg4oCTIHN1Y2ggYXMgVENQIHBvcnQgMjA0OSBmb3IgdGhlIG1haW4gTkZTIGRhZW1vbiDigJMgYW5kIGEgY2xpZW50IGVzdGFibGlzaGVzIGEgY29ubmVjdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGxpa2VseSBgeHBvX2FjY2VwdGAsIHdoaWNoIGlzIGNhbGxlZCB0byBhY2NlcHQgdGhlIGluY29taW5nIGNvbm5lY3Rpb24sIG9yIGF0IGxlYXN0IHRoYXQmIzM5O3MgbXkgd29ya2luZyBoeXBvdGhlc2lzLiBJIHNob3VsZCBjaGVjayB0aGF0LgoKQWgsIHllcywgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjYWxsOiBgbmV3eHB0ID0geHBydC0mZ3Q7eHB0X29wcy0mZ3Q7eHBvX2FjY2VwdCh4cHJ0KTtgLiBUaGlzIGlzIHdoZXJlIHRoZSB0cmFuc3BvcnQgZ2V0cyBpdHMgbGVncywgc28gdG8gc3BlYWsuIElmIGl0JiMzOTtzIGEgVENQIGNvbm5lY3Rpb24sIHRoYXQgYHhwb19hY2NlcHRgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgYHN2Y190Y3BfYWNjZXB0YCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGF0IGltcGxlbWVudGF0aW9uIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfdGNwX2FjY2VwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTI2LSAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTI3OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkyOC17XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTMzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN2Y194cHJ0X29wcyBzdmNfdGNwX29wcyA9IHtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ0LVx0Lnhwb19oYXNfd3NwYWNlID0gc3ZjX3RjcF9oYXNfd3NwYWNlLFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTM0NTpcdC54cG9fYWNjZXB0ID0gc3ZjX3RjcF9hY2NlcHQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ2LVx0Lnhwb19raWxsX3RlbXBfeHBydCA9IHN2Y190Y3Bfa2lsbF90ZW1wX3hwcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIEFuYWx5c2lzOiBORlMgU2VydmVyIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHRoZSBORlMgc2VydmVyIChuZnNkKSB3aGVuIGEgY2xpZW50IGNvbm5lY3RzLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBoYW5kbGluZyBvZiBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgZGVzY3JpcHRvcnMgKGBuZXd4cHRgKSB3aXRoaW4gYHN2Y19oYW5kbGVfeHBydGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIHdvcmtlciB0aHJlYWQgY291bGQgcHJlbWF0dXJlbHkgZnJlZSB0aGUgYG5ld3hwdGAgYmVmb3JlIGNlcnRhaW4gb3BlcmF0aW9ucyAobGlrZSB0cmFjaW5nKSB3ZXJlIGNvbXBsZXRlZCBpbiB0aGUgYWNjZXB0aW5nIHRocmVhZC4gVGhlIGZpeCBpbnZvbHZlcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0YCBhbmQgZGVjcmVtZW50aW5nIGl0IHdpdGggYHN2Y194cHJ0X3B1dGAgdG8gZW5zdXJlIHRoZSBkZXNjcmlwdG9yJiMzOTtzIGxpZmV0aW1lIG1hdGNoZXMgdGhlIHJlcXVpcmVkIG9wZXJhdGlvbnMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIHBhdGNoZXMgYXJlIGNsZWFyLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU1VOUlBDL05GUyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciBhbHJlYWR5IGZ1enplcyBuZnNkLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQhIFdlIGNhbiBjb25maXJtIHRoYXQgYSB1c2VyLXNwYWNlIG5mcyBzZXJ2ZXIgY2FuIGJlIHN0YXJ0ZWQsIGFuZCBjb25uZWN0aW9ucyBjYW4gYmUgZXN0YWJsaXNoZWQgb3ZlciBsb29wYmFjaywgd2hpY2ggY292ZXJzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlYWNoYWJsZSBjb2RlLgoKVG8gY29uZmlybSByZWFjaGFiaWxpdHksIHdlIG11c3QgY2hlY2sgdGhlIGludm9sdmVkIHN5bWJvbHMuCldlIGtub3cgdGhhdCBgc3ZjX2hhbmRsZV94cHJ0YCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzdmNfcmVjdmAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFdlIGFsc28gaGF2ZSBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCB3aGljaCBpcyBzdGF0aWMsIGFuZCBgc3ZjX3hwcnRfZ2V0YCAvIGBzdmNfeHBydF9wdXRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBmb3IgZnV6emluZy4KVGhlIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGlzIGZ1bmN0aW9uLCBldmVuIHRob3VnaCBzdGF0aWMsIGlzIHRoYXQgdGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBpdC4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBhZGRlZCBsb2dpYyBpdHNlbGYgc2hvdWxkIGJlIGluY2x1ZGVkLgoKV2UgY2FuIGluY2x1ZGUgYm90aCBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgYHN2Y19yZWN2YC4gU2luY2UgYHN2Y19oYW5kbGVfeHBydGAgaXNuJiMzOTt0IGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiB3aXRoaW4gYSBoZWFkZXIsIHdlIGNhbiB0YXJnZXQgaXQgc3BlY2lmaWNhbGx5LgoKRmluYWxseSwgd2UgaGF2ZSB0byBsb29rIGF0IGRlcGVuZGVuY2llcy4gVGhlIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgIGZpbGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfU1VOUlBDYCBpcyBzZWxlY3RlZCBieSBgTkZTRGAsIHdoaWNoIGRlcGVuZHMgb24gYE1VTFRJVVNFUmAuIFNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGNvbmZpZ3MgYXJlIGVuYWJsZWQgd2l0aGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LgoKSW4gc3VtbWFyeTogdGhlIHBhdGNoIGlzIHJlYWNoYWJsZTsgdGhlcmVmb3JlLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE5GU2QgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgdG9wIG9mIHRoZSBgZnMvbmZzZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GUyBzZXJ2ZXIga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgYmVkcm9jazsgaXQmIzM5O3MgZ29pbmcgdG8gZGVmaW5lIGhvdyB0aGUgd2hvbGUgdGhpbmcgaXMgYnVpbHQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgTkZTdjQgaXMgdGhlIGRlZmF1bHQsIGlmIGxlZ2FjeSB2ZXJzaW9ucyBhcmUgYWxzbyBpbmNsdWRlZCwgd2hhdCBzZWN1cml0eSBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBvZiBjb3Vyc2UsIHdoZXJlIGl0IGhvb2tzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgc2Vuc2libGUgZGVmYXVsdHMsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSBhbmQgcm9idXN0bHkgSSBjYW4gdGFpbG9yIHRoZSBORlMgc2VydmVyIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3Mg4oCTIGZyb20gZW1iZWRkZWQgc3lzdGVtcyB0byBoaWdoLXBlcmZvcm1hbmNlIHNlcnZlcnMuIEFueSB1bmV4cGVjdGVkIG9wdGlvbnMgb3IgY29uZnVzaW5nIGxvZ2ljIHdpbGwgaW1tZWRpYXRlbHkgcmFpc2UgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgbWFpbnRhaW5hYmlsaXR5IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyB0aW1lIHRvIHNlZSB3aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHJldmVhbHMgYWJvdXQgdGhlIE5GUyBzZXJ2ZXImIzM5O3MgZGVzaWduIHBoaWxvc29waHkgYW5kIGNvbmZpZ3VyYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZ3Jvay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZTRFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdGRlcGVuZHMgb24gRklMRV9MT0NLSU5HXG4gICA2Olx0XHRkZXBlbmRzIG9uIEZTTk9USUZZXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fTElCX01ENSBpZiBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NiBpZiBORlNEX1Y0XG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPICMgcmVxdWlyZWQgYnkgUlBDU0VDX0dTU19LUkI1IGFuZCBzaWduZWQgZmlsZWhhbmRsZXNcbiAgMTE6XHRcdHNlbGVjdCBMT0NLRFxuICAxMjpcdFx0c2VsZWN0IFNVTlJQQ1xuICAxMzpcdFx0c2VsZWN0IEVYUE9SVEZTXG4gIDE0Olx0XHRzZWxlY3QgTkZTX0NPTU1PTlxuICAxNTpcdFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YyX0FDTFxuICAxNjpcdFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YzX0FDTFxuICAxNzpcdFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgQ2hvb3NlIFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhbGxvdyBvdGhlciBjb21wdXRlcnMgdG8gYWNjZXNzXG4gIDIwOlx0XHQgIGZpbGVzIHJlc2lkaW5nIG9uIHRoaXMgc3lzdGVtIHVzaW5nIFN1biYjMzk7cyBOZXR3b3JrIEZpbGUgU3lzdGVtXG4gIDIxOlx0XHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxuICAyMjpcdFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIFlvdSBtYXkgY2hvb3NlIHRvIHVzZSBhIHVzZXItc3BhY2UgTkZTIHNlcnZlciBpbnN0ZWFkLCBpbiB3aGljaFxuICAyNTpcdFx0ICBjYXNlIHlvdSBjYW4gY2hvb3NlIE4gaGVyZS5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgVG8gZXhwb3J0IGxvY2FsIGZpbGUgc3lzdGVtcyB1c2luZyBORlMsIHlvdSBhbHNvIG5lZWQgdG8gaW5zdGFsbFxuICAyODpcdFx0ICB1c2VyIHNwYWNlIHByb2dyYW1zIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXggbmZzLXV0aWxzXG4gIDI5Olx0XHQgIHBhY2thZ2UsIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIE1vcmUgZGV0YWlsIGFib3V0XG4gIDMwOlx0XHQgIHRoZSBMaW51eCBORlMgc2VydmVyIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB2aWEgdGhlXG4gIDMxOlx0XHQgIGV4cG9ydHMoNSkgbWFuIHBhZ2UuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXG4gIDM0Olx0XHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxuICAzNTpcdFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDUyCgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCBgQ09ORklHX05GU0RgIGhhcyBhIGRlcGVuZGVuY3kgY2hhaW46IGBJTkVUYCwgYEZJTEVfTE9DS0lOR2AsIGBGU05PVElGWWAsIGFuZCBgTVVMVElVU0VSYCwgYW5kIGl0IGFsc28gc2VsZWN0cyBgU1VOUlBDYC4gQWx0ZXJuYXRpdmVseSwgYENPTkZJR19TVU5SUENgIGl0c2VsZiBpcyBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IGBORlNEYCwgYE5GU19GU2AsIGBMT0NLRGAsIGFuZCBvdGhlcnMuIFByb3ZpZGluZyBgU1VOUlBDYCBhbmQgYE5GU0RgIGFzIGBFbmFibGVDb25maWdzYCBpcyBhIGdvb2Qgc3RyYXRlZ2ljIG1vdmUsIGFzIGl0IGNvdmVycyBtdWx0aXBsZSBlbnRyeSBwb2ludHMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGZvY3VzZWQgdGhlIHByb3Bvc2VkIGNoYW5nZXMgYXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYHN2Y19oYW5kbGVfeHBydGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc2VsZWN0aW9uIG9mIHN5bWJvbHMgaXMgcHJlY2lzZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIAoKUmlnaHQsIGBzdmNfaGFuZGxlX3hwcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEl0cyBkaXJlY3QgY2FsbGVyIGlzIGBzdmNfcmVjdmAsIGFuZCBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBpcyByaWdodCB0aGVyZSBhbG9uZ3NpZGUgaXQuIFNvLCBjb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgc3ZjX2hhbmRsZV94cHJ0YCwgYHN2Y19yZWN2YCwgYW5kIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIGluIHRoZSBhbmFseXNpcy4gVGhlc2UgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBoaWdobHkgc3BlY2lmaWMgYW5kIG5vdCB1c2VkIHViaXF1aXRvdXNseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBjbGVhci4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGBzdmNfaGFuZGxlX3hwcnQoKWAgaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIHdoZXJlIGl0IG5vdyBhY3F1aXJlcyBhIHRlbXBvcmFyeSB0cmFuc3BvcnQgcmVmZXJlbmNlICh1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgKSBhcm91bmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlLiBXaXRob3V0IHRoaXMsIHRoZSBhY2NlcHRlZCB0cmFuc3BvcnQgY291bGQgYmUgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCBmcmVlZCBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgY29uY3VycmVudGx5IGFmdGVyIGJlaW5nIGFkZGVkLCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgZXhlY3V0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgaGl0IGJ5IFNVTlJQQyBzZXJ2ZXIgbGlzdGVuZXJzIGxpa2UgTkZTRCBhbmQgbG9ja2Qgd2hlbiBhY2NlcHRpbmcgaW5jb21pbmcgUlBDIG5ldHdvcmsgY29ubmVjdGlvbnMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGNvcnJ1cHRpb24gdW5kZXIgY29uY3VycmVudCBjb25uZWN0L2Rpc2Nvbm5lY3Qgc2NlbmFyaW9zLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgYXBwcm9hY2ggaXMgc291bmQsIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGFwcHJvcHJpYXRlLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgbG9naWMsIGFuZCBpdCBmdWxmaWxscyB0aGUgcmVxdWlyZW1lbnRzLiBMZXQmIzM5O3Mgc2lnbmFsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19oYW5kbGVfeHBydCYjMzQ7LAogICAgJiMzNDtzdmNfcmVjdiYjMzQ7LAogICAgJiMzNDtzdmNfYWRkX25ld190ZW1wX3hwcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3ZjX2hhbmRsZV94cHJ0KCkgaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAodmlhIHN2Y194cHJ0X2dldC9wdXQpIGFjcm9zcyBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBhbmQgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZS9VQUYgd2hlcmUgdGhlIHRyYW5zcG9ydCBtaWdodCBiZSBjbG9zZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgcnVucy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBjb3JlIGtlcm5lbCBSUEMgbmV0d29ya2luZyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gaW5jb21pbmcgY29ubmVjdGlvbnMgYXJlIGFjY2VwdGVkIG9uIFNVTlJQQyBsaXN0ZW5lciBzb2NrZXRzIChlLmcuLCBORlNELCBsb2NrZCkuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gdGVzdCB0cmFuc3BvcnQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfaGFuZGxlX3hwcnQmIzM0OywKICAgICYjMzQ7c3ZjX3JlY3YmIzM0OywKICAgICYjMzQ7c3ZjX2FkZF9uZXdfdGVtcF94cHJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmM6c3ZjX2hhbmRsZV94cHJ0KCkuIE9uY2Ugc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgaXMgY2FsbGVkLCB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0IChuZXd4cHQpIGNhbiBiZSBwcm9jZXNzZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIGZpbmlzaGVzIGFjY2Vzc2luZyBpdC4gQnkgdGFraW5nIGEgcmVmZXJlbmNlIHdpdGggc3ZjX3hwcnRfZ2V0KCkgYmVmb3JlIGFkZGluZyB0aGUgdHJhbnNwb3J0IGFuZCByZWxlYXNpbmcgaXQgd2l0aCBzdmNfeHBydF9wdXQoKSBhZnRlcndhcmRzLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSB0cmFuc3BvcnQgcG9pbnRlciByZW1haW5zIHZhbGlkIGR1cmluZyB0aGUgdHJhY2Vwb2ludCBjYWxsLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E3Y2Q4OTk4ODFiNWJiMjYzYzE1YjIyNjRhMjVhMDI4NWVhZTY3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE0OjU5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IDQwMDQwYWY1ODhmYjIuLjkzNzA0MDE0NjNiNmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTg1Miw4ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCiAJCW5ld3hwdCA9IHhwcnQtJmd0O3hwdF9vcHMtJmd0O3hwb19hY2NlcHQoeHBydCk7CiAJCWlmIChuZXd4cHQpIHsKIAkJCW5ld3hwdC0mZ3Q7eHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LSZndDt4cHRfY3JlZCk7CiYjNDM7CQkJc3ZjX3hwcnRfZ2V0KG5ld3hwdCk7CiAJCQlzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTsKIAkJCXRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtJmd0O3N2X25hbWUpOwomIzQzOwkJCXN2Y194cHJ0X3B1dChuZXd4cHQpOwogCQl9IGVsc2UgewogCQkJbW9kdWxlX3B1dCh4cHJ0LSZndDt4cHRfY2xhc3MtJmd0O3hjbF9vd25lcik7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUlBDIFRyYW5zcG9ydCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgYXJvdW5kIHRoZSBgc3ZjX2hhbmRsZV94cHJ0YCBmdW5jdGlvbiBhbmQgaXRzIGhhbmRsaW5nIG9mIGFjY2VwdGVkIHRyYW5zcG9ydCBlbmRwb2ludHMuIFRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBzdmNfeHBydF9nZXQoKWAgYW5kIGBzdmNfeHBydF9wdXQoKWAgY2FsbHMgYXJvdW5kIHRoZSBuZXdseSBjcmVhdGVkIGBuZXd4cHRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBuZXcgdHJhbnNwb3J0IGVuZHBvaW50IG1vcmUgY2FyZWZ1bGx5LgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHdlcmUganVzdCBnZXR0aW5nIHRoZSBjcmVkZW50aWFsLCBhZGRpbmcgaXQgYXMgYSB0ZW1wb3JhcnkgdHJhbnNwb3J0LCBhbmQgdHJhY2luZyB0aGUgYWNjZXB0YW5jZS4gTm93LCB3ZSYjMzk7cmUgZXhwbGljaXRseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIHJpZ2h0IGFmdGVyIGdldHRpbmcgdGhlIG5ldyB0cmFuc3BvcnQsIGFuZCBkZWNyZW1lbnRpbmcgaXQsIHdpdGggYHN2Y194cHJ0X3B1dCgpYCwgYWZ0ZXIgYWRkaW5nIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0LiBUaGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgY2FsbCBsb29rcyBsaWtlIGl0IGlzIGJldHdlZW4gdGhlIGBnZXRgIGFuZCB0aGUgYHB1dGAuIEkgd29uZGVyIGlmIHRoZXJlIHdhcyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZGVudGlmaWVkLCBsZWFkaW5nIHRvIHRoaXMgYWRkaXRpb24uCgpJIGFzc3VtZSB0aGUgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGUgYG5ld3hwdGAgaXNuJiMzOTt0IHByZW1hdHVyZWx5IHJlbGVhc2VkIGJ5IHRoZSBzeXN0ZW0gd2hpbGUgaXQmIzM5O3MgYmVpbmcgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgc2VydmVyJiMzOTtzIHRlbXBvcmFyeSB0cmFuc3BvcnQgbGlzdC4gVGhlIGBtb2R1bGVfcHV0YCBjYWxsIGluIHRoZSBgZWxzZWAgYnJhbmNoIHJlbWFpbnMsIHNvIGlmIHRoZSB0cmFuc3BvcnQgaXNuJiMzOTt0IGFjY2VwdGVkLCB0aGUgbW9kdWxlIGlzIHN0aWxsIHJlbGVhc2VkLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgZ2V0X2NyZWRgIGxvb2tzIGxpa2UgaXQgc3RpbGwgbWFuYWdlcyB0aGUgY3JlZGVudGlhbHMsIGFuZCB0aGUgbmV3IHRyYW5zcG9ydCBkb2VzIGdldCBpdHMgY3JlZGVudGlhbHMuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZG91YmxlIGBnZXRgIGFuZCBgcHV0YCBpcyBhIG5ldyB0b3VjaC4KCkkmIzM5O2Qgd2FudCB0byBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZGlzY3Vzc2lvbnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlLCBidXQgbXkgaW1tZWRpYXRlIGd1ZXNzIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgd2l0aCBob3cgdGhlIHRyYW5zcG9ydCBlbmRwb2ludCBsaWZldGltZSBpcyBtYW5hZ2VkLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdGVtcG9yYXJ5IHRyYW5zcG9ydCBsaXN0LiBXZSYjMzk7cmUgZXhwbGljaXRseSBjb250cm9sbGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHByb3RlY3QgdGhlIHRyYW5zcG9ydCBkdXJpbmcgaXRzIGxpZmVjeWNsZS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBtYW5hZ2luZyBsaWZldGltZXMgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xuIDg0MTpcdFx0XHQvKiBMZWF2ZSBYUFRfQlVTWSBzZXQgb24gdGhlIGRlYWQgeHBydDogKi9cbiA4NDI6XHRcdFx0Z290byBvdXQ7XG4gODQzOlx0XHR9XG4gODQ0Olx0XHRpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCBcdTAwMjZ4cHJ0LVx1MDAzZXhwdF9mbGFncykpIHtcbiA4NDU6XHRcdFx0c3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7XG4gODQ2Olx0XHRcdC8qXG4gODQ3Olx0XHRcdCAqIFdlIGtub3cgdGhpcyBtb2R1bGVfZ2V0IHdpbGwgc3VjY2VlZCBiZWNhdXNlIHRoZVxuIDg0ODpcdFx0XHQgKiBsaXN0ZW5lciBob2xkcyBhIHJlZmVyZW5jZSB0b29cbiA4NDk6XHRcdFx0ICovXG4gODUwOlx0XHRcdF9fbW9kdWxlX2dldCh4cHJ0LVx1MDAzZXhwdF9jbGFzcy1cdTAwM2V4Y2xfb3duZXIpO1xuIDg1MTpcdFx0XHRzdmNfY2hlY2tfY29ubl9saW1pdHMoeHBydC1cdTAwM2V4cHRfc2VydmVyKTtcbiA4NTI6XHRcdFx0bmV3eHB0ID0geHBydC1cdTAwM2V4cHRfb3BzLVx1MDAzZXhwb19hY2NlcHQoeHBydCk7XG4gODUzOlx0XHRcdGlmIChuZXd4cHQpIHtcbiA4NTQ6XHRcdFx0XHRuZXd4cHQtXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVx1MDAzZXhwdF9jcmVkKTtcbiA4NTU6XHRcdFx0XHRzdmNfeHBydF9nZXQobmV3eHB0KTtcbiA4NTY6XHRcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbiA4NTc6XHRcdFx0XHR0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuIDg1ODpcdFx0XHRcdHN2Y194cHJ0X3B1dChuZXd4cHQpO1xuIDg1OTpcdFx0XHR9IGVsc2Uge1xuIDg2MDpcdFx0XHRcdG1vZHVsZV9wdXQoeHBydC1cdTAwM2V4cHRfY2xhc3MtXHUwMDNleGNsX293bmVyKTtcbiA4NjE6XHRcdFx0fVxuIDg2MjpcdFx0XHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcbiA4NjM6XHRcdH0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODY0Olx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9faGFuZHNoYWtlKHhwcnQpO1xuIDg2NTpcdFx0XHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcbiA4NjY6XHRcdH0gZWxzZSBpZiAoc3ZjX3hwcnRfcmVzZXJ2ZV9zbG90KHJxc3RwLCB4cHJ0KSkge1xuIDg2NzpcdFx0XHQvKiBYUFRfREFUQXxYUFRfREVGRVJSRUQgY2FzZTogKi9cbiA4Njg6XHRcdFx0cnFzdHAtXHUwMDNlcnFfZGVmZXJyZWQgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KTtcbiA4Njk6XHRcdFx0aWYgKHJxc3RwLVx1MDAzZXJxX2RlZmVycmVkKVxuIDg3MDpcdFx0XHRcdGxlbiA9IHN2Y19kZWZlcnJlZF9yZWN2KHJxc3RwKTtcbiA4NzE6XHRcdFx0ZWxzZVxuIDg3MjpcdFx0XHRcdGxlbiA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fcmVjdmZyb20ocnFzdHApO1xuIDg3MzpcdFx0XHRycXN0cC1cdTAwM2VycV9yZXNlcnZlZCA9IHNlcnYtXHUwMDNlc3ZfbWF4X21lc2c7XG4gODc0Olx0XHRcdGF0b21pY19hZGQocnFzdHAtXHUwMDNlcnFfcmVzZXJ2ZWQsIFx1MDAyNnhwcnQtXHUwMDNleHB0X3Jlc2VydmVkKTtcbiA4NzU6XHRcdFx0aWYgKGxlbiBcdTAwM2M9IDApXG4gODc2Olx0XHRcdFx0Z290byBvdXQ7XG4gODc3Olx0XG4gODc4Olx0XHRcdHRyYWNlX3N2Y194ZHJfcmVjdmZyb20oXHUwMDI2cnFzdHAtXHUwMDNlcnFfYXJnKTtcbiA4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBzdmNcX2FkZFxfbmV3XF90ZW1wXF94cHJ0IGFuZCB0aGUgc3ZjXF94cHJ0IGZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaW4gdGhpcyBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhlIGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBmdW5jdGlvbnMgd2VyZSBpbnRyb2R1Y2VkIGludG8gdGhpcyBhcmVhLiBXaGF0IHByb2JsZW0gd2VyZSB0aGV5IGRlc2lnbmVkIHRvIHNvbHZlPyBJcyBpdCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHRocmVhZCBzYWZldHksIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwcm90b2NvbCBoYW5kbGluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIHRob3NlIGFkZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHRocm91Z2gsIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSBpdCBiYWNrIHRvIHNlZSB3aGF0IHRyaWdnZXJlZCB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdG8gYmVnaW4gd2l0aC4gVGhlICYjMzQ7d2h5JiMzNDsgaXMgdGhlIGtleSBkcml2ZXIgaGVyZSwgc28gSSYjMzk7bSBub3Qgb25seSBmb2N1c2luZyBvbiB0aGUgJiMzNDt3aGF0LiYjMzQ7IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE1LVxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gc3ZjX3hwcnQuYzogQSBTcGVjaWZpYyBTZWN0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIGxpbmVzIDgxMCB0byA4NDUuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8uLi4gd2VsbCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYHN2Y194cHJ0YCwgcHJvYmFibHkgdHJhbnNwb3J0LWxheWVyIGhhbmRsaW5nIG9yIHNvbWUgYXNwZWN0IG9mIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gSSBzdXNwZWN0IGl0IG1pZ2h0IGRlYWwgd2l0aCB0aGUgbGlmZWN5Y2xlIG9mIGEgcGFydGljdWxhciBSUEMgdHJhbnNhY3Rpb24sIG1heWJlIGNvbm5lY3Rpb24gc2V0dXAsIHRlYXItZG93biwgb3IgZXZlbiBlcnJvciBoYW5kbGluZy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBhbmQgd2hhdCB0aGlzIHNlY3Rpb24gaXMgcmVhbGx5IHJlc3BvbnNpYmxlIGZvci4gVGltZSB0byBnbyBsaW5lLWJ5LWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODExOlx0XHR9XG4gODEyOlx0XHR0cnlfdG9fZnJlZXplKCk7XG4gODEzOlx0XHRyZXR1cm4gZGlkX3RpbWVvdXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuIDgxNzpcdHtcbiA4MTg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXJ2LVx1MDAzZXN2X2xvY2spO1xuIDgxOTpcdFx0c2V0X2JpdChYUFRfVEVNUCwgXHUwMDI2bmV3eHB0LVx1MDAzZXhwdF9mbGFncyk7XG4gODIwOlx0XHRsaXN0X2FkZChcdTAwMjZuZXd4cHQtXHUwMDNleHB0X2xpc3QsIFx1MDAyNnNlcnYtXHUwMDNlc3ZfdGVtcHNvY2tzKTtcbiA4MjE6XHRcdHNlcnYtXHUwMDNlc3ZfdG1wY250JiM0MzsmIzQzOztcbiA4MjI6XHRcdGlmIChzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XG4gODIzOlx0XHRcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cbiA4MjQ6XHRcdFx0c2Vydi1cdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XG4gODI1Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lcixcbiA4MjY6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcbiA4Mjc6XHRcdH1cbiA4Mjg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlcnYtXHUwMDNlc3ZfbG9jayk7XG4gODI5Olx0XHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xuIDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiA4MzU6XHRcdGludCBsZW4gPSAwO1xuIDgzNjpcdFxuIDgzNzpcdFx0aWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODM4Olx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBUX0tJTExfVEVNUCwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKVxuIDgzOTpcdFx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fa2lsbF90ZW1wX3hwcnQoeHBydCk7XG4gODQwOlx0XHRcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcbiA4NDE6XHRcdFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXG4gODQyOlx0XHRcdGdvdG8gb3V0O1xuIDg0MzpcdFx0fVxuIDg0NDpcdFx0aWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIFVBRiBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgY2FsbHMgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGBuZXd4cHRgIGlzIGVzc2VudGlhbGx5IHJlbGVhc2VkIGludG8gdGhlIHdpbGQgd2l0aCB0aGF0IGNhbGwuIEl0IGNhbiB0aGVuIGJlIHBpY2tlZCB1cCBieSBhbm90aGVyIHRocmVhZCwgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCAqZnJlZWQqIOKAkyBhbGwgYmVmb3JlIGB0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LSZndDtzdl9uYW1lKWAgZXZlbiBnZXRzIGEgY2hhbmNlIHRvIHJ1biEgVGhhdCYjMzk7cyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIG1lYW5zIGB0cmFjZV9zdmNfeHBydF9hY2NlcHRgIHdhcyBhY2Nlc3NpbmcgYG5ld3hwdGAgKmFmdGVyKiBpdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KClRoZSBmaXggaXMgZWxlZ2FudDogd3JhcCB0aGUgY2FsbCB0byBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3aXRoIGBzdmNfeHBydF9nZXQobmV3eHB0KWAgYW5kIGBzdmNfeHBydF9wdXQobmV3eHB0KWAuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBgbmV3eHB0YCAqYmVmb3JlKiBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byBvdGhlciB0aHJlYWRzLCBndWFyYW50ZWVpbmcgaXQmIzM5O3MgYWxpdmUgd2hpbGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgZXhlY3V0ZXMsIGFuZCB0aGVuIHJlbGVhc2VzIHRoZSByZWZlcmVuY2Ugd2hlbiBkb25lLiAgU2ltcGxlLCBlZmZlY3RpdmUsIGFuZCBpdCBhZGRyZXNzZXMgdGhlIHJvb3QgY2F1c2UgZGlyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBiZSB0aG9yb3VnaCBhbmQgYW5hbHl6ZSBpZiB0aGUgZml4IGludHJvZHVjZXMgYW55IG90aGVyIHByb2JsZW1zLiBBcmUgdGhlcmUgYW55IHJpc2tzIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gR2l2ZW4gbXkga25vd2xlZGdlLCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoZSBhbnN3ZXIgaXMgbm8sIGJ1dCBhIHF1aWNrIHJldmlldyBpcyBhbHdheXMgYSBnb29kIGlkZWEuICBJdCBsb29rcyBsaWtlOgoKKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuCiogICBObyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2l0aG91dCB6ZXJvaW5nLgoqICAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaGF2ZSBiZWVuIGFsdGVyZWQgdG8gcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlIGZpeCBvbmx5IHJlbGllcyBvbiBnZXR0aW5nIGFuZCByZWxlYXNpbmcgYSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHN2Y194cHJ0X2dldGAgYW5kIGBzdmNfeHBydF9wdXRgIGFyb3VuZCB0aGUgdHJhY2Vwb2ludC4KCldlJiMzOTtyZSBqdXN0IG1hbmlwdWxhdGluZyBhIHJlZmVyZW5jZSBjb3VudCBhbmQgdXNpbmcgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgc28gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgZml4IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYnJpZWZseSByZXZpZXcgYHN2Y194cHJ0X2dldGAgYW5kIGBzdmNfeHBydF9wdXRgIGp1c3QgdG8gYmUgY2VydGFpbi4gQnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBwYXRjaCB0byBzb2x2ZSBhIGNyaXRpY2FsIG1lbW9yeSBzYWZldHkgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0Lmg9MTg4PXZvaWRcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE4OS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0Lmg6MTkwOnN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaC0xOTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzEzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYHN2Y194cHJ0LmhgIGF0IExpbmUgMTkwKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgaW5mcmFzdHJ1Y3R1cmUgd29ya3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc3ZjX3hwcnQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0cmFuc3BvcnQgbGF5ZXIgaGFuZGxpbmcuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBzb21ldGhpbmcgdGhhdCBkZWZpbmVzIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsuIE1heWJlIEkmIzM5O2xsIGZpbmQgYSBkYXRhIHN0cnVjdHVyZSBmb3IgYSB0cmFuc3BvcnQgaGFuZGxlLCBvciBwb3NzaWJseSBzb21lIGtleSBtYWNyb3MgZm9yIGRpc3BhdGNoaW5nIGNhbGxzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODg6XHR2b2lkXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpO1xuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDE5MTpcdHtcbiAxOTI6XHRcdGtyZWZfZ2V0KFx1MDAyNnhwcnQtXHUwMDNleHB0X3JlZik7XG4gMTkzOlx0fVxuIDE5NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfbG9jYWwoc3RydWN0IHN2Y194cHJ0ICp4cHJ0LFxuIDE5NTpcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSxcbiAxOTY6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHNpemVfdCBzYWxlbilcbiAxOTc6XHR7XG4gMTk4Olx0XHRtZW1jcHkoXHUwMDI2eHBydC1cdTAwM2V4cHRfbG9jYWwsIHNhLCBzYWxlbik7XG4gMTk5Olx0XHR4cHJ0LVx1MDAzZXhwdF9sb2NhbGxlbiA9IHNhbGVuO1xuIDIwMDpcdH1cbiAyMDE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3hwcnRfc2V0X3JlbW90ZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQsXG4gMjAyOlx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSxcbiAyMDM6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzaXplX3Qgc2FsZW4pXG4gMjA0Olx0e1xuIDIwNTpcdFx0bWVtY3B5KFx1MDAyNnhwcnQtXHUwMDNleHB0X3JlbW90ZSwgc2EsIHNhbGVuKTtcbiAyMDY6XHRcdHhwcnQtXHUwMDNleHB0X3JlbW90ZWxlbiA9IHNhbGVuO1xuIDIwNzpcdFx0c25wcmludGYoeHBydC1cdTAwM2V4cHRfcmVtb3RlYnVmLCBzaXplb2YoeHBydC1cdTAwM2V4cHRfcmVtb3RlYnVmKSAtIDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjYKCQkJCQkJCW91dHB1dDogMjMxCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4OiBgc3ZjX3hwcnRfZ2V0YCBpcyBiZWluZyBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHN2Y194cHJ0X3B1dCgpYCBhZnRlciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgLiAgQmFzaWNhbGx5LCBhIHNpbXBsZSByZWZlcmVuY2UgY291bnQgbWFuaXB1bGF0aW9uLiAgYHN2Y194cHJ0X2dldGAganVzdCBkb2VzIGEgYGtyZWZfZ2V0YCwgYW5kIGBzdmNfeHBydF9wdXRgIGNhbGxzIGBrcmVmX3B1dGAgd2l0aCB0aGUgYHN2Y194cHJ0X3JlbGVhc2VgIGNhbGxiYWNrLgoKVGhlIHByb2JsZW0gdGhpcyBpcyBtZWFudCB0byBhZGRyZXNzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbjogYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBgbmV3eHB0YCBtaWdodCBnZXQgZGVzdHJveWVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgIHJ1bnMuICBUaGlzIHJlZmVyZW5jZSBjb3VudGluZyBpcyBtZWFudCB0byBwcmV2ZW50IHRoYXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55PyAgQWJzb2x1dGVseSBub3QuIFRoaXMgaXMgc3F1YXJlbHkgaW4gS0FTQU4mIzM5O3MgZG9tYWluLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIEtBU0FOIGlzIGJ1aWx0IGZvciB0aGF0LiAgVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgbWVtb3J5IGxlYWtzIGhlcmUuIEFueSByZWZjb3VudCBwcm9ibGVtcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIHJlZmNvdW50X3Qgc2FuaXR5IGNoZWNrcyBhbmQgU0xVQiBkZWJ1ZyBmZWF0dXJlcy4gS01TQU4gd291bGRuJiMzOTt0IG9mZmVyIGFueSB1bmlxdWUgdmFsdWUgaW4gZGV0ZWN0aW5nIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgZmFsc2UuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIGNsZWFuLCBuZWNlc3NhcnkgZml4LCBhbmQgaXQmIzM5O3Mgd2l0aGluIHRoZSByZW1pdCBvZiBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG9iamVjdCBsaWZldGltZSAoVUFGIHByZXZlbnRpb24pLiBMaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIxLjE3OTQ2NDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNTk3MzQ4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIxLjE3OTQ2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI2MDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTQ6NTk6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXFxuaW5kZXggNDAwNDBhZjU4OGZiMi4uOTM3MDQwMTQ2M2I2YSAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmNcXG4rKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcXG5AQCAtODUyLDggKzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiBcXHRcXHRuZXd4cHQgPSB4cHJ0LVxcdTAwM2V4cHRfb3BzLVxcdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xcbiBcXHRcXHRpZiAobmV3eHB0KSB7XFxuIFxcdFxcdFxcdG5ld3hwdC1cXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVxcdTAwM2V4cHRfY3JlZCk7XFxuK1xcdFxcdFxcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xcbiBcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG4gXFx0XFx0XFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cXHUwMDNlc3ZfbmFtZSk7XFxuK1xcdFxcdFxcdHN2Y194cHJ0X3B1dChuZXd4cHQpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRtb2R1bGVfcHV0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OToyMi41Mjc0MDM3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyNDEzMzQzNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E3Y2Q4OTk4ODFiNWJiMjYzYzE1YjIyNjRhMjVhMDI4NWVhZTY3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE0OjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5pbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcbkBAIC04NTIsOCArODUyLDEwIEBAIHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4gXHRcdG5ld3hwdCA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xuIFx0XHRpZiAobmV3eHB0KSB7XG4gXHRcdFx0bmV3eHB0LVx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cdTAwM2V4cHRfY3JlZCk7XG4rXHRcdFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XG4gXHRcdFx0c3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG4gXHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbitcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIyLjUyNzQwNTM4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTQzMDM5ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgQU1ENjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBJIHNlZSBpdCdzIGEgZGlmZiwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llci4gSXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gYXBwbGllZCBieSBhIHN5ei1jbHVzdGVyIGJvdCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGEgYnVnIGZpeCBvciBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJdCdzIHJlbGF0ZWQgdG8gdGhlIGBzdmNfaGFuZGxlX3hwcnRgIGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBuZXcgYHN2Y194cHJ0X2dldGAgY2FsbCBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgYW5kIGEgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAuIFRoaXMgaXMgZ29vZCwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3NzaWJsZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIFNwZWNpZmljYWxseSwgaXQncyBvcGVyYXRpbmcgb24gYG5ld3hwdGAuXG5cbkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpY2F0aW9ucyBvZiBgc3ZjX3hwcnRfZ2V0YCBvciBgc3ZjX3hwcnRfcHV0YC4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93IGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgaG93IGBzdmNfeHBydGAgb2JqZWN0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBvdGhlciB1c2VzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSwgcmVsYXRlZCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTQ6NTk6NDYuNjcwNDQ4MTI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHR9XFxuIDgzMTpcXHRcXG4gODMyOlxcdHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuIDgzMzpcXHR7XFxuIDgzNDpcXHRcXHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBycXN0cC1cXHUwMDNlcnFfc2VydmVyO1xcbiA4MzU6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDgzODpcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFhQVF9LSUxMX1RFTVAsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKVxcbiA4Mzk6XFx0XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2tpbGxfdGVtcF94cHJ0KHhwcnQpO1xcbiA4NDA6XFx0XFx0XFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xcbiA4NDE6XFx0XFx0XFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXFxuIDg0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDg0NTpcXHRcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdDtcXG4gODQ2OlxcdFxcdFxcdC8qXFxuIDg0NzpcXHRcXHRcXHQgKiBXZSBrbm93IHRoaXMgbW9kdWxlX2dldCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSB0aGVcXG4gODQ4OlxcdFxcdFxcdCAqIGxpc3RlbmVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvb1xcbiA4NDk6XFx0XFx0XFx0ICovXFxuIDg1MDpcXHRcXHRcXHRfX21vZHVsZV9nZXQoeHBydC1cXHUwMDNleHB0X2NsYXNzLVxcdTAwM2V4Y2xfb3duZXIpO1xcbiA4NTE6XFx0XFx0XFx0c3ZjX2NoZWNrX2Nvbm5fbGltaXRzKHhwcnQtXFx1MDAzZXhwdF9zZXJ2ZXIpO1xcbiA4NTI6XFx0XFx0XFx0bmV3eHB0ID0geHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcXG4gODUzOlxcdFxcdFxcdGlmIChuZXd4cHQpIHtcXG4gODU0OlxcdFxcdFxcdFxcdG5ld3hwdC1cXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVxcdTAwM2V4cHRfY3JlZCk7XFxuIDg1NTpcXHRcXHRcXHRcXHRzdmNfeHBydF9nZXQobmV3eHB0KTtcXG4gODU2OlxcdFxcdFxcdFxcdHN2Y19hZGRfbmV3X3RlbXBfeHBydChzZXJ2LCBuZXd4cHQpO1xcbiA4NTc6XFx0XFx0XFx0XFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cXHUwMDNlc3ZfbmFtZSk7XFxuIDg1ODpcXHRcXHRcXHRcXHRzdmNfeHBydF9wdXQobmV3eHB0KTtcXG4gODU5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg2MDpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gODYxOlxcdFxcdFxcdH1cXG4gODYyOlxcdFxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKHhwcnQpO1xcbiA4NjM6XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChYUFRfSEFORFNIQUtFLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X2ZsYWdzKSkge1xcbiA4NjQ6XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2hhbmRzaGFrZSh4cHJ0KTtcXG4gODY1OlxcdFxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKHhwcnQpO1xcbiA4NjY6XFx0XFx0fSBlbHNlIGlmIChzdmNfeHBydF9yZXNlcnZlX3Nsb3QocnFzdHAsIHhwcnQpKSB7XFxuIDg2NzpcXHRcXHRcXHQvKiBYUFRfREFUQXxYUFRfREVGRVJSRUQgY2FzZTogKi9cXG4gODY4OlxcdFxcdFxcdHJxc3RwLVxcdTAwM2VycV9kZWZlcnJlZCA9IHN2Y19kZWZlcnJlZF9kZXF1ZXVlKHhwcnQpO1xcbiA4Njk6XFx0XFx0XFx0aWYgKHJxc3RwLVxcdTAwM2VycV9kZWZlcnJlZClcXG4gODcwOlxcdFxcdFxcdFxcdGxlbiA9IHN2Y19kZWZlcnJlZF9yZWN2KHJxc3RwKTtcXG4gODcxOlxcdFxcdFxcdGVsc2VcXG4gODcyOlxcdFxcdFxcdFxcdGxlbiA9IHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19yZWN2ZnJvbShycXN0cCk7XFxuIDg3MzpcXHRcXHRcXHRycXN0cC1cXHUwMDNlcnFfcmVzZXJ2ZWQgPSBzZXJ2LVxcdTAwM2Vzdl9tYXhfbWVzZztcXG4gODc0OlxcdFxcdFxcdGF0b21pY19hZGQocnFzdHAtXFx1MDAzZXJxX3Jlc2VydmVkLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X3Jlc2VydmVkKTtcXG4gODc1OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gMClcXG4gODc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRcXHR0cmFjZV9zdmNfeGRyX3JlY3Zmcm9tKFxcdTAwMjZycXN0cC1cXHUwMDNlcnFfYXJnKTtcXG4gODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo0Ni42NzA1NDcyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODAxMzMwNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFB1cnBvc2Ugb2YgVGhpcyBQYXRjaCBhbmQgdGhlIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgbW9kaWZpY2F0aW9ucyBpdCBicmluZ3MgdG8gdGhlIGV4aXN0aW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBmdW5jdGlvbi4gVGltZSB0byByZWFkIHRocm91Z2ggaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1My40NzE4ODAyMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTc4MTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkX25ld190ZW1wX3hwcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTUtXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE3LXtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz04MzI9c3RhdGljIHZvaWQgc3ZjX2hhbmRsZV94cHJ0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04NTUtXFx0XFx0XFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjg1NjpcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODU3LVxcdFxcdFxcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXFx1MDAzZXN2X25hbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1NC45MzE2NjY5NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjMxNDM1ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIFJQQyBUcmFuc3BvcnQgTGlmZWN5Y2xlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIGxpbmVzIDgxMC04MzUgb2YgYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgbGlmZWN5Y2xlIG9mIGFuIFJQQyB0cmFuc3BvcnQuIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgd2UncmUgZ29pbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zLCByZWdpc3RyYXRpb24sIGRlLXJlZ2lzdHJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0cmFuc3BvcnQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgY29kZSBibG9jayBpcyBwcm9iYWJseSBpbnRyaWNhdGVseSBsaW5rZWQgdG8gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gZGV0YWlsLiBXaGF0IEknbSBsb29raW5nIGZvciBpcyB0aGUgZmxvdyBvZiBldmVudHMsIGhvdyB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB1c2VkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHJlcXVlc3RzIGFuZCByZXBsaWVzIGFyZSBxdWV1ZWQuIEknbSBrZWVuIHRvIHNlZSB3aGV0aGVyIHRoaXMgc2VjdGlvbiBjb3ZlcnMgdGhlIFJQQyBsYXllcidzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yaywgYW5kIEknbSBwcmVwYXJlZCBmb3IgdGhpcyB0byBpbnZvbHZlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNvY2tldCBtYW5hZ2VtZW50LiBJIGV4cGVjdCBhIGxvdCBvZiBgc3Bpbl9sb2NrYCBhbmQgYG11dGV4YCB1c2FnZSwgZ2l2ZW4gaXQncyB0aGUgUlBDIGNvcmUuIEFuZCBJIGJldCB0aGVyZSBhcmUgc29tZSBzdWJ0bGV0aWVzIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBoZXJlIHRvby4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1Ny4xNjMxMzI0NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gODExOlxcdFxcdH1cXG4gODEyOlxcdFxcdHRyeV90b19mcmVlemUoKTtcXG4gODEzOlxcdFxcdHJldHVybiBkaWRfdGltZW91dDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0c3RhdGljIHZvaWQgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y194cHJ0ICpuZXd4cHQpXFxuIDgxNzpcXHR7XFxuIDgxODpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNlcnYtXFx1MDAzZXN2X2xvY2spO1xcbiA4MTk6XFx0XFx0c2V0X2JpdChYUFRfVEVNUCwgXFx1MDAyNm5ld3hwdC1cXHUwMDNleHB0X2ZsYWdzKTtcXG4gODIwOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXd4cHQtXFx1MDAzZXhwdF9saXN0LCBcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfdGVtcHNvY2tzKTtcXG4gODIxOlxcdFxcdHNlcnYtXFx1MDAzZXN2X3RtcGNudCsrO1xcbiA4MjI6XFx0XFx0aWYgKHNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XFxuIDgyMzpcXHRcXHRcXHQvKiBzZXR1cCB0aW1lciB0byBhZ2UgdGVtcCB0cmFuc3BvcnRzICovXFxuIDgyNDpcXHRcXHRcXHRzZXJ2LVxcdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XFxuIDgyNTpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lcixcXG4gODI2OlxcdFxcdFxcdFxcdCAgamlmZmllcyArIHN2Y19jb25uX2FnZV9wZXJpb2QgKiBIWik7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfbG9jayk7XFxuIDgyOTpcXHRcXHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xcbiA4MzA6XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiA4MzM6XFx0e1xcbiA4MzQ6XFx0XFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gcnFzdHAtXFx1MDAzZXJxX3NlcnZlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTQ6NTk6NTcuMTYzMjQwMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzNzE1MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBTVU5SUEMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIGZ1bmN0aW9uLCBhbmQgaXQncyBpbW1lZGlhdGVseSByYWlzaW5nIHNvbWUgZmxhZ3MuIEkgc2VlIHRoYXQgaXQncyBtYW5pcHVsYXRpbmcgdGhlIGBuZXd4cHRgIHRyYW5zcG9ydCBzdHJ1Y3R1cmUsIG1hcmtpbmcgaXQgYXMgdGVtcG9yYXJ5LCBhZGRpbmcgaXQgdG8gYSBsaXN0LCBhbmQgdGhlbiBjcnVjaWFsbHksIGNhbGxpbmcgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgcHJvYmxlbSBpcywgYHN2Y194cHJ0X3JlY2VpdmVkYCBjb3VsZCBwb3RlbnRpYWxseSByZWxlYXNlIGBuZXd4cHRgIHZlcnkgcXVpY2tseSwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgdGhyZWFkIGltbWVkaWF0ZWx5LlxuXG5UaGVuIEkgc2VlIHRoYXQgYHN2Y19oYW5kbGVfeHBydGAgY2FsbHMgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAsIGJ1dCAqYmVmb3JlKiB0aGF0IGl0IGRvZXM6XG5cbmBgYGNcbnN2Y194cHJ0X2dldChuZXd4cHQpO1xuc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG50cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuc3ZjX3hwcnRfcHV0KG5ld3hwdCk7XG5gYGBcblxuVGhlIHJlYXNvbiBmb3IgdGhlIGBnZXRgIGFuZCBgcHV0YCBpcyBjbGVhcjogYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgaXMgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGBuZXd4cHRgLCBhbmQgd2l0aG91dCB0aGF0IHJlZmVyZW5jZSwgdGhlcmUncyBhIGRlZmluaXRlIHVzZS1hZnRlci1mcmVlIHJpc2sgaWYgYHN2Y194cHJ0X3JlY2VpdmVkYCBoYXMgZHJvcHBlZCBpdC4gU28sIHRoYXQgYHN2Y194cHJ0X2dldGAgYmVmb3JlIGNhbGxpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24sIGFuZCB0aGUgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgaXMgYSB2ZXJ5IGltcG9ydGFudCBhbmQgZGVsaWJlcmF0ZSBtZWFzdXJlIHRvIG1ha2Ugc3VyZSBgbmV3eHB0YCBpcyBzdGlsbCBhbGl2ZSBhbmQgaGFzIGEgdmFsaWQgcmVmZXJlbmNlIGZvciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB0byB1c2UuIFdpdGhvdXQgaXQsIHdlJ3JlIHN0YXJpbmcgYXQgYSByZWFsIGJ1Zy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBUaGlzIGlzIFNVTlJQQyBzZXJ2ZXIgY29kZSBpbiBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCwgc28gaXQncyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLiBUaGlzIGlzIHVzZWQgYnkgbmZzZCwgc28gYW55IHJlbW90ZSBORlMgc2VydmVyIGlzIGV4cG9zZWQuIFdlIGFsc28ga25vdyB0aGF0IG90aGVyIGluLWtlcm5lbCBSUEMgc2VydmljZXMgdXNlIGl0LCBzbyB0aGVyZSdzIGEgYnJvYWQgYXR0YWNrIHN1cmZhY2UgaGVyZS5cblxuTmV4dCBxdWVzdGlvbjogY2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIE5GUyBzZXJ2ZXIgaXMgY29uZmlndXJlZCBvciB1c2VkIGluIHN5emthbGxlciB0byBlbnN1cmUgaXQgY2FuIHJlYWNoIHRoaXMgY29kZSBwYXRoLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBzdW5ycGNgIGFuZCBgc3ZjX3hwcnQuY2AgdG8gY29uZmlybSB0aGV5IGFyZSBlbmFibGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gdGhlIGZ1enppbmcgaGFybmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjAyLjAwMDM5NDg2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMTM4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3hwcnRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9NYWtlZmlsZT0xMT1zdW5ycGMteSA6PSBjbG50Lm8geHBydC5vIHNvY2tsaWIubyB4cHJ0c29jay5vIHNjaGVkLm8gXFxcXFxcbi0tXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNS1cXHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxNjpcXHQgICAgc3ZjX3hwcnQubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNy1cXHQgICAgeHBydG11bHRpcGF0aC5vIG5ldGxpbmsub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDowMi4wNTU0MTU3NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc2MDM0NjU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSUEMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBSUEMgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgdXN1YWxseSBmaW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgU3VuIFJQQyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgYXQgcGxheS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgZGVmaW5lZCBoZXJlLCBhbmQgdGhlbiBvdGhlciBwYXJ0cyBvZiB0aGUgUlBDIHN0YWNrIHByb2JhYmx5IHJlZmVyZW5jaW5nIGl0LiBLbm93aW5nIHdoYXQncyBjb25maWd1cmVkIGhlcmUgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgaXNzdWVzIEkgbWlnaHQgYmUgc2VlaW5nIHdpdGggUlBDLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MDMuODE1NzY0MDk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNVTlJQQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBTVU5SUENfR1NTXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUENcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFNVTlJQQ19TV0FQXFxuICAxNjpcXHRcXHRib29sXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUlBDU0VDX0dTU19LUkI1XFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBDUllQVE9cXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG4gIDI0OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBLZXJiZXJvcyB2ZXJzaW9uIDVcXG4gIDI3OlxcdFxcdCAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBTZWN1cmUgUlBDIGNhbGxzIHdpdGggS2VyYmVyb3MgcmVxdWlyZSBhbiBhdXhpbGlhcnkgdXNlci1zcGFjZVxcbiAgMzA6XFx0XFx0ICBkYWVtb24gd2hpY2ggbWF5IGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHMgcGFja2FnZVxcbiAgMzE6XFx0XFx0ICBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBJbiBhZGRpdGlvbiwgdXNlci1zcGFjZVxcbiAgMzI6XFx0XFx0ICBLZXJiZXJvcyBzdXBwb3J0IHNob3VsZCBiZSBpbnN0YWxsZWQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFNVTlJQQ19ERUJVR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG4gIDM5OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgc3lzY3RsLWJhc2VkIGRlYnVnZ2luZyBpbnRlcmZhY2VcXG4gIDQyOlxcdFxcdCAgdGhhdCBpcyBiZSB1c2VkIGJ5IHRoZSAncnBjZGVidWcnIHV0aWxpdHkgdG8gdHVybiBvbiBvciBvZmZcXG4gIDQzOlxcdFxcdCAgbG9nZ2luZyBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsIFJQQyBhY3Rpdml0eS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBtYWtlIHlvdXIga2VybmVsIHNsaWdodGx5IHNtYWxsZXIsXFxuICA0NjpcXHRcXHQgIGJ1dCBtYWtlcyB0cm91Ymxlc2hvb3RpbmcgTkZTIGlzc3VlcyBzaWduaWZpY2FudGx5IGhhcmRlci5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjAzLjgxNTg2MDQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4NzE5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbm5lY3Rpb25zIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBTVU5SUENgLiBUaGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgd2hpY2gga2VybmVsIGNvbXBvbmVudHMgYXJlIGFjdHVhbGx5ICpzZWxlY3RpbmcqIGBTVU5SUENgPyBJcyBpdCBORlNEPyBORlNfRlM/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aG8ncyBhY3R1YWxseSB1dGlsaXppbmcgdGhlIGtleSBSUEMgc2VydmljZSBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgZnVuY3Rpb25zLiBGdW5jdGlvbnMgbGlrZSBgc3ZjX2NyZWF0ZWAsIGBzdmNfaGFuZGxlX3hwcnRgLCBvciBtYXliZSBldmVuIGRpcmVjdGx5IGluIGBuZnNkYCBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcy5cblxuVG8gcXVpY2tseSBpc29sYXRlIHRoZSByZWxldmFudCBjb21wb25lbnRzLCBJ4oCZbGwgdGhlbiBjaGVjayB0aGUgTkZTRCBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZS4gSXQgc2hvdWxkIGxpc3QgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIHVzZWQgdG8gY29tcGlsZSBORlNELiBUaGlzIHNob3VsZCBnaXZlIGEgZ29vZCB2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIHRvIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDowNS42NjQ1ODIzNzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MDUuNzE3NzQwNjU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNTYyMTc4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyB3aG9sZSBuZXR3b3JrIGZpbGUgc3lzdGVtIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTkZTRGAsIHNwZWNpZmljYWxseSwgaXMgdXNpbmcgYFNVTlJQQ2AuIE9rYXksIHRoYXQncyBub3Qgc3VycHJpc2luZy4gQW5kIGBsb2NrZGAsIHRoYXQncyB0aGUgbG9jayBkYWVtb24sIGl0J3MgYWxzbyBrZXllZCBpbnRvIGBTVU5SUENgLiBUaGF0IG1ha2VzIHNlbnNlOyBsb2NraW5nIG5lZWRzIHRvIGJlIHJvYnVzdCwgYW5kIFJQQyBvZmZlcnMgdGhhdCBmb3VuZGF0aW9uYWwgcmVtb3RlIGNvbW11bmljYXRpb24gbGF5ZXIuXG5cbk5vdywgdGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGZsb3cuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdobydzIGNhbGxpbmcgYHN2Y19oYW5kbGVfeHBydGAuIFRoYXQgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyB0aGUgdHJhbnNwb3J0IGxheWVyOyBpdCdzIHRoZSBnYXRld2F5IGZvciBpbmNvbWluZyByZXF1ZXN0cy4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbm5lY3RlZCBhbmQgdGhlIGRhdGEgdHJhbnNmZXIgZmxvdyB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgaXMga2V5IHRvIGRpYWdub3NpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXTigJlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoxOS4yNzk5MjEwMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTc2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19oYW5kbGVfeHBydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmM9ODE2PXN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgzMS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODMyOnN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgzMy17XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9OTIxPWludCBzdmNfcmVjdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTk2OS1cXHRcXHR0cmFjZV9zdmNfeHBydF9kZXF1ZXVlKHJxc3RwKTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6OTcwOlxcdFxcdHN2Y19oYW5kbGVfeHBydChycXN0cCwgeHBydCk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTk3MS1cXHR9XFxuLS1cXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jPTQzOD1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfcmRtYV9hY2NlcHQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYy02MjUtXFx0ICpcXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jOjYyNjpcXHQgKiBzdmNfaGFuZGxlX3hwcnQoKSBkcm9wcyBpdHMgcHJlLWFjcXVpcmVkIG1vZHVsZSByZWZlcmVuY2Ugd2hlblxcbm5ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMtNjI3LVxcdCAqIC1cXHUwMDNleHBvX2FjY2VwdCgpIHJldHVybnMgTlVMTC4gVGFrZSBhIHJlcGxhY2VtZW50IHJlZmVyZW5jZSBiZWZvcmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MTkuMzQ3NTAwNDkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMTE4MDI4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyBpbiB0aGUgUlBDIFN5c3RlbSoqXG5cbk9rYXksIHNvIGBzdmNfaGFuZGxlX3hwcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggYSByZWNlaXZlZCBSUEMgcmVxdWVzdC4gTWFrZXMgc2Vuc2UuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCB0aGUgcmVxdWVzdCB0YWtlcyB0byAqZ2V0KiB0byBgc3ZjX2hhbmRsZV94cHJ0YC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBgc3ZjX3JlY3ZgIGNhbGxzIGl0LiBSaWdodCwgc28gSSBrbm93IHRoZSBpbW1lZGlhdGUgY2FsbGVyLCBidXQgSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBmdXJ0aGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZCwgYW5kIGF0IHdoYXQgcG9pbnQgdGhlIHN5c3RlbSByZWFsaXplcyBhbiBpbmNvbWluZyBtZXNzYWdlICppcyogYWN0dWFsbHkgc29tZXRoaW5nIHRvIGJlIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGludG8gd2hlcmUgYHN2Y19yZWN2YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MjEuMzU5MzA1NjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc3MzMxNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19yZWN2XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg9MTI0Mz11bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLFxcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMTI3OC1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMjc5Oi8qIHN2Y19yZWN2KClcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMjgwLSAqIFRSQVA6XFx0SFZfRkFTVF9UUkFQXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaD0xMzIyPXVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX3NlbmQodW5zaWduZWQgbG9uZyBzdmNfaWQsXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg6MTMyNjp1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19yZWN2KHVuc2lnbmVkIGxvbmcgc3ZjX2lkLFxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEzMjctXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcixcXG4tLVxcbmZzL2xvY2tkL3N2Yy5jPTEyND1sb2NrZCh2b2lkICp2cnFzdHApXFxuLS1cXG5mcy9sb2NrZC9zdmMuYy0xMzEtXFxuZnMvbG9ja2Qvc3ZjLmM6MTMyOlxcdC8qIHRyeV90b19mcmVlemUoKSBpcyBjYWxsZWQgZnJvbSBzdmNfcmVjdigpICovXFxuZnMvbG9ja2Qvc3ZjLmMtMTMzLVxcdHNldF9mcmVlemFibGUoKTtcXG4tLVxcbmZzL2xvY2tkL3N2Yy5jLTE0Mi1cXHRcXHRubG1zdmNfcmV0cnlfYmxvY2tlZChycXN0cCk7XFxuZnMvbG9ja2Qvc3ZjLmM6MTQzOlxcdFxcdHN2Y19yZWN2KHJxc3RwLCAwKTtcXG5mcy9sb2NrZC9zdmMuYy0xNDQtXFx0fVxcbi0tXFxuZnMvbmZzL2NhbGxiYWNrLmM9NzU9bmZzNF9jYWxsYmFja19zdmModm9pZCAqdnJxc3RwKVxcbi0tXFxuZnMvbmZzL2NhbGxiYWNrLmMtODMtXFx0d2hpbGUgKCFzdmNfdGhyZWFkX3Nob3VsZF9zdG9wKHJxc3RwKSlcXG5mcy9uZnMvY2FsbGJhY2suYzo4NDpcXHRcXHRzdmNfcmVjdihycXN0cCwgMCk7XFxuZnMvbmZzL2NhbGxiYWNrLmMtODUtXFxuLS1cXG5mcy9uZnNkL25mc3N2Yy5jPTg4OT1uZnNkKHZvaWQgKnZycXN0cClcXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmMtOTE4LVxcdHdoaWxlICghc3ZjX3RocmVhZF9zaG91bGRfc3RvcChycXN0cCkpIHtcXG5mcy9uZnNkL25mc3N2Yy5jOjkxOTpcXHRcXHRzd2l0Y2ggKHN2Y19yZWN2KHJxc3RwLCA1ICogSFopKSB7XFxuZnMvbmZzZC9uZnNzdmMuYy05MjAtXFx0XFx0Y2FzZSAtRVRJTUVET1VUOlxcbi0tXFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oPTU2PXN0YXRpYyBpbmxpbmUgdTMyIHN2Y19zb2NrX2ZpbmFsX3JlYyhzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjMtICovXFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY0OmludFxcdFxcdHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02NS12b2lkXFx0XFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9ODk3PXN0YXRpYyB2b2lkIHN2Y190aHJlYWRfd2FrZV9uZXh0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtOTIwLSAqL1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo5MjE6aW50IHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTkyMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjIzLjUzNjY0MzA4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTc0MzY3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19yZWN2YCBGdW5jdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgc3ZjX3JlY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCBhbmQgYmVoYXZpb3IuIEl0IGxvb2tzIGxpa2UgYHN2Y19yZWN2YCBpcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCdzIGNhbGxlZCBieSBhIGZldyBjcnVjaWFsIGNvbXBvbmVudHM6IGBsb2NrZGAgKHNwZWNpZmljYWxseSBpbiBgZnMvbG9ja2Qvc3ZjLmNgKSwgYG5mczRfY2FsbGJhY2tfc3ZjYCAobG9jYXRlZCBpbiBgZnMvbmZzL2NhbGxiYWNrLmNgKSwgYW5kIHRoZSBwcmltYXJ5IE5GUyBkYWVtb24sIGBuZnNkYCAoZm91bmQgd2l0aGluIGBmcy9uZnNkL25mc3N2Yy5jYCkuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyBsaWtlbHkgcm9sZSBpbiBoYW5kbGluZyBpbmNvbWluZyBSUEMgcmVxdWVzdHMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgbGlzdGVuZXIgdHJhbnNwb3J0cy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGEgdHJhbnNwb3J0IGlzIGluaXRpYWxpemVkIGFuZCBhY3RpdmVseSBsaXN0ZW5pbmcgd2hlbiBlaXRoZXIgdGhlIE5GUyBzZXJ2ZXIsIGxvY2tkIHNlcnZpY2UsIG9yIGEgY2FsbGJhY2sgbWVjaGFuaXNtIGJpbmRzIHRvIGEgcG9ydCDigJMgc3VjaCBhcyBUQ1AgcG9ydCAyMDQ5IGZvciB0aGUgbWFpbiBORlMgZGFlbW9uIOKAkyBhbmQgYSBjbGllbnQgZXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgbGlrZWx5IGB4cG9fYWNjZXB0YCwgd2hpY2ggaXMgY2FsbGVkIHRvIGFjY2VwdCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbiwgb3IgYXQgbGVhc3QgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gSSBzaG91bGQgY2hlY2sgdGhhdC5cblxuQWgsIHllcywgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjYWxsOiBgbmV3eHB0ID0geHBydC1cdTAwM2V4cHRfb3BzLVx1MDAzZXhwb19hY2NlcHQoeHBydCk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgdHJhbnNwb3J0IGdldHMgaXRzIGxlZ3MsIHNvIHRvIHNwZWFrLiBJZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24sIHRoYXQgYHhwb19hY2NlcHRgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgYHN2Y190Y3BfYWNjZXB0YCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgaW1wbGVtZW50YXRpb24gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIGhlYWQgb3ZlciB0byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoyOC4xMTEwMTMwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjMxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y190Y3BfYWNjZXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MjYtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTI3OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05Mjgte1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTMzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN2Y194cHJ0X29wcyBzdmNfdGNwX29wcyA9IHtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzNDQtXFx0Lnhwb19oYXNfd3NwYWNlID0gc3ZjX3RjcF9oYXNfd3NwYWNlLFxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEzNDU6XFx0Lnhwb19hY2NlcHQgPSBzdmNfdGNwX2FjY2VwdCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ2LVxcdC54cG9fa2lsbF90ZW1wX3hwcnQgPSBzdmNfdGNwX2tpbGxfdGVtcF94cHJ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoyOC4xNTk2NTIwNTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY0MjAyMTMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBBbmFseXNpczogTkZTIFNlcnZlciBDb25uZWN0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIE5GUyBzZXJ2ZXIgKG5mc2QpIHdoZW4gYSBjbGllbnQgY29ubmVjdHMuIFRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGhhbmRsaW5nIG9mIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCBkZXNjcmlwdG9ycyAoYG5ld3hwdGApIHdpdGhpbiBgc3ZjX2hhbmRsZV94cHJ0YC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgd29ya2VyIHRocmVhZCBjb3VsZCBwcmVtYXR1cmVseSBmcmVlIHRoZSBgbmV3eHB0YCBiZWZvcmUgY2VydGFpbiBvcGVyYXRpb25zIChsaWtlIHRyYWNpbmcpIHdlcmUgY29tcGxldGVkIGluIHRoZSBhY2NlcHRpbmcgdGhyZWFkLiBUaGUgZml4IGludm9sdmVzIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHVzaW5nIGBzdmNfeHBydF9nZXRgIGFuZCBkZWNyZW1lbnRpbmcgaXQgd2l0aCBgc3ZjX3hwcnRfcHV0YCB0byBlbnN1cmUgdGhlIGRlc2NyaXB0b3IncyBsaWZldGltZSBtYXRjaGVzIHRoZSByZXF1aXJlZCBvcGVyYXRpb25zLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIHBhdGNoZXMgYXJlIGNsZWFyLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU1VOUlBDL05GUyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgZnV6emVzIG5mc2QuIFRoaXMgaXMgdmVyeSByZWxldmFudCEgV2UgY2FuIGNvbmZpcm0gdGhhdCBhIHVzZXItc3BhY2UgbmZzIHNlcnZlciBjYW4gYmUgc3RhcnRlZCwgYW5kIGNvbm5lY3Rpb25zIGNhbiBiZSBlc3RhYmxpc2hlZCBvdmVyIGxvb3BiYWNrLCB3aGljaCBjb3ZlcnMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCByZWFjaGFibGUgY29kZS5cblxuVG8gY29uZmlybSByZWFjaGFiaWxpdHksIHdlIG11c3QgY2hlY2sgdGhlIGludm9sdmVkIHN5bWJvbHMuXG5XZSBrbm93IHRoYXQgYHN2Y19oYW5kbGVfeHBydGAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQncyBzdGF0aWMuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzdmNfcmVjdmAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFdlIGFsc28gaGF2ZSBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCB3aGljaCBpcyBzdGF0aWMsIGFuZCBgc3ZjX3hwcnRfZ2V0YCAvIGBzdmNfeHBydF9wdXRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBmb3IgZnV6emluZy5cblRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggc3RhdGljLCBpcyB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgaXQuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgYWRkZWQgbG9naWMgaXRzZWxmIHNob3VsZCBiZSBpbmNsdWRlZC5cblxuV2UgY2FuIGluY2x1ZGUgYm90aCBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgYHN2Y19yZWN2YC4gU2luY2UgYHN2Y19oYW5kbGVfeHBydGAgaXNuJ3QgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiBhIGhlYWRlciwgd2UgY2FuIHRhcmdldCBpdCBzcGVjaWZpY2FsbHkuXG5cbkZpbmFsbHksIHdlIGhhdmUgdG8gbG9vayBhdCBkZXBlbmRlbmNpZXMuIFRoZSBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19TVU5SUENgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX1NVTlJQQ2AgaXMgc2VsZWN0ZWQgYnkgYE5GU0RgLCB3aGljaCBkZXBlbmRzIG9uIGBNVUxUSVVTRVJgLiBTbywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aG9zZSBjb25maWdzIGFyZSBlbmFibGVkIHdpdGhpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC5cblxuSW4gc3VtbWFyeTogdGhlIHBhdGNoIGlzIHJlYWNoYWJsZTsgdGhlcmVmb3JlLCBpdCdzIHdvcnRoIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo0NC41Nzk4Njc3NjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxcbmZzL25mc2QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMzktXFxuZnMvbmZzZC9LY29uZmlnOjQwOmNvbmZpZyBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTAtXFxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTU0LVxcbmZzL25mc2QvS2NvbmZpZzo1NTpjb25maWcgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWctNTYtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy03Ni1cXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTkzLVxcbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXFxuZnMvbmZzZC9LY29uZmlnLTk1LVxcdGJvb2xcXG5mcy9uZnNkL0tjb25maWctOTYtXFxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMDktXFxuZnMvbmZzZC9LY29uZmlnOjExMDpjb25maWcgTkZTRF9TQ1NJTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTExMS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMjMtXFxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNDAtXFxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTUwLVxcbmZzL25mc2QvS2NvbmZpZzoxNTE6Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlByb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE2My1cXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcXG5mcy9uZnNkL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNzktXFxuZnMvbmZzZC9LY29uZmlnOjE4MDpjb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9LY29uZmlnLTE4MS1cXHRib29sIFxcXCJTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ0LjYyNjg2MDYyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTg5NTU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5GU2QgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHRvcCBvZiB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GUyBzZXJ2ZXIga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgYmVkcm9jazsgaXQncyBnb2luZyB0byBkZWZpbmUgaG93IHRoZSB3aG9sZSB0aGluZyBpcyBidWlsdCBhbmQgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIE5GU3Y0IGlzIHRoZSBkZWZhdWx0LCBpZiBsZWdhY3kgdmVyc2lvbnMgYXJlIGFsc28gaW5jbHVkZWQsIHdoYXQgc2VjdXJpdHkgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgb2YgY291cnNlLCB3aGVyZSBpdCBob29rcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgc2Vuc2libGUgZGVmYXVsdHMsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSBhbmQgcm9idXN0bHkgSSBjYW4gdGFpbG9yIHRoZSBORlMgc2VydmVyIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3Mg4oCTIGZyb20gZW1iZWRkZWQgc3lzdGVtcyB0byBoaWdoLXBlcmZvcm1hbmNlIHNlcnZlcnMuIEFueSB1bmV4cGVjdGVkIG9wdGlvbnMgb3IgY29uZnVzaW5nIGxvZ2ljIHdpbGwgaW1tZWRpYXRlbHkgcmFpc2UgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgbWFpbnRhaW5hYmlsaXR5IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgcmV2ZWFscyBhYm91dCB0aGUgTkZTIHNlcnZlcidzIGRlc2lnbiBwaGlsb3NvcGh5IGFuZCBjb25maWd1cmFiaWxpdHkuIExldCdzIHNlZSBpZiBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZWFzeSB0byBncm9rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ4LjgxNjQyMTM2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORlNEXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTYgaWYgTkZTRF9WNFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuICAxMTpcXHRcXHRzZWxlY3QgTE9DS0RcXG4gIDEyOlxcdFxcdHNlbGVjdCBTVU5SUENcXG4gIDEzOlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IE5GU19DT01NT05cXG4gIDE1OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WMl9BQ0xcXG4gIDE2OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIENob29zZSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgb3RoZXIgY29tcHV0ZXJzIHRvIGFjY2Vzc1xcbiAgMjA6XFx0XFx0ICBmaWxlcyByZXNpZGluZyBvbiB0aGlzIHN5c3RlbSB1c2luZyBTdW4ncyBOZXR3b3JrIEZpbGUgU3lzdGVtXFxuICAyMTpcXHRcXHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxcbiAgMjI6XFx0XFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXFxuICAyNTpcXHRcXHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRvIGV4cG9ydCBsb2NhbCBmaWxlIHN5c3RlbXMgdXNpbmcgTkZTLCB5b3UgYWxzbyBuZWVkIHRvIGluc3RhbGxcXG4gIDI4OlxcdFxcdCAgdXNlciBzcGFjZSBwcm9ncmFtcyB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlsc1xcbiAgMjk6XFx0XFx0ICBwYWNrYWdlLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBNb3JlIGRldGFpbCBhYm91dFxcbiAgMzA6XFx0XFx0ICB0aGUgTGludXggTkZTIHNlcnZlciBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhIHRoZVxcbiAgMzE6XFx0XFx0ICBleHBvcnRzKDUpIG1hbiBwYWdlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXFxuICAzNDpcXHRcXHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ4LjgxNjQ5NTU4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDQ5MDQ1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCBgQ09ORklHX05GU0RgIGhhcyBhIGRlcGVuZGVuY3kgY2hhaW46IGBJTkVUYCwgYEZJTEVfTE9DS0lOR2AsIGBGU05PVElGWWAsIGFuZCBgTVVMVElVU0VSYCwgYW5kIGl0IGFsc28gc2VsZWN0cyBgU1VOUlBDYC4gQWx0ZXJuYXRpdmVseSwgYENPTkZJR19TVU5SUENgIGl0c2VsZiBpcyBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IGBORlNEYCwgYE5GU19GU2AsIGBMT0NLRGAsIGFuZCBvdGhlcnMuIFByb3ZpZGluZyBgU1VOUlBDYCBhbmQgYE5GU0RgIGFzIGBFbmFibGVDb25maWdzYCBpcyBhIGdvb2Qgc3RyYXRlZ2ljIG1vdmUsIGFzIGl0IGNvdmVycyBtdWx0aXBsZSBlbnRyeSBwb2ludHMuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHZlcmlmeSBob3cgZm9jdXNlZCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBhcmUuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIGBzdmNfaGFuZGxlX3hwcnRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlbGVjdGlvbiBvZiBzeW1ib2xzIGlzIHByZWNpc2UuIExldCdzIGRlbHZlIGludG8gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIFxuXG5SaWdodCwgYHN2Y19oYW5kbGVfeHBydGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBJdHMgZGlyZWN0IGNhbGxlciBpcyBgc3ZjX3JlY3ZgLCBhbmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaXMgcmlnaHQgdGhlcmUgYWxvbmdzaWRlIGl0LiBTbywgY29uc2lkZXJpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYHN2Y19oYW5kbGVfeHBydGAsIGBzdmNfcmVjdmAsIGFuZCBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBpbiB0aGUgYW5hbHlzaXMuIFRoZXNlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgaGlnaGx5IHNwZWNpZmljIGFuZCBub3QgdXNlZCB1YmlxdWl0b3VzbHkgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBjbGVhci4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGBzdmNfaGFuZGxlX3hwcnQoKWAgaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIHdoZXJlIGl0IG5vdyBhY3F1aXJlcyBhIHRlbXBvcmFyeSB0cmFuc3BvcnQgcmVmZXJlbmNlICh1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgKSBhcm91bmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlLiBXaXRob3V0IHRoaXMsIHRoZSBhY2NlcHRlZCB0cmFuc3BvcnQgY291bGQgYmUgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCBmcmVlZCBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgY29uY3VycmVudGx5IGFmdGVyIGJlaW5nIGFkZGVkLCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgZXhlY3V0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgaGl0IGJ5IFNVTlJQQyBzZXJ2ZXIgbGlzdGVuZXJzIGxpa2UgTkZTRCBhbmQgbG9ja2Qgd2hlbiBhY2NlcHRpbmcgaW5jb21pbmcgUlBDIG5ldHdvcmsgY29ubmVjdGlvbnMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGNvcnJ1cHRpb24gdW5kZXIgY29uY3VycmVudCBjb25uZWN0L2Rpc2Nvbm5lY3Qgc2NlbmFyaW9zLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRoZSBhcHByb2FjaCBpcyBzb3VuZCwgYW5kIHRoZSBzZWxlY3Rpb24gaXMgYXBwcm9wcmlhdGUuIEknbSBjb25maWRlbnQgaW4gdGhlIGxvZ2ljLCBhbmQgaXQgZnVsZmlsbHMgdGhlIHJlcXVpcmVtZW50cy4gTGV0J3Mgc2lnbmFsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDUyLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjU0Ljg2NTU0NDM1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTk4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfaGFuZGxlX3hwcnRcIixcbiAgICBcInN2Y19yZWN2XCIsXG4gICAgXCJzdmNfYWRkX25ld190ZW1wX3hwcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdmNfaGFuZGxlX3hwcnQoKSBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmMgYnkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0ICh2aWEgc3ZjX3hwcnRfZ2V0L3B1dCkgYWNyb3NzIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGFuZCB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlL1VBRiB3aGVyZSB0aGUgdHJhbnNwb3J0IG1pZ2h0IGJlIGNsb3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBydW5zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGNvcmUga2VybmVsIFJQQyBuZXR3b3JraW5nIGFuZCBpcyByZWFjaGFibGUgd2hlbiBpbmNvbWluZyBjb25uZWN0aW9ucyBhcmUgYWNjZXB0ZWQgb24gU1VOUlBDIGxpc3RlbmVyIHNvY2tldHMgKGUuZy4sIE5GU0QsIGxvY2tkKS4gSXQgaXMgd29ydGggZnV6emluZyB0byB0ZXN0IHRyYW5zcG9ydCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjU0Ljk0MDc1MjMxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4MzYwNTE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo1NC45NDEyMTk2NjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjgzNTU4MDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNDo1OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuY1xuaW5kZXggNDAwNDBhZjU4OGZiMi4uOTM3MDQwMTQ2M2I2YSAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5AQCAtODUyLDggKzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIFx0XHRuZXd4cHQgPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcbiBcdFx0aWYgKG5ld3hwdCkge1xuIFx0XHRcdG5ld3hwdC1cdTAwM2V4cHRfY3JlZCA9IGdldF9jcmVkKHhwcnQtXHUwMDNleHB0X2NyZWQpO1xuK1x0XHRcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xuIFx0XHRcdHN2Y19hZGRfbmV3X3RlbXBfeHBydChzZXJ2LCBuZXd4cHQpO1xuIFx0XHRcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXHUwMDNlc3ZfbmFtZSk7XG4rXHRcdFx0c3ZjX3hwcnRfcHV0KG5ld3hwdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bW9kdWxlX3B1dCh4cHJ0LVx1MDAzZXhwdF9jbGFzcy1cdTAwM2V4Y2xfb3duZXIpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo1NC45NDEyMjM2MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg4ODgzNjA0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUlBDIFRyYW5zcG9ydCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBmb2N1c2VzIGFyb3VuZCB0aGUgYHN2Y19oYW5kbGVfeHBydGAgZnVuY3Rpb24gYW5kIGl0cyBoYW5kbGluZyBvZiBhY2NlcHRlZCB0cmFuc3BvcnQgZW5kcG9pbnRzLiBUaGUgY2hhbmdlIGlzIGluc2VydGluZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgIGNhbGxzIGFyb3VuZCB0aGUgbmV3bHkgY3JlYXRlZCBgbmV3eHB0YC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHdlJ3JlIG1hbmFnaW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG5ldyB0cmFuc3BvcnQgZW5kcG9pbnQgbW9yZSBjYXJlZnVsbHkuXG5cbkJlZm9yZSB0aGlzIHBhdGNoLCB3ZSB3ZXJlIGp1c3QgZ2V0dGluZyB0aGUgY3JlZGVudGlhbCwgYWRkaW5nIGl0IGFzIGEgdGVtcG9yYXJ5IHRyYW5zcG9ydCwgYW5kIHRyYWNpbmcgdGhlIGFjY2VwdGFuY2UuIE5vdywgd2UncmUgZXhwbGljaXRseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIHJpZ2h0IGFmdGVyIGdldHRpbmcgdGhlIG5ldyB0cmFuc3BvcnQsIGFuZCBkZWNyZW1lbnRpbmcgaXQsIHdpdGggYHN2Y194cHJ0X3B1dCgpYCwgYWZ0ZXIgYWRkaW5nIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0LiBUaGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgY2FsbCBsb29rcyBsaWtlIGl0IGlzIGJldHdlZW4gdGhlIGBnZXRgIGFuZCB0aGUgYHB1dGAuIEkgd29uZGVyIGlmIHRoZXJlIHdhcyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZGVudGlmaWVkLCBsZWFkaW5nIHRvIHRoaXMgYWRkaXRpb24uXG5cbkkgYXNzdW1lIHRoZSBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoZSBgbmV3eHB0YCBpc24ndCBwcmVtYXR1cmVseSByZWxlYXNlZCBieSB0aGUgc3lzdGVtIHdoaWxlIGl0J3MgYmVpbmcgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgc2VydmVyJ3MgdGVtcG9yYXJ5IHRyYW5zcG9ydCBsaXN0LiBUaGUgYG1vZHVsZV9wdXRgIGNhbGwgaW4gdGhlIGBlbHNlYCBicmFuY2ggcmVtYWlucywgc28gaWYgdGhlIHRyYW5zcG9ydCBpc24ndCBhY2NlcHRlZCwgdGhlIG1vZHVsZSBpcyBzdGlsbCByZWxlYXNlZCwgYXMgaXQgc2hvdWxkIGJlLiBUaGUgYGdldF9jcmVkYCBsb29rcyBsaWtlIGl0IHN0aWxsIG1hbmFnZXMgdGhlIGNyZWRlbnRpYWxzLCBhbmQgdGhlIG5ldyB0cmFuc3BvcnQgZG9lcyBnZXQgaXRzIGNyZWRlbnRpYWxzLiBUaGlzIGlzIHN0YW5kYXJkLCBidXQgdGhlIGRvdWJsZSBgZ2V0YCBhbmQgYHB1dGAgaXMgYSBuZXcgdG91Y2guXG5cbkknZCB3YW50IHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkaXNjdXNzaW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUsIGJ1dCBteSBpbW1lZGlhdGUgZ3Vlc3MgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoIGhvdyB0aGUgdHJhbnNwb3J0IGVuZHBvaW50IGxpZmV0aW1lIGlzIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0IGxpc3QuIFdlJ3JlIGV4cGxpY2l0bHkgY29udHJvbGxpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBwcm90ZWN0IHRoZSB0cmFuc3BvcnQgZHVyaW5nIGl0cyBsaWZlY3ljbGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgbWFuYWdpbmcgbGlmZXRpbWVzIGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MTMuODI5NTg3NTE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdFxcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcXG4gODQxOlxcdFxcdFxcdC8qIExlYXZlIFhQVF9CVVNZIHNldCBvbiB0aGUgZGVhZCB4cHJ0OiAqL1xcbiA4NDI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg0MzpcXHRcXHR9XFxuIDg0NDpcXHRcXHRpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X2ZsYWdzKSkge1xcbiA4NDU6XFx0XFx0XFx0c3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7XFxuIDg0NjpcXHRcXHRcXHQvKlxcbiA4NDc6XFx0XFx0XFx0ICogV2Uga25vdyB0aGlzIG1vZHVsZV9nZXQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgdGhlXFxuIDg0ODpcXHRcXHRcXHQgKiBsaXN0ZW5lciBob2xkcyBhIHJlZmVyZW5jZSB0b29cXG4gODQ5OlxcdFxcdFxcdCAqL1xcbiA4NTA6XFx0XFx0XFx0X19tb2R1bGVfZ2V0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gODUxOlxcdFxcdFxcdHN2Y19jaGVja19jb25uX2xpbWl0cyh4cHJ0LVxcdTAwM2V4cHRfc2VydmVyKTtcXG4gODUyOlxcdFxcdFxcdG5ld3hwdCA9IHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19hY2NlcHQoeHBydCk7XFxuIDg1MzpcXHRcXHRcXHRpZiAobmV3eHB0KSB7XFxuIDg1NDpcXHRcXHRcXHRcXHRuZXd4cHQtXFx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cXHUwMDNleHB0X2NyZWQpO1xcbiA4NTU6XFx0XFx0XFx0XFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XFxuIDg1NjpcXHRcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG4gODU3OlxcdFxcdFxcdFxcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXFx1MDAzZXN2X25hbWUpO1xcbiA4NTg6XFx0XFx0XFx0XFx0c3ZjX3hwcnRfcHV0KG5ld3hwdCk7XFxuIDg1OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4NjA6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dCh4cHJ0LVxcdTAwM2V4cHRfY2xhc3MtXFx1MDAzZXhjbF9vd25lcik7XFxuIDg2MTpcXHRcXHRcXHR9XFxuIDg2MjpcXHRcXHRcXHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcXG4gODYzOlxcdFxcdH0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9mbGFncykpIHtcXG4gODY0OlxcdFxcdFxcdHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19oYW5kc2hha2UoeHBydCk7XFxuIDg2NTpcXHRcXHRcXHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcXG4gODY2OlxcdFxcdH0gZWxzZSBpZiAoc3ZjX3hwcnRfcmVzZXJ2ZV9zbG90KHJxc3RwLCB4cHJ0KSkge1xcbiA4Njc6XFx0XFx0XFx0LyogWFBUX0RBVEF8WFBUX0RFRkVSUkVEIGNhc2U6ICovXFxuIDg2ODpcXHRcXHRcXHRycXN0cC1cXHUwMDNlcnFfZGVmZXJyZWQgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KTtcXG4gODY5OlxcdFxcdFxcdGlmIChycXN0cC1cXHUwMDNlcnFfZGVmZXJyZWQpXFxuIDg3MDpcXHRcXHRcXHRcXHRsZW4gPSBzdmNfZGVmZXJyZWRfcmVjdihycXN0cCk7XFxuIDg3MTpcXHRcXHRcXHRlbHNlXFxuIDg3MjpcXHRcXHRcXHRcXHRsZW4gPSB4cHJ0LVxcdTAwM2V4cHRfb3BzLVxcdTAwM2V4cG9fcmVjdmZyb20ocnFzdHApO1xcbiA4NzM6XFx0XFx0XFx0cnFzdHAtXFx1MDAzZXJxX3Jlc2VydmVkID0gc2Vydi1cXHUwMDNlc3ZfbWF4X21lc2c7XFxuIDg3NDpcXHRcXHRcXHRhdG9taWNfYWRkKHJxc3RwLVxcdTAwM2VycV9yZXNlcnZlZCwgXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9yZXNlcnZlZCk7XFxuIDg3NTpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2M9IDApXFxuIDg3NjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0dHJhY2Vfc3ZjX3hkcl9yZWN2ZnJvbShcXHUwMDI2cnFzdHAtXFx1MDAzZXJxX2FyZyk7XFxuIDg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MTMuODI5NjkyNzc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3OTI0MTA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBzdmNcXF9hZGRcXF9uZXdcXF90ZW1wXFxfeHBydCBhbmQgdGhlIHN2Y1xcX3hwcnQgZnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaW4gdGhpcyBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhlIGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBmdW5jdGlvbnMgd2VyZSBpbnRyb2R1Y2VkIGludG8gdGhpcyBhcmVhLiBXaGF0IHByb2JsZW0gd2VyZSB0aGV5IGRlc2lnbmVkIHRvIHNvbHZlPyBJcyBpdCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHRocmVhZCBzYWZldHksIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwcm90b2NvbCBoYW5kbGluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIHRob3NlIGFkZGl0aW9ucy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCwgZmlndXJlIG91dCB0aGUgY29udGV4dCwgYW5kIHRyYWNlIGl0IGJhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcmVkIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCB0byBiZWdpbiB3aXRoLiBUaGUgXCJ3aHlcIiBpcyB0aGUga2V5IGRyaXZlciBoZXJlLCBzbyBJJ20gbm90IG9ubHkgZm9jdXNpbmcgb24gdGhlIFwid2hhdC5cIiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToxNi42MjIxMjE1ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjIxNzI1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmM9Nzg0PXN0YXRpYyBib29sIHN2Y190aHJlYWRfd2FpdF9mb3Jfd29yayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgxNS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODE2OnN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToxNy45ODQzMDIxOTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4OTA3MDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHN2Y194cHJ0LmM6IEEgU3BlY2lmaWMgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgZnJvbSBsaW5lcyA4MTAgdG8gODQ1LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGBzdmNfeHBydGAsIHByb2JhYmx5IHRyYW5zcG9ydC1sYXllciBoYW5kbGluZyBvciBzb21lIGFzcGVjdCBvZiBjb25uZWN0aW9uIG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCBtaWdodCBkZWFsIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIHBhcnRpY3VsYXIgUlBDIHRyYW5zYWN0aW9uLCBtYXliZSBjb25uZWN0aW9uIHNldHVwLCB0ZWFyLWRvd24sIG9yIGV2ZW4gZXJyb3IgaGFuZGxpbmcuIEl0J3MgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGlzIGNvcnJlY3QsIGFuZCB3aGF0IHRoaXMgc2VjdGlvbiBpcyByZWFsbHkgcmVzcG9uc2libGUgZm9yLiBUaW1lIHRvIGdvIGxpbmUtYnktbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjIwLjI3MzM3NTY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA4MTE6XFx0XFx0fVxcbiA4MTI6XFx0XFx0dHJ5X3RvX2ZyZWV6ZSgpO1xcbiA4MTM6XFx0XFx0cmV0dXJuIGRpZF90aW1lb3V0O1xcbiA4MTQ6XFx0fVxcbiA4MTU6XFx0XFxuIDgxNjpcXHRzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcXG4gODE3OlxcdHtcXG4gODE4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfbG9jayk7XFxuIDgxOTpcXHRcXHRzZXRfYml0KFhQVF9URU1QLCBcXHUwMDI2bmV3eHB0LVxcdTAwM2V4cHRfZmxhZ3MpO1xcbiA4MjA6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ld3hwdC1cXHUwMDNleHB0X2xpc3QsIFxcdTAwMjZzZXJ2LVxcdTAwM2Vzdl90ZW1wc29ja3MpO1xcbiA4MjE6XFx0XFx0c2Vydi1cXHUwMDNlc3ZfdG1wY250Kys7XFxuIDgyMjpcXHRcXHRpZiAoc2Vydi1cXHUwMDNlc3ZfdGVtcHRpbWVyLmZ1bmN0aW9uID09IE5VTEwpIHtcXG4gODIzOlxcdFxcdFxcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cXG4gODI0OlxcdFxcdFxcdHNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9IHN2Y19hZ2VfdGVtcF94cHJ0cztcXG4gODI1OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfdGVtcHRpbWVyLFxcbiA4MjY6XFx0XFx0XFx0XFx0ICBqaWZmaWVzICsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcXG4gODI3OlxcdFxcdH1cXG4gODI4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXJ2LVxcdTAwM2Vzdl9sb2NrKTtcXG4gODI5OlxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdCk7XFxuIDgzMDpcXHR9XFxuIDgzMTpcXHRcXG4gODMyOlxcdHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuIDgzMzpcXHR7XFxuIDgzNDpcXHRcXHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBycXN0cC1cXHUwMDNlcnFfc2VydmVyO1xcbiA4MzU6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDgzODpcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFhQVF9LSUxMX1RFTVAsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKVxcbiA4Mzk6XFx0XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2tpbGxfdGVtcF94cHJ0KHhwcnQpO1xcbiA4NDA6XFx0XFx0XFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xcbiA4NDE6XFx0XFx0XFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXFxuIDg0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjIwLjI3MzUwOTk0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMjg2MTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIFVBRiBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgY2FsbHMgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGBuZXd4cHRgIGlzIGVzc2VudGlhbGx5IHJlbGVhc2VkIGludG8gdGhlIHdpbGQgd2l0aCB0aGF0IGNhbGwuIEl0IGNhbiB0aGVuIGJlIHBpY2tlZCB1cCBieSBhbm90aGVyIHRocmVhZCwgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCAqZnJlZWQqIOKAkyBhbGwgYmVmb3JlIGB0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpYCBldmVuIGdldHMgYSBjaGFuY2UgdG8gcnVuISBUaGF0J3MgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBtZWFucyBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3YXMgYWNjZXNzaW5nIGBuZXd4cHRgICphZnRlciogaXQgY291bGQgaGF2ZSBiZWVuIGZyZWVkLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaXNzdWUgS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2guXG5cblRoZSBmaXggaXMgZWxlZ2FudDogd3JhcCB0aGUgY2FsbCB0byBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3aXRoIGBzdmNfeHBydF9nZXQobmV3eHB0KWAgYW5kIGBzdmNfeHBydF9wdXQobmV3eHB0KWAuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBgbmV3eHB0YCAqYmVmb3JlKiBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byBvdGhlciB0aHJlYWRzLCBndWFyYW50ZWVpbmcgaXQncyBhbGl2ZSB3aGlsZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCBleGVjdXRlcywgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB3aGVuIGRvbmUuICBTaW1wbGUsIGVmZmVjdGl2ZSwgYW5kIGl0IGFkZHJlc3NlcyB0aGUgcm9vdCBjYXVzZSBkaXJlY3RseS5cblxuTm93LCBsZXQncyBiZSB0aG9yb3VnaCBhbmQgYW5hbHl6ZSBpZiB0aGUgZml4IGludHJvZHVjZXMgYW55IG90aGVyIHByb2JsZW1zLiBBcmUgdGhlcmUgYW55IHJpc2tzIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gR2l2ZW4gbXkga25vd2xlZGdlLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGFuc3dlciBpcyBubywgYnV0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gIEl0IGxvb2tzIGxpa2U6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLlxuKiAgIE5vIGNvbmRpdGlvbmFscyBvciBicmFuY2hpbmcgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2l0aG91dCB6ZXJvaW5nLlxuKiAgIE5vIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGhhdmUgYmVlbiBhbHRlcmVkIHRvIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBUaGUgZml4IG9ubHkgcmVsaWVzIG9uIGdldHRpbmcgYW5kIHJlbGVhc2luZyBhIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0YCBhbmQgYHN2Y194cHJ0X3B1dGAgYXJvdW5kIHRoZSB0cmFjZXBvaW50LlxuXG5XZSdyZSBqdXN0IG1hbmlwdWxhdGluZyBhIHJlZmVyZW5jZSBjb3VudCBhbmQgdXNpbmcgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgc28gSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGJyaWVmbHkgcmV2aWV3IGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBqdXN0IHRvIGJlIGNlcnRhaW4uIEJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBsb29rcyBsaWtlIGEgY2xlYW4sIHdlbGwtcmVhc29uZWQgcGF0Y2ggdG8gc29sdmUgYSBjcml0aWNhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MjUuNjAyMTIzNzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDk4NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oPTE4OD12b2lkXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2Uoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE4OS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oOjE5MDpzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3hwcnRfZ2V0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjI1LjY3MTYyNzE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODEzNjEyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBgc3ZjX3hwcnQuaGAgYXQgTGluZSAxOTAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUlBDIGluZnJhc3RydWN0dXJlIHdvcmtzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc3ZjX3hwcnQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHRyYW5zcG9ydCBsYXllciBoYW5kbGluZy4gSXQncyBsaWtlbHkgZ29pbmcgdG8gYmUgc29tZXRoaW5nIHRoYXQgZGVmaW5lcyB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrLiBNYXliZSBJJ2xsIGZpbmQgYSBkYXRhIHN0cnVjdHVyZSBmb3IgYSB0cmFuc3BvcnQgaGFuZGxlLCBvciBwb3NzaWJseSBzb21lIGtleSBtYWNyb3MgZm9yIGRpc3BhdGNoaW5nIGNhbGxzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToyNy40ODUyNDE3MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODg6XFx0dm9pZFxcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiAxOTE6XFx0e1xcbiAxOTI6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9yZWYpO1xcbiAxOTM6XFx0fVxcbiAxOTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2Y194cHJ0X3NldF9sb2NhbChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQsXFxuIDE5NTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLFxcbiAxOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc2l6ZV90IHNhbGVuKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfbG9jYWwsIHNhLCBzYWxlbik7XFxuIDE5OTpcXHRcXHR4cHJ0LVxcdTAwM2V4cHRfbG9jYWxsZW4gPSBzYWxlbjtcXG4gMjAwOlxcdH1cXG4gMjAxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfcmVtb3RlKHN0cnVjdCBzdmNfeHBydCAqeHBydCxcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLFxcbiAyMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHNpemVfdCBzYWxlbilcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdG1lbWNweShcXHUwMDI2eHBydC1cXHUwMDNleHB0X3JlbW90ZSwgc2EsIHNhbGVuKTtcXG4gMjA2OlxcdFxcdHhwcnQtXFx1MDAzZXhwdF9yZW1vdGVsZW4gPSBzYWxlbjtcXG4gMjA3OlxcdFxcdHNucHJpbnRmKHhwcnQtXFx1MDAzZXhwdF9yZW1vdGVidWYsIHNpemVvZih4cHJ0LVxcdTAwM2V4cHRfcmVtb3RlYnVmKSAtIDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjI3LjQ4NTMxNTI0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjkxNDY0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeDogYHN2Y194cHJ0X2dldGAgaXMgYmVpbmcgYWRkZWQgYmVmb3JlIGBzdmNfYWRkX25ld190ZW1wX3hwcnQoKWAgYW5kIGBzdmNfeHBydF9wdXQoKWAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gIEJhc2ljYWxseSwgYSBzaW1wbGUgcmVmZXJlbmNlIGNvdW50IG1hbmlwdWxhdGlvbi4gIGBzdmNfeHBydF9nZXRgIGp1c3QgZG9lcyBhIGBrcmVmX2dldGAsIGFuZCBgc3ZjX3hwcnRfcHV0YCBjYWxscyBga3JlZl9wdXRgIHdpdGggdGhlIGBzdmNfeHBydF9yZWxlYXNlYCBjYWxsYmFjay5cblxuVGhlIHByb2JsZW0gdGhpcyBpcyBtZWFudCB0byBhZGRyZXNzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbjogYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBgbmV3eHB0YCBtaWdodCBnZXQgZGVzdHJveWVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgIHJ1bnMuICBUaGlzIHJlZmVyZW5jZSBjb3VudGluZyBpcyBtZWFudCB0byBwcmV2ZW50IHRoYXQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnk/ICBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBzcXVhcmVseSBpbiBLQVNBTidzIGRvbWFpbi4gV2UncmUgZGVhbGluZyB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIEtBU0FOIGlzIGJ1aWx0IGZvciB0aGF0LiAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIHJlYWRzIG9yIG1lbW9yeSBsZWFrcyBoZXJlLiBBbnkgcmVmY291bnQgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHRoZSBzdGFuZGFyZCByZWZjb3VudF90IHNhbml0eSBjaGVja3MgYW5kIFNMVUIgZGVidWcgZmVhdHVyZXMuIEtNU0FOIHdvdWxkbid0IG9mZmVyIGFueSB1bmlxdWUgdmFsdWUgaW4gZGV0ZWN0aW5nIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgdW5lcXVpdm9jYWxseSBmYWxzZS4gSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuIFRoaXMgaXMgYSBjbGVhbiwgbmVjZXNzYXJ5IGZpeCwgYW5kIGl0J3Mgd2l0aGluIHRoZSByZW1pdCBvZiBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyNiwiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMTozMS43NzY3ODIxMTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG9iamVjdCBsaWZldGltZSAoVUFGIHByZXZlbnRpb24pLiBMaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmM6c3ZjX2hhbmRsZV94cHJ0KCkuIE9uY2Ugc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgaXMgY2FsbGVkLCB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0IChuZXd4cHQpIGNhbiBiZSBwcm9jZXNzZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIGZpbmlzaGVzIGFjY2Vzc2luZyBpdC4gQnkgdGFraW5nIGEgcmVmZXJlbmNlIHdpdGggc3ZjX3hwcnRfZ2V0KCkgYmVmb3JlIGFkZGluZyB0aGUgdHJhbnNwb3J0IGFuZCByZWxlYXNpbmcgaXQgd2l0aCBzdmNfeHBydF9wdXQoKSBhZnRlcndhcmRzLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSB0cmFuc3BvcnQgcG9pbnRlciByZW1haW5zIHZhbGlkIGR1cmluZyB0aGUgdHJhY2Vwb2ludCBjYWxsLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 14:08:14 +0000 UTC FinishedAt: 2026-09-12 15:01:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFSD" ], "series_id": "f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "svc_handle_xprt", "svc_recv", "svc_add_new_temp_xprt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX2hhbmRsZV94cHJ0JiMzNDssCiAgICAmIzM0O3N2Y19yZWN2JiMzNDssCiAgICAmIzM0O3N2Y19hZGRfbmV3X3RlbXBfeHBydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YTdjZDg5OTg4MWI1YmIyNjNjMTViMjI2NGEyNWEwMjg1ZWFlNjc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTQ6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5pbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcbkBAIC04NTIsOCAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIFx0XHRuZXd4cHQgPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcbiBcdFx0aWYgKG5ld3hwdCkge1xuIFx0XHRcdG5ld3hwdC1cdTAwM2V4cHRfY3JlZCA9IGdldF9jcmVkKHhwcnQtXHUwMDNleHB0X2NyZWQpO1xuJiM0MztcdFx0XHRzdmNfeHBydF9nZXQobmV3eHB0KTtcbiBcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbiBcdFx0XHR0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuJiM0MztcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19oYW5kbGVfeHBydCYjMzQ7LAogICAgJiMzNDtzdmNfcmVjdiYjMzQ7LAogICAgJiMzNDtzdmNfYWRkX25ld190ZW1wX3hwcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3ZjX2hhbmRsZV94cHJ0KCkgaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAodmlhIHN2Y194cHJ0X2dldC9wdXQpIGFjcm9zcyBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBhbmQgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZS9VQUYgd2hlcmUgdGhlIHRyYW5zcG9ydCBtaWdodCBiZSBjbG9zZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgcnVucy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBjb3JlIGtlcm5lbCBSUEMgbmV0d29ya2luZyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gaW5jb21pbmcgY29ubmVjdGlvbnMgYXJlIGFjY2VwdGVkIG9uIFNVTlJQQyBsaXN0ZW5lciBzb2NrZXRzIChlLmcuLCBORlNELCBsb2NrZCkuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gdGVzdCB0cmFuc3BvcnQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNDo1OToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC04NTIsOCAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogCQluZXd4cHQgPSB4cHJ0LSZndDt4cHRfb3BzLSZndDt4cG9fYWNjZXB0KHhwcnQpOwogCQlpZiAobmV3eHB0KSB7CiAJCQluZXd4cHQtJmd0O3hwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC0mZ3Q7eHB0X2NyZWQpOwomIzQzOwkJCXN2Y194cHJ0X2dldChuZXd4cHQpOwogCQkJc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7CiAJCQl0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LSZndDtzdl9uYW1lKTsKJiM0MzsJCQlzdmNfeHBydF9wdXQobmV3eHB0KTsKIAkJfSBlbHNlIHsKIAkJCW1vZHVsZV9wdXQoeHBydC0mZ3Q7eHB0X2NsYXNzLSZndDt4Y2xfb3duZXIpOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBBTUQ2NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gSSBzZWUgaXQmIzM5O3MgYSBkaWZmLCB3aGljaCBtYWtlcyB0aGluZ3MgZWFzaWVyLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gYXBwbGllZCBieSBhIHN5ei1jbHVzdGVyIGJvdCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhIGJ1ZyBmaXggb3IgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBgc3ZjX2hhbmRsZV94cHJ0YCBmdW5jdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgYHN2Y194cHJ0X2dldGAgY2FsbCBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgYW5kIGEgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAuIFRoaXMgaXMgZ29vZCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG9zc2libGUgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBgbmV3eHB0YC4KCkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpY2F0aW9ucyBvZiBgc3ZjX3hwcnRfZ2V0YCBvciBgc3ZjX3hwcnRfcHV0YC4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdyBhbmQgdGhlIG92ZXJhbGwgbG9naWMgb2YgYHN2Y19oYW5kbGVfeHBydGAgYW5kIGhvdyBgc3ZjX3hwcnRgIG9iamVjdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gVGltZSB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIHVzZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlLCByZWxhdGVkIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y194cHJ0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiA4MzU6XHRcdGludCBsZW4gPSAwO1xuIDgzNjpcdFxuIDgzNzpcdFx0aWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODM4Olx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBUX0tJTExfVEVNUCwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKVxuIDgzOTpcdFx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fa2lsbF90ZW1wX3hwcnQoeHBydCk7XG4gODQwOlx0XHRcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcbiA4NDE6XHRcdFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXG4gODQyOlx0XHRcdGdvdG8gb3V0O1xuIDg0MzpcdFx0fVxuIDg0NDpcdFx0aWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODQ1Olx0XHRcdHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0O1xuIDg0NjpcdFx0XHQvKlxuIDg0NzpcdFx0XHQgKiBXZSBrbm93IHRoaXMgbW9kdWxlX2dldCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSB0aGVcbiA4NDg6XHRcdFx0ICogbGlzdGVuZXIgaG9sZHMgYSByZWZlcmVuY2UgdG9vXG4gODQ5Olx0XHRcdCAqL1xuIDg1MDpcdFx0XHRfX21vZHVsZV9nZXQoeHBydC1cdTAwM2V4cHRfY2xhc3MtXHUwMDNleGNsX293bmVyKTtcbiA4NTE6XHRcdFx0c3ZjX2NoZWNrX2Nvbm5fbGltaXRzKHhwcnQtXHUwMDNleHB0X3NlcnZlcik7XG4gODUyOlx0XHRcdG5ld3hwdCA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xuIDg1MzpcdFx0XHRpZiAobmV3eHB0KSB7XG4gODU0Olx0XHRcdFx0bmV3eHB0LVx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cdTAwM2V4cHRfY3JlZCk7XG4gODU1Olx0XHRcdFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XG4gODU2Olx0XHRcdFx0c3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG4gODU3Olx0XHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbiA4NTg6XHRcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiA4NTk6XHRcdFx0fSBlbHNlIHtcbiA4NjA6XHRcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gODYxOlx0XHRcdH1cbiA4NjI6XHRcdFx0c3ZjX3hwcnRfcmVjZWl2ZWQoeHBydCk7XG4gODYzOlx0XHR9IGVsc2UgaWYgKHRlc3RfYml0KFhQVF9IQU5EU0hBS0UsIFx1MDAyNnhwcnQtXHUwMDNleHB0X2ZsYWdzKSkge1xuIDg2NDpcdFx0XHR4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2hhbmRzaGFrZSh4cHJ0KTtcbiA4NjU6XHRcdFx0c3ZjX3hwcnRfcmVjZWl2ZWQoeHBydCk7XG4gODY2Olx0XHR9IGVsc2UgaWYgKHN2Y194cHJ0X3Jlc2VydmVfc2xvdChycXN0cCwgeHBydCkpIHtcbiA4Njc6XHRcdFx0LyogWFBUX0RBVEF8WFBUX0RFRkVSUkVEIGNhc2U6ICovXG4gODY4Olx0XHRcdHJxc3RwLVx1MDAzZXJxX2RlZmVycmVkID0gc3ZjX2RlZmVycmVkX2RlcXVldWUoeHBydCk7XG4gODY5Olx0XHRcdGlmIChycXN0cC1cdTAwM2VycV9kZWZlcnJlZClcbiA4NzA6XHRcdFx0XHRsZW4gPSBzdmNfZGVmZXJyZWRfcmVjdihycXN0cCk7XG4gODcxOlx0XHRcdGVsc2VcbiA4NzI6XHRcdFx0XHRsZW4gPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX3JlY3Zmcm9tKHJxc3RwKTtcbiA4NzM6XHRcdFx0cnFzdHAtXHUwMDNlcnFfcmVzZXJ2ZWQgPSBzZXJ2LVx1MDAzZXN2X21heF9tZXNnO1xuIDg3NDpcdFx0XHRhdG9taWNfYWRkKHJxc3RwLVx1MDAzZXJxX3Jlc2VydmVkLCBcdTAwMjZ4cHJ0LVx1MDAzZXhwdF9yZXNlcnZlZCk7XG4gODc1Olx0XHRcdGlmIChsZW4gXHUwMDNjPSAwKVxuIDg3NjpcdFx0XHRcdGdvdG8gb3V0O1xuIDg3NzpcdFxuIDg3ODpcdFx0XHR0cmFjZV9zdmNfeGRyX3JlY3Zmcm9tKFx1MDAyNnJxc3RwLVx1MDAzZXJxX2FyZyk7XG4gODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgUHVycG9zZSBvZiBUaGlzIFBhdGNoIGFuZCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgbW9kaWZpY2F0aW9ucyBpdCBicmluZ3MgdG8gdGhlIGV4aXN0aW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24uIFRpbWUgdG8gcmVhZCB0aHJvdWdoIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX2FkZF9uZXdfdGVtcF94cHJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE1LVxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz04MzI9c3RhdGljIHZvaWQgc3ZjX2hhbmRsZV94cHJ0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfeHBydCAqeHBydClcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODU1LVx0XHRcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjg1NjpcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04NTctXHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gUlBDIFRyYW5zcG9ydCBMaWZlY3ljbGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byBsaW5lcyA4MTAtODM1IG9mIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgdGhlIGxpZmVjeWNsZSBvZiBhbiBSUEMgdHJhbnNwb3J0LiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBnb2luZyB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMsIHJlZ2lzdHJhdGlvbiwgZGUtcmVnaXN0cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHRyYW5zcG9ydCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBjb2RlIGJsb2NrIGlzIHByb2JhYmx5IGludHJpY2F0ZWx5IGxpbmtlZCB0byB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBpbiBkZXRhaWwuIFdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpcyB0aGUgZmxvdyBvZiBldmVudHMsIGhvdyB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB1c2VkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHJlcXVlc3RzIGFuZCByZXBsaWVzIGFyZSBxdWV1ZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hldGhlciB0aGlzIHNlY3Rpb24gY292ZXJzIHRoZSBSUEMgbGF5ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrLCBhbmQgSSYjMzk7bSBwcmVwYXJlZCBmb3IgdGhpcyB0byBpbnZvbHZlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNvY2tldCBtYW5hZ2VtZW50LiBJIGV4cGVjdCBhIGxvdCBvZiBgc3Bpbl9sb2NrYCBhbmQgYG11dGV4YCB1c2FnZSwgZ2l2ZW4gaXQmIzM5O3MgdGhlIFJQQyBjb3JlLiBBbmQgSSBiZXQgdGhlcmUgYXJlIHNvbWUgc3VidGxldGllcyByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZSB0b28uIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODExOlx0XHR9XG4gODEyOlx0XHR0cnlfdG9fZnJlZXplKCk7XG4gODEzOlx0XHRyZXR1cm4gZGlkX3RpbWVvdXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuIDgxNzpcdHtcbiA4MTg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXJ2LVx1MDAzZXN2X2xvY2spO1xuIDgxOTpcdFx0c2V0X2JpdChYUFRfVEVNUCwgXHUwMDI2bmV3eHB0LVx1MDAzZXhwdF9mbGFncyk7XG4gODIwOlx0XHRsaXN0X2FkZChcdTAwMjZuZXd4cHQtXHUwMDNleHB0X2xpc3QsIFx1MDAyNnNlcnYtXHUwMDNlc3ZfdGVtcHNvY2tzKTtcbiA4MjE6XHRcdHNlcnYtXHUwMDNlc3ZfdG1wY250JiM0MzsmIzQzOztcbiA4MjI6XHRcdGlmIChzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XG4gODIzOlx0XHRcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cbiA4MjQ6XHRcdFx0c2Vydi1cdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XG4gODI1Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lcixcbiA4MjY6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcbiA4Mjc6XHRcdH1cbiA4Mjg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlcnYtXHUwMDNlc3ZfbG9jayk7XG4gODI5Olx0XHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xuIDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIFNVTlJQQyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IHJhaXNpbmcgc29tZSBmbGFncy4gSSBzZWUgdGhhdCBpdCYjMzk7cyBtYW5pcHVsYXRpbmcgdGhlIGBuZXd4cHRgIHRyYW5zcG9ydCBzdHJ1Y3R1cmUsIG1hcmtpbmcgaXQgYXMgdGVtcG9yYXJ5LCBhZGRpbmcgaXQgdG8gYSBsaXN0LCBhbmQgdGhlbiBjcnVjaWFsbHksIGNhbGxpbmcgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgcHJvYmxlbSBpcywgYHN2Y194cHJ0X3JlY2VpdmVkYCBjb3VsZCBwb3RlbnRpYWxseSByZWxlYXNlIGBuZXd4cHRgIHZlcnkgcXVpY2tseSwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgdGhyZWFkIGltbWVkaWF0ZWx5LgoKVGhlbiBJIHNlZSB0aGF0IGBzdmNfaGFuZGxlX3hwcnRgIGNhbGxzIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgLCBidXQgKmJlZm9yZSogdGhhdCBpdCBkb2VzOgoKYGBgYwpzdmNfeHBydF9nZXQobmV3eHB0KTsKc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7CnRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtJmd0O3N2X25hbWUpOwpzdmNfeHBydF9wdXQobmV3eHB0KTsKYGBgCgpUaGUgcmVhc29uIGZvciB0aGUgYGdldGAgYW5kIGBwdXRgIGlzIGNsZWFyOiBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCBpcyBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYG5ld3hwdGAsIGFuZCB3aXRob3V0IHRoYXQgcmVmZXJlbmNlLCB0aGVyZSYjMzk7cyBhIGRlZmluaXRlIHVzZS1hZnRlci1mcmVlIHJpc2sgaWYgYHN2Y194cHJ0X3JlY2VpdmVkYCBoYXMgZHJvcHBlZCBpdC4gU28sIHRoYXQgYHN2Y194cHJ0X2dldGAgYmVmb3JlIGNhbGxpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24sIGFuZCB0aGUgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgaXMgYSB2ZXJ5IGltcG9ydGFudCBhbmQgZGVsaWJlcmF0ZSBtZWFzdXJlIHRvIG1ha2Ugc3VyZSBgbmV3eHB0YCBpcyBzdGlsbCBhbGl2ZSBhbmQgaGFzIGEgdmFsaWQgcmVmZXJlbmNlIGZvciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB0byB1c2UuIFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBzdGFyaW5nIGF0IGEgcmVhbCBidWcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IFRoaXMgaXMgU1VOUlBDIHNlcnZlciBjb2RlIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLCBzbyBpdCYjMzk7cyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLiBUaGlzIGlzIHVzZWQgYnkgbmZzZCwgc28gYW55IHJlbW90ZSBORlMgc2VydmVyIGlzIGV4cG9zZWQuIFdlIGFsc28ga25vdyB0aGF0IG90aGVyIGluLWtlcm5lbCBSUEMgc2VydmljZXMgdXNlIGl0LCBzbyB0aGVyZSYjMzk7cyBhIGJyb2FkIGF0dGFjayBzdXJmYWNlIGhlcmUuCgpOZXh0IHF1ZXN0aW9uOiBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgTkZTIHNlcnZlciBpcyBjb25maWd1cmVkIG9yIHVzZWQgaW4gc3l6a2FsbGVyIHRvIGVuc3VyZSBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYHN1bnJwY2AgYW5kIGBzdmNfeHBydC5jYCB0byBjb25maXJtIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiB0aGUgZnV6emluZyBoYXJuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfeHBydFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL01ha2VmaWxlPTExPXN1bnJwYy15IDo9IGNsbnQubyB4cHJ0Lm8gc29ja2xpYi5vIHhwcnRzb2NrLm8gc2NoZWQubyBcXFxuLS1cbm5ldC9zdW5ycGMvTWFrZWZpbGUtMTUtXHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxNjpcdCAgICBzdmNfeHBydC5vIFxcXG5uZXQvc3VucnBjL01ha2VmaWxlLTE3LVx0ICAgIHhwcnRtdWx0aXBhdGgubyBuZXRsaW5rLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgUlBDIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIFJQQyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHVzdWFsbHkgZmluZCB0aGUgZnVuZGFtZW50YWwgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIFN1biBSUEMgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgYXQgcGxheS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGZlYXR1cmVzIGRlZmluZWQgaGVyZSwgYW5kIHRoZW4gb3RoZXIgcGFydHMgb2YgdGhlIFJQQyBzdGFjayBwcm9iYWJseSByZWZlcmVuY2luZyBpdC4gS25vd2luZyB3aGF0JiMzOTtzIGNvbmZpZ3VyZWQgaGVyZSBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGFueSBpc3N1ZXMgSSBtaWdodCBiZSBzZWVpbmcgd2l0aCBSUEMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNVTlJQQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTVVMVElVU0VSXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNVTlJQQ19HU1NcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XHRzZWxlY3QgT0lEX1JFR0lTVFJZXG4gICA5Olx0XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcdGRlcGVuZHMgb24gU1VOUlBDXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIFNVTlJQQ19TV0FQXG4gIDE2Olx0XHRib29sXG4gIDE3Olx0XHRkZXBlbmRzIG9uIFNVTlJQQ1xuICAxODpcdFxuICAxOTpcdGNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgQ1JZUFRPXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdHNlbGVjdCBTVU5SUENfR1NTXG4gIDI0Olx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgU2VjdXJlIFJQQyB1c2luZyB0aGUgS2VyYmVyb3MgdmVyc2lvbiA1XG4gIDI3Olx0XHQgIEdTUy1BUEkgbWVjaGFuaXNtIChSRkMgMTk2NCkuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIFNlY3VyZSBSUEMgY2FsbHMgd2l0aCBLZXJiZXJvcyByZXF1aXJlIGFuIGF1eGlsaWFyeSB1c2VyLXNwYWNlXG4gIDMwOlx0XHQgIGRhZW1vbiB3aGljaCBtYXkgYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlscyBwYWNrYWdlXG4gIDMxOlx0XHQgIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIEluIGFkZGl0aW9uLCB1c2VyLXNwYWNlXG4gIDMyOlx0XHQgIEtlcmJlcm9zIHN1cHBvcnQgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgU1VOUlBDX0RFQlVHXG4gIDM3Olx0XHRib29sIFwmIzM0O1JQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIFNVTlJQQyBcdTAwMjZcdTAwMjYgU1lTQ1RMXG4gIDM5Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHN5c2N0bC1iYXNlZCBkZWJ1Z2dpbmcgaW50ZXJmYWNlXG4gIDQyOlx0XHQgIHRoYXQgaXMgYmUgdXNlZCBieSB0aGUgJiMzOTtycGNkZWJ1ZyYjMzk7IHV0aWxpdHkgdG8gdHVybiBvbiBvciBvZmZcbiAgNDM6XHRcdCAgbG9nZ2luZyBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsIFJQQyBhY3Rpdml0eS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSB5b3VyIGtlcm5lbCBzbGlnaHRseSBzbWFsbGVyLFxuICA0NjpcdFx0ICBidXQgbWFrZXMgdHJvdWJsZXNob290aW5nIE5GUyBpc3N1ZXMgc2lnbmlmaWNhbnRseSBoYXJkZXIuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjb25uZWN0aW9ucyBoZXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgU1VOUlBDYC4gVGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoaWNoIGtlcm5lbCBjb21wb25lbnRzIGFyZSBhY3R1YWxseSAqc2VsZWN0aW5nKiBgU1VOUlBDYD8gSXMgaXQgTkZTRD8gTkZTX0ZTPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCk15IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdobyYjMzk7cyBhY3R1YWxseSB1dGlsaXppbmcgdGhlIGtleSBSUEMgc2VydmljZSBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgZnVuY3Rpb25zLiBGdW5jdGlvbnMgbGlrZSBgc3ZjX2NyZWF0ZWAsIGBzdmNfaGFuZGxlX3hwcnRgLCBvciBtYXliZSBldmVuIGRpcmVjdGx5IGluIGBuZnNkYCBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcy4KClRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29tcG9uZW50cywgSeKAmWxsIHRoZW4gY2hlY2sgdGhlIE5GU0QgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGUuIEl0IHNob3VsZCBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyB1c2VkIHRvIGNvbXBpbGUgTkZTRC4gVGhpcyBzaG91bGQgZ2l2ZSBhIGdvb2QgdmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzU3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGaWxlIFN5c3RlbSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyB3aG9sZSBuZXR3b3JrIGZpbGUgc3lzdGVtIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTkZTRGAsIHNwZWNpZmljYWxseSwgaXMgdXNpbmcgYFNVTlJQQ2AuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmcuIEFuZCBgbG9ja2RgLCB0aGF0JiMzOTtzIHRoZSBsb2NrIGRhZW1vbiwgaXQmIzM5O3MgYWxzbyBrZXllZCBpbnRvIGBTVU5SUENgLiBUaGF0IG1ha2VzIHNlbnNlOyBsb2NraW5nIG5lZWRzIHRvIGJlIHJvYnVzdCwgYW5kIFJQQyBvZmZlcnMgdGhhdCBmb3VuZGF0aW9uYWwgcmVtb3RlIGNvbW11bmljYXRpb24gbGF5ZXIuCgpOb3csIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hvJiMzOTtzIGNhbGxpbmcgYHN2Y19oYW5kbGVfeHBydGAuIFRoYXQgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyB0aGUgdHJhbnNwb3J0IGxheWVyOyBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgaW5jb21pbmcgcmVxdWVzdHMuIElkZW50aWZ5aW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIHByZWNpc2UgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25uZWN0ZWQgYW5kIHRoZSBkYXRhIHRyYW5zZmVyIGZsb3cgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGF0IGlzIGtleSB0byBkaWFnbm9zaW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl04oCZcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfaGFuZGxlX3hwcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Y194cHJ0LmM9ODE2PXN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MzEtXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODMyOnN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODMzLXtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9OTIxPWludCBzdmNfcmVjdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxuLS1cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy05NjktXHRcdHRyYWNlX3N2Y194cHJ0X2RlcXVldWUocnFzdHApO1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjk3MDpcdFx0c3ZjX2hhbmRsZV94cHJ0KHJxc3RwLCB4cHJ0KTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy05NzEtXHR9XG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYz00Mzg9c3RhdGljIHN0cnVjdCBzdmNfeHBydCAqc3ZjX3JkbWFfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcbi0tXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jLTYyNS1cdCAqXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jOjYyNjpcdCAqIHN2Y19oYW5kbGVfeHBydCgpIGRyb3BzIGl0cyBwcmUtYWNxdWlyZWQgbW9kdWxlIHJlZmVyZW5jZSB3aGVuXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jLTYyNy1cdCAqIC1cdTAwM2V4cG9fYWNjZXB0KCkgcmV0dXJucyBOVUxMLiBUYWtlIGEgcmVwbGFjZW1lbnQgcmVmZXJlbmNlIGJlZm9yZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA4NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyBpbiB0aGUgUlBDIFN5c3RlbSoqCgpPa2F5LCBzbyBgc3ZjX2hhbmRsZV94cHJ0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIGEgcmVjZWl2ZWQgUlBDIHJlcXVlc3QuIE1ha2VzIHNlbnNlLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhlIHJlcXVlc3QgdGFrZXMgdG8gKmdldCogdG8gYHN2Y19oYW5kbGVfeHBydGAuIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYHN2Y19yZWN2YCBjYWxscyBpdC4gUmlnaHQsIHNvIEkga25vdyB0aGUgaW1tZWRpYXRlIGNhbGxlciwgYnV0IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgZnVydGhlciB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWQsIGFuZCBhdCB3aGF0IHBvaW50IHRoZSBzeXN0ZW0gcmVhbGl6ZXMgYW4gaW5jb21pbmcgbWVzc2FnZSAqaXMqIGFjdHVhbGx5IHNvbWV0aGluZyB0byBiZSBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbnRvIHdoZXJlIGBzdmNfcmVjdmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3JlY3ZcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg9MTI0Mz11bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLFxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEyNzgtXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMjc5Oi8qIHN2Y19yZWN2KClcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEyODAtICogVFJBUDpcdEhWX0ZBU1RfVFJBUFxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTEzMjI9dW5zaWduZWQgbG9uZyBzdW40dl9zdmNfc2VuZCh1bnNpZ25lZCBsb25nIHN2Y19pZCxcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMzI2OnVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX3JlY3YodW5zaWduZWQgbG9uZyBzdmNfaWQsXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI3LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBidWZmZXIsXG4tLVxuZnMvbG9ja2Qvc3ZjLmM9MTI0PWxvY2tkKHZvaWQgKnZycXN0cClcbi0tXG5mcy9sb2NrZC9zdmMuYy0xMzEtXG5mcy9sb2NrZC9zdmMuYzoxMzI6XHQvKiB0cnlfdG9fZnJlZXplKCkgaXMgY2FsbGVkIGZyb20gc3ZjX3JlY3YoKSAqL1xuZnMvbG9ja2Qvc3ZjLmMtMTMzLVx0c2V0X2ZyZWV6YWJsZSgpO1xuLS1cbmZzL2xvY2tkL3N2Yy5jLTE0Mi1cdFx0bmxtc3ZjX3JldHJ5X2Jsb2NrZWQocnFzdHApO1xuZnMvbG9ja2Qvc3ZjLmM6MTQzOlx0XHRzdmNfcmVjdihycXN0cCwgMCk7XG5mcy9sb2NrZC9zdmMuYy0xNDQtXHR9XG4tLVxuZnMvbmZzL2NhbGxiYWNrLmM9NzU9bmZzNF9jYWxsYmFja19zdmModm9pZCAqdnJxc3RwKVxuLS1cbmZzL25mcy9jYWxsYmFjay5jLTgzLVx0d2hpbGUgKCFzdmNfdGhyZWFkX3Nob3VsZF9zdG9wKHJxc3RwKSlcbmZzL25mcy9jYWxsYmFjay5jOjg0Olx0XHRzdmNfcmVjdihycXN0cCwgMCk7XG5mcy9uZnMvY2FsbGJhY2suYy04NS1cbi0tXG5mcy9uZnNkL25mc3N2Yy5jPTg4OT1uZnNkKHZvaWQgKnZycXN0cClcbi0tXG5mcy9uZnNkL25mc3N2Yy5jLTkxOC1cdHdoaWxlICghc3ZjX3RocmVhZF9zaG91bGRfc3RvcChycXN0cCkpIHtcbmZzL25mc2QvbmZzc3ZjLmM6OTE5Olx0XHRzd2l0Y2ggKHN2Y19yZWN2KHJxc3RwLCA1ICogSFopKSB7XG5mcy9uZnNkL25mc3N2Yy5jLTkyMC1cdFx0Y2FzZSAtRVRJTUVET1VUOlxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaD01Nj1zdGF0aWMgaW5saW5lIHUzMiBzdmNfc29ja19maW5hbF9yZWMoc3RydWN0IHN2Y19zb2NrICpzdnNrKVxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02My0gKi9cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaDo2NDppbnRcdFx0c3ZjX3JlY3Yoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbyk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjUtdm9pZFx0XHRzdmNfc2VuZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9ODk3PXN0YXRpYyB2b2lkIHN2Y190aHJlYWRfd2FrZV9uZXh0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTkyMC0gKi9cbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo5MjE6aW50IHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtOTIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3ZjX3JlY3ZgIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYHN2Y19yZWN2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggYW5kIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGBzdmNfcmVjdmAgaXMgYSBwcmV0dHkgY29yZSBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGJ5IGEgZmV3IGNydWNpYWwgY29tcG9uZW50czogYGxvY2tkYCAoc3BlY2lmaWNhbGx5IGluIGBmcy9sb2NrZC9zdmMuY2ApLCBgbmZzNF9jYWxsYmFja19zdmNgIChsb2NhdGVkIGluIGBmcy9uZnMvY2FsbGJhY2suY2ApLCBhbmQgdGhlIHByaW1hcnkgTkZTIGRhZW1vbiwgYG5mc2RgIChmb3VuZCB3aXRoaW4gYGZzL25mc2QvbmZzc3ZjLmNgKS4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGhhbmRsaW5nIGluY29taW5nIFJQQyByZXF1ZXN0cy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGxpc3RlbmVyIHRyYW5zcG9ydHMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBhIHRyYW5zcG9ydCBpcyBpbml0aWFsaXplZCBhbmQgYWN0aXZlbHkgbGlzdGVuaW5nIHdoZW4gZWl0aGVyIHRoZSBORlMgc2VydmVyLCBsb2NrZCBzZXJ2aWNlLCBvciBhIGNhbGxiYWNrIG1lY2hhbmlzbSBiaW5kcyB0byBhIHBvcnQg4oCTIHN1Y2ggYXMgVENQIHBvcnQgMjA0OSBmb3IgdGhlIG1haW4gTkZTIGRhZW1vbiDigJMgYW5kIGEgY2xpZW50IGVzdGFibGlzaGVzIGEgY29ubmVjdGlvbi4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGxpa2VseSBgeHBvX2FjY2VwdGAsIHdoaWNoIGlzIGNhbGxlZCB0byBhY2NlcHQgdGhlIGluY29taW5nIGNvbm5lY3Rpb24sIG9yIGF0IGxlYXN0IHRoYXQmIzM5O3MgbXkgd29ya2luZyBoeXBvdGhlc2lzLiBJIHNob3VsZCBjaGVjayB0aGF0LgoKQWgsIHllcywgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjYWxsOiBgbmV3eHB0ID0geHBydC0mZ3Q7eHB0X29wcy0mZ3Q7eHBvX2FjY2VwdCh4cHJ0KTtgLiBUaGlzIGlzIHdoZXJlIHRoZSB0cmFuc3BvcnQgZ2V0cyBpdHMgbGVncywgc28gdG8gc3BlYWsuIElmIGl0JiMzOTtzIGEgVENQIGNvbm5lY3Rpb24sIHRoYXQgYHhwb19hY2NlcHRgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgYHN2Y190Y3BfYWNjZXB0YCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGF0IGltcGxlbWVudGF0aW9uIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfdGNwX2FjY2VwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmMtOTI2LSAqL1xubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTI3OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTkyOC17XG4tLVxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTMzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN2Y194cHJ0X29wcyBzdmNfdGNwX29wcyA9IHtcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ0LVx0Lnhwb19oYXNfd3NwYWNlID0gc3ZjX3RjcF9oYXNfd3NwYWNlLFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6MTM0NTpcdC54cG9fYWNjZXB0ID0gc3ZjX3RjcF9hY2NlcHQsXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ2LVx0Lnhwb19raWxsX3RlbXBfeHBydCA9IHN2Y190Y3Bfa2lsbF90ZW1wX3hwcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIEFuYWx5c2lzOiBORlMgU2VydmVyIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHRoZSBORlMgc2VydmVyIChuZnNkKSB3aGVuIGEgY2xpZW50IGNvbm5lY3RzLiBUaGUgcHJvYmxlbSBsaWVzIGluIHRoZSBoYW5kbGluZyBvZiBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgZGVzY3JpcHRvcnMgKGBuZXd4cHRgKSB3aXRoaW4gYHN2Y19oYW5kbGVfeHBydGAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIHdvcmtlciB0aHJlYWQgY291bGQgcHJlbWF0dXJlbHkgZnJlZSB0aGUgYG5ld3hwdGAgYmVmb3JlIGNlcnRhaW4gb3BlcmF0aW9ucyAobGlrZSB0cmFjaW5nKSB3ZXJlIGNvbXBsZXRlZCBpbiB0aGUgYWNjZXB0aW5nIHRocmVhZC4gVGhlIGZpeCBpbnZvbHZlcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0YCBhbmQgZGVjcmVtZW50aW5nIGl0IHdpdGggYHN2Y194cHJ0X3B1dGAgdG8gZW5zdXJlIHRoZSBkZXNjcmlwdG9yJiMzOTtzIGxpZmV0aW1lIG1hdGNoZXMgdGhlIHJlcXVpcmVkIG9wZXJhdGlvbnMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIHBhdGNoZXMgYXJlIGNsZWFyLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU1VOUlBDL05GUyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHN5emthbGxlciBhbHJlYWR5IGZ1enplcyBuZnNkLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQhIFdlIGNhbiBjb25maXJtIHRoYXQgYSB1c2VyLXNwYWNlIG5mcyBzZXJ2ZXIgY2FuIGJlIHN0YXJ0ZWQsIGFuZCBjb25uZWN0aW9ucyBjYW4gYmUgZXN0YWJsaXNoZWQgb3ZlciBsb29wYmFjaywgd2hpY2ggY292ZXJzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlYWNoYWJsZSBjb2RlLgoKVG8gY29uZmlybSByZWFjaGFiaWxpdHksIHdlIG11c3QgY2hlY2sgdGhlIGludm9sdmVkIHN5bWJvbHMuCldlIGtub3cgdGhhdCBgc3ZjX2hhbmRsZV94cHJ0YCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBzdGF0aWMuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzdmNfcmVjdmAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFdlIGFsc28gaGF2ZSBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCB3aGljaCBpcyBzdGF0aWMsIGFuZCBgc3ZjX3hwcnRfZ2V0YCAvIGBzdmNfeHBydF9wdXRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBmb3IgZnV6emluZy4KVGhlIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGlzIGZ1bmN0aW9uLCBldmVuIHRob3VnaCBzdGF0aWMsIGlzIHRoYXQgdGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBpdC4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBhZGRlZCBsb2dpYyBpdHNlbGYgc2hvdWxkIGJlIGluY2x1ZGVkLgoKV2UgY2FuIGluY2x1ZGUgYm90aCBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgYHN2Y19yZWN2YC4gU2luY2UgYHN2Y19oYW5kbGVfeHBydGAgaXNuJiMzOTt0IGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiB3aXRoaW4gYSBoZWFkZXIsIHdlIGNhbiB0YXJnZXQgaXQgc3BlY2lmaWNhbGx5LgoKRmluYWxseSwgd2UgaGF2ZSB0byBsb29rIGF0IGRlcGVuZGVuY2llcy4gVGhlIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgIGZpbGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfU1VOUlBDYCBpcyBzZWxlY3RlZCBieSBgTkZTRGAsIHdoaWNoIGRlcGVuZHMgb24gYE1VTFRJVVNFUmAuIFNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGNvbmZpZ3MgYXJlIGVuYWJsZWQgd2l0aGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LgoKSW4gc3VtbWFyeTogdGhlIHBhdGNoIGlzIHJlYWNoYWJsZTsgdGhlcmVmb3JlLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZTRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXG5mcy9uZnNkL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0zOS1cbmZzL25mc2QvS2NvbmZpZzo0MDpjb25maWcgTkZTRF9WMlxuZnMvbmZzZC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTUwLVxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTU0LVxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxuZnMvbmZzZC9LY29uZmlnLTU2LVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTc2LVxuZnMvbmZzZC9LY29uZmlnOjc3OmNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy05My1cbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXG5mcy9uZnNkL0tjb25maWctOTUtXHRib29sXG5mcy9uZnNkL0tjb25maWctOTYtXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTEwOS1cbmZzL25mc2QvS2NvbmZpZzoxMTA6Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTIzLVxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cdGJvb2wgXCYjMzQ7TkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNDAtXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXG5mcy9uZnNkL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNTAtXG5mcy9uZnNkL0tjb25maWc6MTUxOmNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNjMtXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbmZzL25mc2QvS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xNzktXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE5GU2QgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgdG9wIG9mIHRoZSBgZnMvbmZzZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GUyBzZXJ2ZXIga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgYmVkcm9jazsgaXQmIzM5O3MgZ29pbmcgdG8gZGVmaW5lIGhvdyB0aGUgd2hvbGUgdGhpbmcgaXMgYnVpbHQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgTkZTdjQgaXMgdGhlIGRlZmF1bHQsIGlmIGxlZ2FjeSB2ZXJzaW9ucyBhcmUgYWxzbyBpbmNsdWRlZCwgd2hhdCBzZWN1cml0eSBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBvZiBjb3Vyc2UsIHdoZXJlIGl0IGhvb2tzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgc2Vuc2libGUgZGVmYXVsdHMsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSBhbmQgcm9idXN0bHkgSSBjYW4gdGFpbG9yIHRoZSBORlMgc2VydmVyIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3Mg4oCTIGZyb20gZW1iZWRkZWQgc3lzdGVtcyB0byBoaWdoLXBlcmZvcm1hbmNlIHNlcnZlcnMuIEFueSB1bmV4cGVjdGVkIG9wdGlvbnMgb3IgY29uZnVzaW5nIGxvZ2ljIHdpbGwgaW1tZWRpYXRlbHkgcmFpc2UgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgbWFpbnRhaW5hYmlsaXR5IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyB0aW1lIHRvIHNlZSB3aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHJldmVhbHMgYWJvdXQgdGhlIE5GUyBzZXJ2ZXImIzM5O3MgZGVzaWduIHBoaWxvc29waHkgYW5kIGNvbmZpZ3VyYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGVhc3kgdG8gZ3Jvay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZTRFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdGRlcGVuZHMgb24gRklMRV9MT0NLSU5HXG4gICA2Olx0XHRkZXBlbmRzIG9uIEZTTk9USUZZXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fTElCX01ENSBpZiBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NiBpZiBORlNEX1Y0XG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPICMgcmVxdWlyZWQgYnkgUlBDU0VDX0dTU19LUkI1IGFuZCBzaWduZWQgZmlsZWhhbmRsZXNcbiAgMTE6XHRcdHNlbGVjdCBMT0NLRFxuICAxMjpcdFx0c2VsZWN0IFNVTlJQQ1xuICAxMzpcdFx0c2VsZWN0IEVYUE9SVEZTXG4gIDE0Olx0XHRzZWxlY3QgTkZTX0NPTU1PTlxuICAxNTpcdFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YyX0FDTFxuICAxNjpcdFx0c2VsZWN0IE5GU19BQ0xfU1VQUE9SVCBpZiBORlNEX1YzX0FDTFxuICAxNzpcdFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgQ2hvb3NlIFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhbGxvdyBvdGhlciBjb21wdXRlcnMgdG8gYWNjZXNzXG4gIDIwOlx0XHQgIGZpbGVzIHJlc2lkaW5nIG9uIHRoaXMgc3lzdGVtIHVzaW5nIFN1biYjMzk7cyBOZXR3b3JrIEZpbGUgU3lzdGVtXG4gIDIxOlx0XHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxuICAyMjpcdFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIFlvdSBtYXkgY2hvb3NlIHRvIHVzZSBhIHVzZXItc3BhY2UgTkZTIHNlcnZlciBpbnN0ZWFkLCBpbiB3aGljaFxuICAyNTpcdFx0ICBjYXNlIHlvdSBjYW4gY2hvb3NlIE4gaGVyZS5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgVG8gZXhwb3J0IGxvY2FsIGZpbGUgc3lzdGVtcyB1c2luZyBORlMsIHlvdSBhbHNvIG5lZWQgdG8gaW5zdGFsbFxuICAyODpcdFx0ICB1c2VyIHNwYWNlIHByb2dyYW1zIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXggbmZzLXV0aWxzXG4gIDI5Olx0XHQgIHBhY2thZ2UsIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9saW51eC1uZnMub3JnLy4gIE1vcmUgZGV0YWlsIGFib3V0XG4gIDMwOlx0XHQgIHRoZSBMaW51eCBORlMgc2VydmVyIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB2aWEgdGhlXG4gIDMxOlx0XHQgIGV4cG9ydHMoNSkgbWFuIHBhZ2UuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXG4gIDM0Olx0XHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxuICAzNTpcdFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDUyCgkJCQkJCQlvdXRwdXQ6IDIxNAoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCBgQ09ORklHX05GU0RgIGhhcyBhIGRlcGVuZGVuY3kgY2hhaW46IGBJTkVUYCwgYEZJTEVfTE9DS0lOR2AsIGBGU05PVElGWWAsIGFuZCBgTVVMVElVU0VSYCwgYW5kIGl0IGFsc28gc2VsZWN0cyBgU1VOUlBDYC4gQWx0ZXJuYXRpdmVseSwgYENPTkZJR19TVU5SUENgIGl0c2VsZiBpcyBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IGBORlNEYCwgYE5GU19GU2AsIGBMT0NLRGAsIGFuZCBvdGhlcnMuIFByb3ZpZGluZyBgU1VOUlBDYCBhbmQgYE5GU0RgIGFzIGBFbmFibGVDb25maWdzYCBpcyBhIGdvb2Qgc3RyYXRlZ2ljIG1vdmUsIGFzIGl0IGNvdmVycyBtdWx0aXBsZSBlbnRyeSBwb2ludHMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGZvY3VzZWQgdGhlIHByb3Bvc2VkIGNoYW5nZXMgYXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYHN2Y19oYW5kbGVfeHBydGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc2VsZWN0aW9uIG9mIHN5bWJvbHMgaXMgcHJlY2lzZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIAoKUmlnaHQsIGBzdmNfaGFuZGxlX3hwcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEl0cyBkaXJlY3QgY2FsbGVyIGlzIGBzdmNfcmVjdmAsIGFuZCBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBpcyByaWdodCB0aGVyZSBhbG9uZ3NpZGUgaXQuIFNvLCBjb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgc3ZjX2hhbmRsZV94cHJ0YCwgYHN2Y19yZWN2YCwgYW5kIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIGluIHRoZSBhbmFseXNpcy4gVGhlc2UgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBoaWdobHkgc3BlY2lmaWMgYW5kIG5vdCB1c2VkIHViaXF1aXRvdXNseSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBjbGVhci4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGBzdmNfaGFuZGxlX3hwcnQoKWAgaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIHdoZXJlIGl0IG5vdyBhY3F1aXJlcyBhIHRlbXBvcmFyeSB0cmFuc3BvcnQgcmVmZXJlbmNlICh1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgKSBhcm91bmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlLiBXaXRob3V0IHRoaXMsIHRoZSBhY2NlcHRlZCB0cmFuc3BvcnQgY291bGQgYmUgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCBmcmVlZCBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgY29uY3VycmVudGx5IGFmdGVyIGJlaW5nIGFkZGVkLCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgZXhlY3V0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgaGl0IGJ5IFNVTlJQQyBzZXJ2ZXIgbGlzdGVuZXJzIGxpa2UgTkZTRCBhbmQgbG9ja2Qgd2hlbiBhY2NlcHRpbmcgaW5jb21pbmcgUlBDIG5ldHdvcmsgY29ubmVjdGlvbnMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGNvcnJ1cHRpb24gdW5kZXIgY29uY3VycmVudCBjb25uZWN0L2Rpc2Nvbm5lY3Qgc2NlbmFyaW9zLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgYXBwcm9hY2ggaXMgc291bmQsIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGFwcHJvcHJpYXRlLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgbG9naWMsIGFuZCBpdCBmdWxmaWxscyB0aGUgcmVxdWlyZW1lbnRzLiBMZXQmIzM5O3Mgc2lnbmFsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVU5SUEMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19oYW5kbGVfeHBydCYjMzQ7LAogICAgJiMzNDtzdmNfcmVjdiYjMzQ7LAogICAgJiMzNDtzdmNfYWRkX25ld190ZW1wX3hwcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3ZjX2hhbmRsZV94cHJ0KCkgaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jIGJ5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAodmlhIHN2Y194cHJ0X2dldC9wdXQpIGFjcm9zcyBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBhbmQgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZS9VQUYgd2hlcmUgdGhlIHRyYW5zcG9ydCBtaWdodCBiZSBjbG9zZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgcnVucy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBjb3JlIGtlcm5lbCBSUEMgbmV0d29ya2luZyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gaW5jb21pbmcgY29ubmVjdGlvbnMgYXJlIGFjY2VwdGVkIG9uIFNVTlJQQyBsaXN0ZW5lciBzb2NrZXRzIChlLmcuLCBORlNELCBsb2NrZCkuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gdGVzdCB0cmFuc3BvcnQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdmNfaGFuZGxlX3hwcnQmIzM0OywKICAgICYjMzQ7c3ZjX3JlY3YmIzM0OywKICAgICYjMzQ7c3ZjX2FkZF9uZXdfdGVtcF94cHJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmM6c3ZjX2hhbmRsZV94cHJ0KCkuIE9uY2Ugc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgaXMgY2FsbGVkLCB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0IChuZXd4cHQpIGNhbiBiZSBwcm9jZXNzZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIGZpbmlzaGVzIGFjY2Vzc2luZyBpdC4gQnkgdGFraW5nIGEgcmVmZXJlbmNlIHdpdGggc3ZjX3hwcnRfZ2V0KCkgYmVmb3JlIGFkZGluZyB0aGUgdHJhbnNwb3J0IGFuZCByZWxlYXNpbmcgaXQgd2l0aCBzdmNfeHBydF9wdXQoKSBhZnRlcndhcmRzLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSB0cmFuc3BvcnQgcG9pbnRlciByZW1haW5zIHZhbGlkIGR1cmluZyB0aGUgdHJhY2Vwb2ludCBjYWxsLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E3Y2Q4OTk4ODFiNWJiMjYzYzE1YjIyNjRhMjVhMDI4NWVhZTY3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE0OjU5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IDQwMDQwYWY1ODhmYjIuLjkzNzA0MDE0NjNiNmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTg1Miw4ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCiAJCW5ld3hwdCA9IHhwcnQtJmd0O3hwdF9vcHMtJmd0O3hwb19hY2NlcHQoeHBydCk7CiAJCWlmIChuZXd4cHQpIHsKIAkJCW5ld3hwdC0mZ3Q7eHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LSZndDt4cHRfY3JlZCk7CiYjNDM7CQkJc3ZjX3hwcnRfZ2V0KG5ld3hwdCk7CiAJCQlzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTsKIAkJCXRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtJmd0O3N2X25hbWUpOwomIzQzOwkJCXN2Y194cHJ0X3B1dChuZXd4cHQpOwogCQl9IGVsc2UgewogCQkJbW9kdWxlX3B1dCh4cHJ0LSZndDt4cHRfY2xhc3MtJmd0O3hjbF9vd25lcik7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUlBDIFRyYW5zcG9ydCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgYXJvdW5kIHRoZSBgc3ZjX2hhbmRsZV94cHJ0YCBmdW5jdGlvbiBhbmQgaXRzIGhhbmRsaW5nIG9mIGFjY2VwdGVkIHRyYW5zcG9ydCBlbmRwb2ludHMuIFRoZSBjaGFuZ2UgaXMgaW5zZXJ0aW5nIGBzdmNfeHBydF9nZXQoKWAgYW5kIGBzdmNfeHBydF9wdXQoKWAgY2FsbHMgYXJvdW5kIHRoZSBuZXdseSBjcmVhdGVkIGBuZXd4cHRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBuZXcgdHJhbnNwb3J0IGVuZHBvaW50IG1vcmUgY2FyZWZ1bGx5LgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHdlcmUganVzdCBnZXR0aW5nIHRoZSBjcmVkZW50aWFsLCBhZGRpbmcgaXQgYXMgYSB0ZW1wb3JhcnkgdHJhbnNwb3J0LCBhbmQgdHJhY2luZyB0aGUgYWNjZXB0YW5jZS4gTm93LCB3ZSYjMzk7cmUgZXhwbGljaXRseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIHJpZ2h0IGFmdGVyIGdldHRpbmcgdGhlIG5ldyB0cmFuc3BvcnQsIGFuZCBkZWNyZW1lbnRpbmcgaXQsIHdpdGggYHN2Y194cHJ0X3B1dCgpYCwgYWZ0ZXIgYWRkaW5nIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0LiBUaGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgY2FsbCBsb29rcyBsaWtlIGl0IGlzIGJldHdlZW4gdGhlIGBnZXRgIGFuZCB0aGUgYHB1dGAuIEkgd29uZGVyIGlmIHRoZXJlIHdhcyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZGVudGlmaWVkLCBsZWFkaW5nIHRvIHRoaXMgYWRkaXRpb24uCgpJIGFzc3VtZSB0aGUgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGUgYG5ld3hwdGAgaXNuJiMzOTt0IHByZW1hdHVyZWx5IHJlbGVhc2VkIGJ5IHRoZSBzeXN0ZW0gd2hpbGUgaXQmIzM5O3MgYmVpbmcgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgc2VydmVyJiMzOTtzIHRlbXBvcmFyeSB0cmFuc3BvcnQgbGlzdC4gVGhlIGBtb2R1bGVfcHV0YCBjYWxsIGluIHRoZSBgZWxzZWAgYnJhbmNoIHJlbWFpbnMsIHNvIGlmIHRoZSB0cmFuc3BvcnQgaXNuJiMzOTt0IGFjY2VwdGVkLCB0aGUgbW9kdWxlIGlzIHN0aWxsIHJlbGVhc2VkLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgZ2V0X2NyZWRgIGxvb2tzIGxpa2UgaXQgc3RpbGwgbWFuYWdlcyB0aGUgY3JlZGVudGlhbHMsIGFuZCB0aGUgbmV3IHRyYW5zcG9ydCBkb2VzIGdldCBpdHMgY3JlZGVudGlhbHMuIFRoaXMgaXMgc3RhbmRhcmQsIGJ1dCB0aGUgZG91YmxlIGBnZXRgIGFuZCBgcHV0YCBpcyBhIG5ldyB0b3VjaC4KCkkmIzM5O2Qgd2FudCB0byBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZGlzY3Vzc2lvbnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlLCBidXQgbXkgaW1tZWRpYXRlIGd1ZXNzIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgd2l0aCBob3cgdGhlIHRyYW5zcG9ydCBlbmRwb2ludCBsaWZldGltZSBpcyBtYW5hZ2VkLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdGVtcG9yYXJ5IHRyYW5zcG9ydCBsaXN0LiBXZSYjMzk7cmUgZXhwbGljaXRseSBjb250cm9sbGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHByb3RlY3QgdGhlIHRyYW5zcG9ydCBkdXJpbmcgaXRzIGxpZmVjeWNsZS4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBtYW5hZ2luZyBsaWZldGltZXMgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xuIDg0MTpcdFx0XHQvKiBMZWF2ZSBYUFRfQlVTWSBzZXQgb24gdGhlIGRlYWQgeHBydDogKi9cbiA4NDI6XHRcdFx0Z290byBvdXQ7XG4gODQzOlx0XHR9XG4gODQ0Olx0XHRpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCBcdTAwMjZ4cHJ0LVx1MDAzZXhwdF9mbGFncykpIHtcbiA4NDU6XHRcdFx0c3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7XG4gODQ2Olx0XHRcdC8qXG4gODQ3Olx0XHRcdCAqIFdlIGtub3cgdGhpcyBtb2R1bGVfZ2V0IHdpbGwgc3VjY2VlZCBiZWNhdXNlIHRoZVxuIDg0ODpcdFx0XHQgKiBsaXN0ZW5lciBob2xkcyBhIHJlZmVyZW5jZSB0b29cbiA4NDk6XHRcdFx0ICovXG4gODUwOlx0XHRcdF9fbW9kdWxlX2dldCh4cHJ0LVx1MDAzZXhwdF9jbGFzcy1cdTAwM2V4Y2xfb3duZXIpO1xuIDg1MTpcdFx0XHRzdmNfY2hlY2tfY29ubl9saW1pdHMoeHBydC1cdTAwM2V4cHRfc2VydmVyKTtcbiA4NTI6XHRcdFx0bmV3eHB0ID0geHBydC1cdTAwM2V4cHRfb3BzLVx1MDAzZXhwb19hY2NlcHQoeHBydCk7XG4gODUzOlx0XHRcdGlmIChuZXd4cHQpIHtcbiA4NTQ6XHRcdFx0XHRuZXd4cHQtXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVx1MDAzZXhwdF9jcmVkKTtcbiA4NTU6XHRcdFx0XHRzdmNfeHBydF9nZXQobmV3eHB0KTtcbiA4NTY6XHRcdFx0XHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcbiA4NTc6XHRcdFx0XHR0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuIDg1ODpcdFx0XHRcdHN2Y194cHJ0X3B1dChuZXd4cHQpO1xuIDg1OTpcdFx0XHR9IGVsc2Uge1xuIDg2MDpcdFx0XHRcdG1vZHVsZV9wdXQoeHBydC1cdTAwM2V4cHRfY2xhc3MtXHUwMDNleGNsX293bmVyKTtcbiA4NjE6XHRcdFx0fVxuIDg2MjpcdFx0XHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcbiA4NjM6XHRcdH0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODY0Olx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9faGFuZHNoYWtlKHhwcnQpO1xuIDg2NTpcdFx0XHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcbiA4NjY6XHRcdH0gZWxzZSBpZiAoc3ZjX3hwcnRfcmVzZXJ2ZV9zbG90KHJxc3RwLCB4cHJ0KSkge1xuIDg2NzpcdFx0XHQvKiBYUFRfREFUQXxYUFRfREVGRVJSRUQgY2FzZTogKi9cbiA4Njg6XHRcdFx0cnFzdHAtXHUwMDNlcnFfZGVmZXJyZWQgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KTtcbiA4Njk6XHRcdFx0aWYgKHJxc3RwLVx1MDAzZXJxX2RlZmVycmVkKVxuIDg3MDpcdFx0XHRcdGxlbiA9IHN2Y19kZWZlcnJlZF9yZWN2KHJxc3RwKTtcbiA4NzE6XHRcdFx0ZWxzZVxuIDg3MjpcdFx0XHRcdGxlbiA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fcmVjdmZyb20ocnFzdHApO1xuIDg3MzpcdFx0XHRycXN0cC1cdTAwM2VycV9yZXNlcnZlZCA9IHNlcnYtXHUwMDNlc3ZfbWF4X21lc2c7XG4gODc0Olx0XHRcdGF0b21pY19hZGQocnFzdHAtXHUwMDNlcnFfcmVzZXJ2ZWQsIFx1MDAyNnhwcnQtXHUwMDNleHB0X3Jlc2VydmVkKTtcbiA4NzU6XHRcdFx0aWYgKGxlbiBcdTAwM2M9IDApXG4gODc2Olx0XHRcdFx0Z290byBvdXQ7XG4gODc3Olx0XG4gODc4Olx0XHRcdHRyYWNlX3N2Y194ZHJfcmVjdmZyb20oXHUwMDI2cnFzdHAtXHUwMDNlcnFfYXJnKTtcbiA4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBzdmNcX2FkZFxfbmV3XF90ZW1wXF94cHJ0IGFuZCB0aGUgc3ZjXF94cHJ0IGZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaW4gdGhpcyBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhlIGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBmdW5jdGlvbnMgd2VyZSBpbnRyb2R1Y2VkIGludG8gdGhpcyBhcmVhLiBXaGF0IHByb2JsZW0gd2VyZSB0aGV5IGRlc2lnbmVkIHRvIHNvbHZlPyBJcyBpdCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHRocmVhZCBzYWZldHksIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwcm90b2NvbCBoYW5kbGluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIHRob3NlIGFkZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHRocm91Z2gsIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSBpdCBiYWNrIHRvIHNlZSB3aGF0IHRyaWdnZXJlZCB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdG8gYmVnaW4gd2l0aC4gVGhlICYjMzQ7d2h5JiMzNDsgaXMgdGhlIGtleSBkcml2ZXIgaGVyZSwgc28gSSYjMzk7bSBub3Qgb25seSBmb2N1c2luZyBvbiB0aGUgJiMzNDt3aGF0LiYjMzQ7IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE1LVxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gc3ZjX3hwcnQuYzogQSBTcGVjaWZpYyBTZWN0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIGxpbmVzIDgxMCB0byA4NDUuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8uLi4gd2VsbCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYHN2Y194cHJ0YCwgcHJvYmFibHkgdHJhbnNwb3J0LWxheWVyIGhhbmRsaW5nIG9yIHNvbWUgYXNwZWN0IG9mIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gSSBzdXNwZWN0IGl0IG1pZ2h0IGRlYWwgd2l0aCB0aGUgbGlmZWN5Y2xlIG9mIGEgcGFydGljdWxhciBSUEMgdHJhbnNhY3Rpb24sIG1heWJlIGNvbm5lY3Rpb24gc2V0dXAsIHRlYXItZG93biwgb3IgZXZlbiBlcnJvciBoYW5kbGluZy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBhbmQgd2hhdCB0aGlzIHNlY3Rpb24gaXMgcmVhbGx5IHJlc3BvbnNpYmxlIGZvci4gVGltZSB0byBnbyBsaW5lLWJ5LWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmNfeHBydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODExOlx0XHR9XG4gODEyOlx0XHR0cnlfdG9fZnJlZXplKCk7XG4gODEzOlx0XHRyZXR1cm4gZGlkX3RpbWVvdXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxuIDgxNzpcdHtcbiA4MTg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZXJ2LVx1MDAzZXN2X2xvY2spO1xuIDgxOTpcdFx0c2V0X2JpdChYUFRfVEVNUCwgXHUwMDI2bmV3eHB0LVx1MDAzZXhwdF9mbGFncyk7XG4gODIwOlx0XHRsaXN0X2FkZChcdTAwMjZuZXd4cHQtXHUwMDNleHB0X2xpc3QsIFx1MDAyNnNlcnYtXHUwMDNlc3ZfdGVtcHNvY2tzKTtcbiA4MjE6XHRcdHNlcnYtXHUwMDNlc3ZfdG1wY250JiM0MzsmIzQzOztcbiA4MjI6XHRcdGlmIChzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XG4gODIzOlx0XHRcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cbiA4MjQ6XHRcdFx0c2Vydi1cdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XG4gODI1Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzZXJ2LVx1MDAzZXN2X3RlbXB0aW1lcixcbiA4MjY6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcbiA4Mjc6XHRcdH1cbiA4Mjg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlcnYtXHUwMDNlc3ZfbG9jayk7XG4gODI5Olx0XHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xuIDgzMDpcdH1cbiA4MzE6XHRcbiA4MzI6XHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDgzMzpcdHtcbiA4MzQ6XHRcdHN0cnVjdCBzdmNfc2VydiAqc2VydiA9IHJxc3RwLVx1MDAzZXJxX3NlcnZlcjtcbiA4MzU6XHRcdGludCBsZW4gPSAwO1xuIDgzNjpcdFxuIDgzNzpcdFx0aWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4gODM4Olx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWFBUX0tJTExfVEVNUCwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKVxuIDgzOTpcdFx0XHRcdHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fa2lsbF90ZW1wX3hwcnQoeHBydCk7XG4gODQwOlx0XHRcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcbiA4NDE6XHRcdFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXG4gODQyOlx0XHRcdGdvdG8gb3V0O1xuIDg0MzpcdFx0fVxuIDg0NDpcdFx0aWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgXHUwMDI2eHBydC1cdTAwM2V4cHRfZmxhZ3MpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIFVBRiBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgY2FsbHMgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGBuZXd4cHRgIGlzIGVzc2VudGlhbGx5IHJlbGVhc2VkIGludG8gdGhlIHdpbGQgd2l0aCB0aGF0IGNhbGwuIEl0IGNhbiB0aGVuIGJlIHBpY2tlZCB1cCBieSBhbm90aGVyIHRocmVhZCwgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCAqZnJlZWQqIOKAkyBhbGwgYmVmb3JlIGB0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LSZndDtzdl9uYW1lKWAgZXZlbiBnZXRzIGEgY2hhbmNlIHRvIHJ1biEgVGhhdCYjMzk7cyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIG1lYW5zIGB0cmFjZV9zdmNfeHBydF9hY2NlcHRgIHdhcyBhY2Nlc3NpbmcgYG5ld3hwdGAgKmFmdGVyKiBpdCBjb3VsZCBoYXZlIGJlZW4gZnJlZWQsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KClRoZSBmaXggaXMgZWxlZ2FudDogd3JhcCB0aGUgY2FsbCB0byBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3aXRoIGBzdmNfeHBydF9nZXQobmV3eHB0KWAgYW5kIGBzdmNfeHBydF9wdXQobmV3eHB0KWAuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBgbmV3eHB0YCAqYmVmb3JlKiBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byBvdGhlciB0aHJlYWRzLCBndWFyYW50ZWVpbmcgaXQmIzM5O3MgYWxpdmUgd2hpbGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgZXhlY3V0ZXMsIGFuZCB0aGVuIHJlbGVhc2VzIHRoZSByZWZlcmVuY2Ugd2hlbiBkb25lLiAgU2ltcGxlLCBlZmZlY3RpdmUsIGFuZCBpdCBhZGRyZXNzZXMgdGhlIHJvb3QgY2F1c2UgZGlyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBiZSB0aG9yb3VnaCBhbmQgYW5hbHl6ZSBpZiB0aGUgZml4IGludHJvZHVjZXMgYW55IG90aGVyIHByb2JsZW1zLiBBcmUgdGhlcmUgYW55IHJpc2tzIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gR2l2ZW4gbXkga25vd2xlZGdlLCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoZSBhbnN3ZXIgaXMgbm8sIGJ1dCBhIHF1aWNrIHJldmlldyBpcyBhbHdheXMgYSBnb29kIGlkZWEuICBJdCBsb29rcyBsaWtlOgoKKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuCiogICBObyBjb25kaXRpb25hbHMgb3IgYnJhbmNoaW5nIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2l0aG91dCB6ZXJvaW5nLgoqICAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaGF2ZSBiZWVuIGFsdGVyZWQgdG8gcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlIGZpeCBvbmx5IHJlbGllcyBvbiBnZXR0aW5nIGFuZCByZWxlYXNpbmcgYSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHN2Y194cHJ0X2dldGAgYW5kIGBzdmNfeHBydF9wdXRgIGFyb3VuZCB0aGUgdHJhY2Vwb2ludC4KCldlJiMzOTtyZSBqdXN0IG1hbmlwdWxhdGluZyBhIHJlZmVyZW5jZSBjb3VudCBhbmQgdXNpbmcgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgc28gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgZml4IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gSG93ZXZlciwgSSBzaG91bGQgcHJvYmFibHkgYnJpZWZseSByZXZpZXcgYHN2Y194cHJ0X2dldGAgYW5kIGBzdmNfeHBydF9wdXRgIGp1c3QgdG8gYmUgY2VydGFpbi4gQnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBwYXRjaCB0byBzb2x2ZSBhIGNyaXRpY2FsIG1lbW9yeSBzYWZldHkgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0Lmg9MTg4PXZvaWRcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7XG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE4OS1cbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0Lmg6MTkwOnN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaC0xOTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzEzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYHN2Y194cHJ0LmhgIGF0IExpbmUgMTkwKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0IG9mIHRoZSBSUEMgaW5mcmFzdHJ1Y3R1cmUgd29ya3MuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc3ZjX3hwcnQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0cmFuc3BvcnQgbGF5ZXIgaGFuZGxpbmcuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBzb21ldGhpbmcgdGhhdCBkZWZpbmVzIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsuIE1heWJlIEkmIzM5O2xsIGZpbmQgYSBkYXRhIHN0cnVjdHVyZSBmb3IgYSB0cmFuc3BvcnQgaGFuZGxlLCBvciBwb3NzaWJseSBzb21lIGtleSBtYWNyb3MgZm9yIGRpc3BhdGNoaW5nIGNhbGxzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODg6XHR2b2lkXHRzdmNfeHBydF9kZWZlcnJlZF9jbG9zZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpO1xuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIDE5MTpcdHtcbiAxOTI6XHRcdGtyZWZfZ2V0KFx1MDAyNnhwcnQtXHUwMDNleHB0X3JlZik7XG4gMTkzOlx0fVxuIDE5NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfbG9jYWwoc3RydWN0IHN2Y194cHJ0ICp4cHJ0LFxuIDE5NTpcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSxcbiAxOTY6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHNpemVfdCBzYWxlbilcbiAxOTc6XHR7XG4gMTk4Olx0XHRtZW1jcHkoXHUwMDI2eHBydC1cdTAwM2V4cHRfbG9jYWwsIHNhLCBzYWxlbik7XG4gMTk5Olx0XHR4cHJ0LVx1MDAzZXhwdF9sb2NhbGxlbiA9IHNhbGVuO1xuIDIwMDpcdH1cbiAyMDE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3hwcnRfc2V0X3JlbW90ZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQsXG4gMjAyOlx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSxcbiAyMDM6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzaXplX3Qgc2FsZW4pXG4gMjA0Olx0e1xuIDIwNTpcdFx0bWVtY3B5KFx1MDAyNnhwcnQtXHUwMDNleHB0X3JlbW90ZSwgc2EsIHNhbGVuKTtcbiAyMDY6XHRcdHhwcnQtXHUwMDNleHB0X3JlbW90ZWxlbiA9IHNhbGVuO1xuIDIwNzpcdFx0c25wcmludGYoeHBydC1cdTAwM2V4cHRfcmVtb3RlYnVmLCBzaXplb2YoeHBydC1cdTAwM2V4cHRfcmVtb3RlYnVmKSAtIDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjYKCQkJCQkJCW91dHB1dDogMjMxCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4OiBgc3ZjX3hwcnRfZ2V0YCBpcyBiZWluZyBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHN2Y194cHJ0X3B1dCgpYCBhZnRlciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgLiAgQmFzaWNhbGx5LCBhIHNpbXBsZSByZWZlcmVuY2UgY291bnQgbWFuaXB1bGF0aW9uLiAgYHN2Y194cHJ0X2dldGAganVzdCBkb2VzIGEgYGtyZWZfZ2V0YCwgYW5kIGBzdmNfeHBydF9wdXRgIGNhbGxzIGBrcmVmX3B1dGAgd2l0aCB0aGUgYHN2Y194cHJ0X3JlbGVhc2VgIGNhbGxiYWNrLgoKVGhlIHByb2JsZW0gdGhpcyBpcyBtZWFudCB0byBhZGRyZXNzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbjogYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBgbmV3eHB0YCBtaWdodCBnZXQgZGVzdHJveWVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgIHJ1bnMuICBUaGlzIHJlZmVyZW5jZSBjb3VudGluZyBpcyBtZWFudCB0byBwcmV2ZW50IHRoYXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55PyAgQWJzb2x1dGVseSBub3QuIFRoaXMgaXMgc3F1YXJlbHkgaW4gS0FTQU4mIzM5O3MgZG9tYWluLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIEtBU0FOIGlzIGJ1aWx0IGZvciB0aGF0LiAgVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgbWVtb3J5IGxlYWtzIGhlcmUuIEFueSByZWZjb3VudCBwcm9ibGVtcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIHJlZmNvdW50X3Qgc2FuaXR5IGNoZWNrcyBhbmQgU0xVQiBkZWJ1ZyBmZWF0dXJlcy4gS01TQU4gd291bGRuJiMzOTt0IG9mZmVyIGFueSB1bmlxdWUgdmFsdWUgaW4gZGV0ZWN0aW5nIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgZmFsc2UuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIGNsZWFuLCBuZWNlc3NhcnkgZml4LCBhbmQgaXQmIzM5O3Mgd2l0aGluIHRoZSByZW1pdCBvZiBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG9iamVjdCBsaWZldGltZSAoVUFGIHByZXZlbnRpb24pLiBMaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIxLjE3OTQ2NDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNTk3MzQ4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIxLjE3OTQ2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI2MDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTQ6NTk6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXFxuaW5kZXggNDAwNDBhZjU4OGZiMi4uOTM3MDQwMTQ2M2I2YSAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmNcXG4rKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcXG5AQCAtODUyLDggKzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiBcXHRcXHRuZXd4cHQgPSB4cHJ0LVxcdTAwM2V4cHRfb3BzLVxcdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xcbiBcXHRcXHRpZiAobmV3eHB0KSB7XFxuIFxcdFxcdFxcdG5ld3hwdC1cXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVxcdTAwM2V4cHRfY3JlZCk7XFxuK1xcdFxcdFxcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xcbiBcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG4gXFx0XFx0XFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cXHUwMDNlc3ZfbmFtZSk7XFxuK1xcdFxcdFxcdHN2Y194cHJ0X3B1dChuZXd4cHQpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRtb2R1bGVfcHV0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OToyMi41Mjc0MDM3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyNDEzMzQzNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E3Y2Q4OTk4ODFiNWJiMjYzYzE1YjIyNjRhMjVhMDI4NWVhZTY3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE0OjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5pbmRleCA0MDA0MGFmNTg4ZmIyLi45MzcwNDAxNDYzYjZhIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG4rKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmNcbkBAIC04NTIsOCArODUyLDEwIEBAIHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXG4gXHRcdG5ld3hwdCA9IHhwcnQtXHUwMDNleHB0X29wcy1cdTAwM2V4cG9fYWNjZXB0KHhwcnQpO1xuIFx0XHRpZiAobmV3eHB0KSB7XG4gXHRcdFx0bmV3eHB0LVx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cdTAwM2V4cHRfY3JlZCk7XG4rXHRcdFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XG4gXHRcdFx0c3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG4gXHRcdFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cdTAwM2Vzdl9uYW1lKTtcbitcdFx0XHRzdmNfeHBydF9wdXQobmV3eHB0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRtb2R1bGVfcHV0KHhwcnQtXHUwMDNleHB0X2NsYXNzLVx1MDAzZXhjbF9vd25lcik7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE0OjU5OjIyLjUyNzQwNTM4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTQzMDM5ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgQU1ENjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBJIHNlZSBpdCdzIGEgZGlmZiwgd2hpY2ggbWFrZXMgdGhpbmdzIGVhc2llci4gSXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gYXBwbGllZCBieSBhIHN5ei1jbHVzdGVyIGJvdCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGEgYnVnIGZpeCBvciBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvc3VucnBjL3N2Y194cHJ0LmNgLiBJdCdzIHJlbGF0ZWQgdG8gdGhlIGBzdmNfaGFuZGxlX3hwcnRgIGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBuZXcgYHN2Y194cHJ0X2dldGAgY2FsbCBhZGRlZCBiZWZvcmUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgYW5kIGEgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAuIFRoaXMgaXMgZ29vZCwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3NzaWJsZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIFNwZWNpZmljYWxseSwgaXQncyBvcGVyYXRpbmcgb24gYG5ld3hwdGAuXG5cbkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpY2F0aW9ucyBvZiBgc3ZjX3hwcnRfZ2V0YCBvciBgc3ZjX3hwcnRfcHV0YC4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93IGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgaG93IGBzdmNfeHBydGAgb2JqZWN0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBvdGhlciB1c2VzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSwgcmVsYXRlZCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTQ6NTk6NDYuNjcwNDQ4MTI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHR9XFxuIDgzMTpcXHRcXG4gODMyOlxcdHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuIDgzMzpcXHR7XFxuIDgzNDpcXHRcXHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBycXN0cC1cXHUwMDNlcnFfc2VydmVyO1xcbiA4MzU6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDgzODpcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFhQVF9LSUxMX1RFTVAsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKVxcbiA4Mzk6XFx0XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2tpbGxfdGVtcF94cHJ0KHhwcnQpO1xcbiA4NDA6XFx0XFx0XFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xcbiA4NDE6XFx0XFx0XFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXFxuIDg0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDg0NTpcXHRcXHRcXHRzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdDtcXG4gODQ2OlxcdFxcdFxcdC8qXFxuIDg0NzpcXHRcXHRcXHQgKiBXZSBrbm93IHRoaXMgbW9kdWxlX2dldCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSB0aGVcXG4gODQ4OlxcdFxcdFxcdCAqIGxpc3RlbmVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvb1xcbiA4NDk6XFx0XFx0XFx0ICovXFxuIDg1MDpcXHRcXHRcXHRfX21vZHVsZV9nZXQoeHBydC1cXHUwMDNleHB0X2NsYXNzLVxcdTAwM2V4Y2xfb3duZXIpO1xcbiA4NTE6XFx0XFx0XFx0c3ZjX2NoZWNrX2Nvbm5fbGltaXRzKHhwcnQtXFx1MDAzZXhwdF9zZXJ2ZXIpO1xcbiA4NTI6XFx0XFx0XFx0bmV3eHB0ID0geHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcXG4gODUzOlxcdFxcdFxcdGlmIChuZXd4cHQpIHtcXG4gODU0OlxcdFxcdFxcdFxcdG5ld3hwdC1cXHUwMDNleHB0X2NyZWQgPSBnZXRfY3JlZCh4cHJ0LVxcdTAwM2V4cHRfY3JlZCk7XFxuIDg1NTpcXHRcXHRcXHRcXHRzdmNfeHBydF9nZXQobmV3eHB0KTtcXG4gODU2OlxcdFxcdFxcdFxcdHN2Y19hZGRfbmV3X3RlbXBfeHBydChzZXJ2LCBuZXd4cHQpO1xcbiA4NTc6XFx0XFx0XFx0XFx0dHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KG5ld3hwdCwgc2Vydi1cXHUwMDNlc3ZfbmFtZSk7XFxuIDg1ODpcXHRcXHRcXHRcXHRzdmNfeHBydF9wdXQobmV3eHB0KTtcXG4gODU5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg2MDpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gODYxOlxcdFxcdFxcdH1cXG4gODYyOlxcdFxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKHhwcnQpO1xcbiA4NjM6XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChYUFRfSEFORFNIQUtFLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X2ZsYWdzKSkge1xcbiA4NjQ6XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2hhbmRzaGFrZSh4cHJ0KTtcXG4gODY1OlxcdFxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKHhwcnQpO1xcbiA4NjY6XFx0XFx0fSBlbHNlIGlmIChzdmNfeHBydF9yZXNlcnZlX3Nsb3QocnFzdHAsIHhwcnQpKSB7XFxuIDg2NzpcXHRcXHRcXHQvKiBYUFRfREFUQXxYUFRfREVGRVJSRUQgY2FzZTogKi9cXG4gODY4OlxcdFxcdFxcdHJxc3RwLVxcdTAwM2VycV9kZWZlcnJlZCA9IHN2Y19kZWZlcnJlZF9kZXF1ZXVlKHhwcnQpO1xcbiA4Njk6XFx0XFx0XFx0aWYgKHJxc3RwLVxcdTAwM2VycV9kZWZlcnJlZClcXG4gODcwOlxcdFxcdFxcdFxcdGxlbiA9IHN2Y19kZWZlcnJlZF9yZWN2KHJxc3RwKTtcXG4gODcxOlxcdFxcdFxcdGVsc2VcXG4gODcyOlxcdFxcdFxcdFxcdGxlbiA9IHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19yZWN2ZnJvbShycXN0cCk7XFxuIDg3MzpcXHRcXHRcXHRycXN0cC1cXHUwMDNlcnFfcmVzZXJ2ZWQgPSBzZXJ2LVxcdTAwM2Vzdl9tYXhfbWVzZztcXG4gODc0OlxcdFxcdFxcdGF0b21pY19hZGQocnFzdHAtXFx1MDAzZXJxX3Jlc2VydmVkLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X3Jlc2VydmVkKTtcXG4gODc1OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gMClcXG4gODc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRcXHR0cmFjZV9zdmNfeGRyX3JlY3Zmcm9tKFxcdTAwMjZycXN0cC1cXHUwMDNlcnFfYXJnKTtcXG4gODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo0Ni42NzA1NDcyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODAxMzMwNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFB1cnBvc2Ugb2YgVGhpcyBQYXRjaCBhbmQgdGhlIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgbW9kaWZpY2F0aW9ucyBpdCBicmluZ3MgdG8gdGhlIGV4aXN0aW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBmdW5jdGlvbi4gVGltZSB0byByZWFkIHRocm91Z2ggaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1My40NzE4ODAyMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTc4MTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdmNfYWRkX25ld190ZW1wX3hwcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jPTc4ND1zdGF0aWMgYm9vbCBzdmNfdGhyZWFkX3dhaXRfZm9yX3dvcmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgbG9uZyB0aW1lbylcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTUtXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjgxNjpzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODE3LXtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYz04MzI9c3RhdGljIHZvaWQgc3ZjX2hhbmRsZV94cHJ0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04NTUtXFx0XFx0XFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjg1NjpcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtODU3LVxcdFxcdFxcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXFx1MDAzZXN2X25hbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1NC45MzE2NjY5NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjMxNDM1ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIFJQQyBUcmFuc3BvcnQgTGlmZWN5Y2xlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIGxpbmVzIDgxMC04MzUgb2YgYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gaGFuZGxlcyB0aGUgbGlmZWN5Y2xlIG9mIGFuIFJQQyB0cmFuc3BvcnQuIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgd2UncmUgZ29pbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRlYWxzIHdpdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zLCByZWdpc3RyYXRpb24sIGRlLXJlZ2lzdHJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB0cmFuc3BvcnQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgY29kZSBibG9jayBpcyBwcm9iYWJseSBpbnRyaWNhdGVseSBsaW5rZWQgdG8gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gZGV0YWlsLiBXaGF0IEknbSBsb29raW5nIGZvciBpcyB0aGUgZmxvdyBvZiBldmVudHMsIGhvdyB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB1c2VkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkLCBhbmQgdWx0aW1hdGVseSwgaG93IHJlcXVlc3RzIGFuZCByZXBsaWVzIGFyZSBxdWV1ZWQuIEknbSBrZWVuIHRvIHNlZSB3aGV0aGVyIHRoaXMgc2VjdGlvbiBjb3ZlcnMgdGhlIFJQQyBsYXllcidzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yaywgYW5kIEknbSBwcmVwYXJlZCBmb3IgdGhpcyB0byBpbnZvbHZlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNvY2tldCBtYW5hZ2VtZW50LiBJIGV4cGVjdCBhIGxvdCBvZiBgc3Bpbl9sb2NrYCBhbmQgYG11dGV4YCB1c2FnZSwgZ2l2ZW4gaXQncyB0aGUgUlBDIGNvcmUuIEFuZCBJIGJldCB0aGVyZSBhcmUgc29tZSBzdWJ0bGV0aWVzIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBoZXJlIHRvby4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNDo1OTo1Ny4xNjMxMzI0NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N1bnJwYy9zdmNfeHBydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gODExOlxcdFxcdH1cXG4gODEyOlxcdFxcdHRyeV90b19mcmVlemUoKTtcXG4gODEzOlxcdFxcdHJldHVybiBkaWRfdGltZW91dDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0c3RhdGljIHZvaWQgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y194cHJ0ICpuZXd4cHQpXFxuIDgxNzpcXHR7XFxuIDgxODpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNlcnYtXFx1MDAzZXN2X2xvY2spO1xcbiA4MTk6XFx0XFx0c2V0X2JpdChYUFRfVEVNUCwgXFx1MDAyNm5ld3hwdC1cXHUwMDNleHB0X2ZsYWdzKTtcXG4gODIwOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXd4cHQtXFx1MDAzZXhwdF9saXN0LCBcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfdGVtcHNvY2tzKTtcXG4gODIxOlxcdFxcdHNlcnYtXFx1MDAzZXN2X3RtcGNudCsrO1xcbiA4MjI6XFx0XFx0aWYgKHNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7XFxuIDgyMzpcXHRcXHRcXHQvKiBzZXR1cCB0aW1lciB0byBhZ2UgdGVtcCB0cmFuc3BvcnRzICovXFxuIDgyNDpcXHRcXHRcXHRzZXJ2LVxcdTAwM2Vzdl90ZW1wdGltZXIuZnVuY3Rpb24gPSBzdmNfYWdlX3RlbXBfeHBydHM7XFxuIDgyNTpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lcixcXG4gODI2OlxcdFxcdFxcdFxcdCAgamlmZmllcyArIHN2Y19jb25uX2FnZV9wZXJpb2QgKiBIWik7XFxuIDgyNzpcXHRcXHR9XFxuIDgyODpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfbG9jayk7XFxuIDgyOTpcXHRcXHRzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpO1xcbiA4MzA6XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiA4MzM6XFx0e1xcbiA4MzQ6XFx0XFx0c3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gcnFzdHAtXFx1MDAzZXJxX3NlcnZlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTQ6NTk6NTcuMTYzMjQwMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzNzE1MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBTVU5SUEMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdmNfYWRkX25ld190ZW1wX3hwcnRgIGZ1bmN0aW9uLCBhbmQgaXQncyBpbW1lZGlhdGVseSByYWlzaW5nIHNvbWUgZmxhZ3MuIEkgc2VlIHRoYXQgaXQncyBtYW5pcHVsYXRpbmcgdGhlIGBuZXd4cHRgIHRyYW5zcG9ydCBzdHJ1Y3R1cmUsIG1hcmtpbmcgaXQgYXMgdGVtcG9yYXJ5LCBhZGRpbmcgaXQgdG8gYSBsaXN0LCBhbmQgdGhlbiBjcnVjaWFsbHksIGNhbGxpbmcgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgcHJvYmxlbSBpcywgYHN2Y194cHJ0X3JlY2VpdmVkYCBjb3VsZCBwb3RlbnRpYWxseSByZWxlYXNlIGBuZXd4cHRgIHZlcnkgcXVpY2tseSwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgcHJvY2Vzc2VkIGJ5IGFub3RoZXIgdGhyZWFkIGltbWVkaWF0ZWx5LlxuXG5UaGVuIEkgc2VlIHRoYXQgYHN2Y19oYW5kbGVfeHBydGAgY2FsbHMgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAsIGJ1dCAqYmVmb3JlKiB0aGF0IGl0IGRvZXM6XG5cbmBgYGNcbnN2Y194cHJ0X2dldChuZXd4cHQpO1xuc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KHNlcnYsIG5ld3hwdCk7XG50cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpO1xuc3ZjX3hwcnRfcHV0KG5ld3hwdCk7XG5gYGBcblxuVGhlIHJlYXNvbiBmb3IgdGhlIGBnZXRgIGFuZCBgcHV0YCBpcyBjbGVhcjogYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgaXMgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGBuZXd4cHRgLCBhbmQgd2l0aG91dCB0aGF0IHJlZmVyZW5jZSwgdGhlcmUncyBhIGRlZmluaXRlIHVzZS1hZnRlci1mcmVlIHJpc2sgaWYgYHN2Y194cHJ0X3JlY2VpdmVkYCBoYXMgZHJvcHBlZCBpdC4gU28sIHRoYXQgYHN2Y194cHJ0X2dldGAgYmVmb3JlIGNhbGxpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24sIGFuZCB0aGUgYHN2Y194cHJ0X3B1dGAgYWZ0ZXIgaXMgYSB2ZXJ5IGltcG9ydGFudCBhbmQgZGVsaWJlcmF0ZSBtZWFzdXJlIHRvIG1ha2Ugc3VyZSBgbmV3eHB0YCBpcyBzdGlsbCBhbGl2ZSBhbmQgaGFzIGEgdmFsaWQgcmVmZXJlbmNlIGZvciBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB0byB1c2UuIFdpdGhvdXQgaXQsIHdlJ3JlIHN0YXJpbmcgYXQgYSByZWFsIGJ1Zy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBUaGlzIGlzIFNVTlJQQyBzZXJ2ZXIgY29kZSBpbiBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCwgc28gaXQncyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLiBUaGlzIGlzIHVzZWQgYnkgbmZzZCwgc28gYW55IHJlbW90ZSBORlMgc2VydmVyIGlzIGV4cG9zZWQuIFdlIGFsc28ga25vdyB0aGF0IG90aGVyIGluLWtlcm5lbCBSUEMgc2VydmljZXMgdXNlIGl0LCBzbyB0aGVyZSdzIGEgYnJvYWQgYXR0YWNrIHN1cmZhY2UgaGVyZS5cblxuTmV4dCBxdWVzdGlvbjogY2FuIHN5emthbGxlciB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIE5GUyBzZXJ2ZXIgaXMgY29uZmlndXJlZCBvciB1c2VkIGluIHN5emthbGxlciB0byBlbnN1cmUgaXQgY2FuIHJlYWNoIHRoaXMgY29kZSBwYXRoLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBzdW5ycGNgIGFuZCBgc3ZjX3hwcnQuY2AgdG8gY29uZmlybSB0aGV5IGFyZSBlbmFibGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gdGhlIGZ1enppbmcgaGFybmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjAyLjAwMDM5NDg2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMTM4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3hwcnRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9NYWtlZmlsZT0xMT1zdW5ycGMteSA6PSBjbG50Lm8geHBydC5vIHNvY2tsaWIubyB4cHJ0c29jay5vIHNjaGVkLm8gXFxcXFxcbi0tXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNS1cXHQgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gc3lzZnMubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZToxNjpcXHQgICAgc3ZjX3hwcnQubyBcXFxcXFxubmV0L3N1bnJwYy9NYWtlZmlsZS0xNy1cXHQgICAgeHBydG11bHRpcGF0aC5vIG5ldGxpbmsub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDowMi4wNTU0MTU3NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc2MDM0NjU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSUEMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBSUEMgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L3N1bnJwYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgdXN1YWxseSBmaW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgU3VuIFJQQyBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgYXQgcGxheS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgZGVmaW5lZCBoZXJlLCBhbmQgdGhlbiBvdGhlciBwYXJ0cyBvZiB0aGUgUlBDIHN0YWNrIHByb2JhYmx5IHJlZmVyZW5jaW5nIGl0LiBLbm93aW5nIHdoYXQncyBjb25maWd1cmVkIGhlcmUgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgaXNzdWVzIEkgbWlnaHQgYmUgc2VlaW5nIHdpdGggUlBDLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MDMuODE1NzY0MDk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNVTlJQQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBTVU5SUENfR1NTXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBTVU5SUENcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFNVTlJQQ19TV0FQXFxuICAxNjpcXHRcXHRib29sXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUlBDU0VDX0dTU19LUkI1XFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBDUllQVE9cXG4gIDIyOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjM6XFx0XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG4gIDI0OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBLZXJiZXJvcyB2ZXJzaW9uIDVcXG4gIDI3OlxcdFxcdCAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBTZWN1cmUgUlBDIGNhbGxzIHdpdGggS2VyYmVyb3MgcmVxdWlyZSBhbiBhdXhpbGlhcnkgdXNlci1zcGFjZVxcbiAgMzA6XFx0XFx0ICBkYWVtb24gd2hpY2ggbWF5IGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHMgcGFja2FnZVxcbiAgMzE6XFx0XFx0ICBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBJbiBhZGRpdGlvbiwgdXNlci1zcGFjZVxcbiAgMzI6XFx0XFx0ICBLZXJiZXJvcyBzdXBwb3J0IHNob3VsZCBiZSBpbnN0YWxsZWQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIFNVTlJQQ19ERUJVR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG4gIDM5OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgc3lzY3RsLWJhc2VkIGRlYnVnZ2luZyBpbnRlcmZhY2VcXG4gIDQyOlxcdFxcdCAgdGhhdCBpcyBiZSB1c2VkIGJ5IHRoZSAncnBjZGVidWcnIHV0aWxpdHkgdG8gdHVybiBvbiBvciBvZmZcXG4gIDQzOlxcdFxcdCAgbG9nZ2luZyBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsIFJQQyBhY3Rpdml0eS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBtYWtlIHlvdXIga2VybmVsIHNsaWdodGx5IHNtYWxsZXIsXFxuICA0NjpcXHRcXHQgIGJ1dCBtYWtlcyB0cm91Ymxlc2hvb3RpbmcgTkZTIGlzc3VlcyBzaWduaWZpY2FudGx5IGhhcmRlci5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjAzLjgxNTg2MDQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4NzE5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbm5lY3Rpb25zIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBTVU5SUENgLiBUaGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgd2hpY2gga2VybmVsIGNvbXBvbmVudHMgYXJlIGFjdHVhbGx5ICpzZWxlY3RpbmcqIGBTVU5SUENgPyBJcyBpdCBORlNEPyBORlNfRlM/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aG8ncyBhY3R1YWxseSB1dGlsaXppbmcgdGhlIGtleSBSUEMgc2VydmljZSBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgZnVuY3Rpb25zLiBGdW5jdGlvbnMgbGlrZSBgc3ZjX2NyZWF0ZWAsIGBzdmNfaGFuZGxlX3hwcnRgLCBvciBtYXliZSBldmVuIGRpcmVjdGx5IGluIGBuZnNkYCBpdHNlbGYuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcy5cblxuVG8gcXVpY2tseSBpc29sYXRlIHRoZSByZWxldmFudCBjb21wb25lbnRzLCBJ4oCZbGwgdGhlbiBjaGVjayB0aGUgTkZTRCBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZS4gSXQgc2hvdWxkIGxpc3QgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIHVzZWQgdG8gY29tcGlsZSBORlNELiBUaGlzIHNob3VsZCBnaXZlIGEgZ29vZCB2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIHRvIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDowNS42NjQ1ODIzNzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MDUuNzE3NzQwNjU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNTYyMTc4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZpbGUgU3lzdGVtIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyB3aG9sZSBuZXR3b3JrIGZpbGUgc3lzdGVtIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBgTkZTRGAsIHNwZWNpZmljYWxseSwgaXMgdXNpbmcgYFNVTlJQQ2AuIE9rYXksIHRoYXQncyBub3Qgc3VycHJpc2luZy4gQW5kIGBsb2NrZGAsIHRoYXQncyB0aGUgbG9jayBkYWVtb24sIGl0J3MgYWxzbyBrZXllZCBpbnRvIGBTVU5SUENgLiBUaGF0IG1ha2VzIHNlbnNlOyBsb2NraW5nIG5lZWRzIHRvIGJlIHJvYnVzdCwgYW5kIFJQQyBvZmZlcnMgdGhhdCBmb3VuZGF0aW9uYWwgcmVtb3RlIGNvbW11bmljYXRpb24gbGF5ZXIuXG5cbk5vdywgdGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGZsb3cuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdobydzIGNhbGxpbmcgYHN2Y19oYW5kbGVfeHBydGAuIFRoYXQgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyB0aGUgdHJhbnNwb3J0IGxheWVyOyBpdCdzIHRoZSBnYXRld2F5IGZvciBpbmNvbWluZyByZXF1ZXN0cy4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbm5lY3RlZCBhbmQgdGhlIGRhdGEgdHJhbnNmZXIgZmxvdyB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgaXMga2V5IHRvIGRpYWdub3NpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXTigJlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoxOS4yNzk5MjEwMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTc2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19oYW5kbGVfeHBydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmM9ODE2PXN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgzMS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODMyOnN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgzMy17XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9OTIxPWludCBzdmNfcmVjdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTk2OS1cXHRcXHR0cmFjZV9zdmNfeHBydF9kZXF1ZXVlKHJxc3RwKTtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6OTcwOlxcdFxcdHN2Y19oYW5kbGVfeHBydChycXN0cCwgeHBydCk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTk3MS1cXHR9XFxuLS1cXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jPTQzOD1zdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpzdmNfcmRtYV9hY2NlcHQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYy02MjUtXFx0ICpcXG5uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jOjYyNjpcXHQgKiBzdmNfaGFuZGxlX3hwcnQoKSBkcm9wcyBpdHMgcHJlLWFjcXVpcmVkIG1vZHVsZSByZWZlcmVuY2Ugd2hlblxcbm5ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMtNjI3LVxcdCAqIC1cXHUwMDNleHBvX2FjY2VwdCgpIHJldHVybnMgTlVMTC4gVGFrZSBhIHJlcGxhY2VtZW50IHJlZmVyZW5jZSBiZWZvcmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MTkuMzQ3NTAwNDkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMTE4MDI4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyBpbiB0aGUgUlBDIFN5c3RlbSoqXG5cbk9rYXksIHNvIGBzdmNfaGFuZGxlX3hwcnRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggYSByZWNlaXZlZCBSUEMgcmVxdWVzdC4gTWFrZXMgc2Vuc2UuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCB0aGUgcmVxdWVzdCB0YWtlcyB0byAqZ2V0KiB0byBgc3ZjX2hhbmRsZV94cHJ0YC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBgc3ZjX3JlY3ZgIGNhbGxzIGl0LiBSaWdodCwgc28gSSBrbm93IHRoZSBpbW1lZGlhdGUgY2FsbGVyLCBidXQgSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBmdXJ0aGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZCwgYW5kIGF0IHdoYXQgcG9pbnQgdGhlIHN5c3RlbSByZWFsaXplcyBhbiBpbmNvbWluZyBtZXNzYWdlICppcyogYWN0dWFsbHkgc29tZXRoaW5nIHRvIGJlIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGludG8gd2hlcmUgYHN2Y19yZWN2YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDA6MjEuMzU5MzA1NjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc3MzMxNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19yZWN2XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg9MTI0Mz11bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLFxcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMTI3OC1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoxMjc5Oi8qIHN2Y19yZWN2KClcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMjgwLSAqIFRSQVA6XFx0SFZfRkFTVF9UUkFQXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaD0xMzIyPXVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX3NlbmQodW5zaWduZWQgbG9uZyBzdmNfaWQsXFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaC0xMzI1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg6MTMyNjp1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19yZWN2KHVuc2lnbmVkIGxvbmcgc3ZjX2lkLFxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTEzMjctXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcixcXG4tLVxcbmZzL2xvY2tkL3N2Yy5jPTEyND1sb2NrZCh2b2lkICp2cnFzdHApXFxuLS1cXG5mcy9sb2NrZC9zdmMuYy0xMzEtXFxuZnMvbG9ja2Qvc3ZjLmM6MTMyOlxcdC8qIHRyeV90b19mcmVlemUoKSBpcyBjYWxsZWQgZnJvbSBzdmNfcmVjdigpICovXFxuZnMvbG9ja2Qvc3ZjLmMtMTMzLVxcdHNldF9mcmVlemFibGUoKTtcXG4tLVxcbmZzL2xvY2tkL3N2Yy5jLTE0Mi1cXHRcXHRubG1zdmNfcmV0cnlfYmxvY2tlZChycXN0cCk7XFxuZnMvbG9ja2Qvc3ZjLmM6MTQzOlxcdFxcdHN2Y19yZWN2KHJxc3RwLCAwKTtcXG5mcy9sb2NrZC9zdmMuYy0xNDQtXFx0fVxcbi0tXFxuZnMvbmZzL2NhbGxiYWNrLmM9NzU9bmZzNF9jYWxsYmFja19zdmModm9pZCAqdnJxc3RwKVxcbi0tXFxuZnMvbmZzL2NhbGxiYWNrLmMtODMtXFx0d2hpbGUgKCFzdmNfdGhyZWFkX3Nob3VsZF9zdG9wKHJxc3RwKSlcXG5mcy9uZnMvY2FsbGJhY2suYzo4NDpcXHRcXHRzdmNfcmVjdihycXN0cCwgMCk7XFxuZnMvbmZzL2NhbGxiYWNrLmMtODUtXFxuLS1cXG5mcy9uZnNkL25mc3N2Yy5jPTg4OT1uZnNkKHZvaWQgKnZycXN0cClcXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmMtOTE4LVxcdHdoaWxlICghc3ZjX3RocmVhZF9zaG91bGRfc3RvcChycXN0cCkpIHtcXG5mcy9uZnNkL25mc3N2Yy5jOjkxOTpcXHRcXHRzd2l0Y2ggKHN2Y19yZWN2KHJxc3RwLCA1ICogSFopKSB7XFxuZnMvbmZzZC9uZnNzdmMuYy05MjAtXFx0XFx0Y2FzZSAtRVRJTUVET1VUOlxcbi0tXFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oPTU2PXN0YXRpYyBpbmxpbmUgdTMyIHN2Y19zb2NrX2ZpbmFsX3JlYyhzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgtNjMtICovXFxuaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oOjY0OmludFxcdFxcdHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaC02NS12b2lkXFx0XFx0c3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9ODk3PXN0YXRpYyB2b2lkIHN2Y190aHJlYWRfd2FrZV9uZXh0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtOTIwLSAqL1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYzo5MjE6aW50IHN2Y19yZWN2KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGxvbmcgdGltZW8pXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTkyMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjIzLjUzNjY0MzA4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTc0MzY3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN2Y19yZWN2YCBGdW5jdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgc3ZjX3JlY3ZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCBhbmQgYmVoYXZpb3IuIEl0IGxvb2tzIGxpa2UgYHN2Y19yZWN2YCBpcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCdzIGNhbGxlZCBieSBhIGZldyBjcnVjaWFsIGNvbXBvbmVudHM6IGBsb2NrZGAgKHNwZWNpZmljYWxseSBpbiBgZnMvbG9ja2Qvc3ZjLmNgKSwgYG5mczRfY2FsbGJhY2tfc3ZjYCAobG9jYXRlZCBpbiBgZnMvbmZzL2NhbGxiYWNrLmNgKSwgYW5kIHRoZSBwcmltYXJ5IE5GUyBkYWVtb24sIGBuZnNkYCAoZm91bmQgd2l0aGluIGBmcy9uZnNkL25mc3N2Yy5jYCkuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyBsaWtlbHkgcm9sZSBpbiBoYW5kbGluZyBpbmNvbWluZyBSUEMgcmVxdWVzdHMuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgbGlzdGVuZXIgdHJhbnNwb3J0cy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGEgdHJhbnNwb3J0IGlzIGluaXRpYWxpemVkIGFuZCBhY3RpdmVseSBsaXN0ZW5pbmcgd2hlbiBlaXRoZXIgdGhlIE5GUyBzZXJ2ZXIsIGxvY2tkIHNlcnZpY2UsIG9yIGEgY2FsbGJhY2sgbWVjaGFuaXNtIGJpbmRzIHRvIGEgcG9ydCDigJMgc3VjaCBhcyBUQ1AgcG9ydCAyMDQ5IGZvciB0aGUgbWFpbiBORlMgZGFlbW9uIOKAkyBhbmQgYSBjbGllbnQgZXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgbGlrZWx5IGB4cG9fYWNjZXB0YCwgd2hpY2ggaXMgY2FsbGVkIHRvIGFjY2VwdCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbiwgb3IgYXQgbGVhc3QgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gSSBzaG91bGQgY2hlY2sgdGhhdC5cblxuQWgsIHllcywgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjYWxsOiBgbmV3eHB0ID0geHBydC1cdTAwM2V4cHRfb3BzLVx1MDAzZXhwb19hY2NlcHQoeHBydCk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgdHJhbnNwb3J0IGdldHMgaXRzIGxlZ3MsIHNvIHRvIHNwZWFrLiBJZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24sIHRoYXQgYHhwb19hY2NlcHRgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgYHN2Y190Y3BfYWNjZXB0YCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gYG5ldC9zdW5ycGMvc3Zjc29jay5jYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgaW1wbGVtZW50YXRpb24gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIGhlYWQgb3ZlciB0byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoyOC4xMTEwMTMwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjMxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y190Y3BfYWNjZXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc3Zjc29jay5jPTkxMD1zdGF0aWMgdm9pZCBzdmNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05MjYtICovXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM6OTI3OnN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y190Y3BfYWNjZXB0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy05Mjgte1xcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9MTMzNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN2Y194cHJ0X29wcyBzdmNfdGNwX29wcyA9IHtcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTEzNDQtXFx0Lnhwb19oYXNfd3NwYWNlID0gc3ZjX3RjcF9oYXNfd3NwYWNlLFxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjEzNDU6XFx0Lnhwb19hY2NlcHQgPSBzdmNfdGNwX2FjY2VwdCxcXG5uZXQvc3VucnBjL3N2Y3NvY2suYy0xMzQ2LVxcdC54cG9fa2lsbF90ZW1wX3hwcnQgPSBzdmNfdGNwX2tpbGxfdGVtcF94cHJ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDoyOC4xNTk2NTIwNTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY0MjAyMTMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBBbmFseXNpczogTkZTIFNlcnZlciBDb25uZWN0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIE5GUyBzZXJ2ZXIgKG5mc2QpIHdoZW4gYSBjbGllbnQgY29ubmVjdHMuIFRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGhhbmRsaW5nIG9mIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCBkZXNjcmlwdG9ycyAoYG5ld3hwdGApIHdpdGhpbiBgc3ZjX2hhbmRsZV94cHJ0YC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgd29ya2VyIHRocmVhZCBjb3VsZCBwcmVtYXR1cmVseSBmcmVlIHRoZSBgbmV3eHB0YCBiZWZvcmUgY2VydGFpbiBvcGVyYXRpb25zIChsaWtlIHRyYWNpbmcpIHdlcmUgY29tcGxldGVkIGluIHRoZSBhY2NlcHRpbmcgdGhyZWFkLiBUaGUgZml4IGludm9sdmVzIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHVzaW5nIGBzdmNfeHBydF9nZXRgIGFuZCBkZWNyZW1lbnRpbmcgaXQgd2l0aCBgc3ZjX3hwcnRfcHV0YCB0byBlbnN1cmUgdGhlIGRlc2NyaXB0b3IncyBsaWZldGltZSBtYXRjaGVzIHRoZSByZXF1aXJlZCBvcGVyYXRpb25zLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIHBhdGNoZXMgYXJlIGNsZWFyLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU1VOUlBDL05GUyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgZnV6emVzIG5mc2QuIFRoaXMgaXMgdmVyeSByZWxldmFudCEgV2UgY2FuIGNvbmZpcm0gdGhhdCBhIHVzZXItc3BhY2UgbmZzIHNlcnZlciBjYW4gYmUgc3RhcnRlZCwgYW5kIGNvbm5lY3Rpb25zIGNhbiBiZSBlc3RhYmxpc2hlZCBvdmVyIGxvb3BiYWNrLCB3aGljaCBjb3ZlcnMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCByZWFjaGFibGUgY29kZS5cblxuVG8gY29uZmlybSByZWFjaGFiaWxpdHksIHdlIG11c3QgY2hlY2sgdGhlIGludm9sdmVkIHN5bWJvbHMuXG5XZSBrbm93IHRoYXQgYHN2Y19oYW5kbGVfeHBydGAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQncyBzdGF0aWMuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzdmNfcmVjdmAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFdlIGFsc28gaGF2ZSBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCB3aGljaCBpcyBzdGF0aWMsIGFuZCBgc3ZjX3hwcnRfZ2V0YCAvIGBzdmNfeHBydF9wdXRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBmb3IgZnV6emluZy5cblRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggc3RhdGljLCBpcyB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgaXQuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgYWRkZWQgbG9naWMgaXRzZWxmIHNob3VsZCBiZSBpbmNsdWRlZC5cblxuV2UgY2FuIGluY2x1ZGUgYm90aCBgc3ZjX2hhbmRsZV94cHJ0YCBhbmQgYHN2Y19yZWN2YC4gU2luY2UgYHN2Y19oYW5kbGVfeHBydGAgaXNuJ3QgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiBhIGhlYWRlciwgd2UgY2FuIHRhcmdldCBpdCBzcGVjaWZpY2FsbHkuXG5cbkZpbmFsbHksIHdlIGhhdmUgdG8gbG9vayBhdCBkZXBlbmRlbmNpZXMuIFRoZSBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19TVU5SUENgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX1NVTlJQQ2AgaXMgc2VsZWN0ZWQgYnkgYE5GU0RgLCB3aGljaCBkZXBlbmRzIG9uIGBNVUxUSVVTRVJgLiBTbywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aG9zZSBjb25maWdzIGFyZSBlbmFibGVkIHdpdGhpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC5cblxuSW4gc3VtbWFyeTogdGhlIHBhdGNoIGlzIHJlYWNoYWJsZTsgdGhlcmVmb3JlLCBpdCdzIHdvcnRoIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo0NC41Nzk4Njc3NjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mc2QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnNkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnNkL0tjb25maWc6Mjpjb25maWcgTkZTRFxcbmZzL25mc2QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMzktXFxuZnMvbmZzZC9LY29uZmlnOjQwOmNvbmZpZyBORlNEX1YyXFxuZnMvbmZzZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTAtXFxuZnMvbmZzZC9LY29uZmlnOjUxOmNvbmZpZyBORlNEX1YyX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTU0LVxcbmZzL25mc2QvS2NvbmZpZzo1NTpjb25maWcgTkZTRF9WM19BQ0xcXG5mcy9uZnNkL0tjb25maWctNTYtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy03Ni1cXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTkzLVxcbmZzL25mc2QvS2NvbmZpZzo5NDpjb25maWcgTkZTRF9QTkZTXFxuZnMvbmZzZC9LY29uZmlnLTk1LVxcdGJvb2xcXG5mcy9uZnNkL0tjb25maWctOTYtXFxuZnMvbmZzZC9LY29uZmlnOjk3OmNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMDktXFxuZnMvbmZzZC9LY29uZmlnOjExMDpjb25maWcgTkZTRF9TQ1NJTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTExMS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xMjMtXFxuZnMvbmZzZC9LY29uZmlnOjEyNDpjb25maWcgTkZTRF9GTEVYRklMRUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBGbGV4IEZpbGUgbGF5b3V0c1xcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNDAtXFxuZnMvbmZzZC9LY29uZmlnOjE0MTpjb25maWcgTkZTRF9WNF8yX0lOVEVSX1NTQ1xcbmZzL25mc2QvS2NvbmZpZy0xNDItXFx0Ym9vbCBcXFwiTkZTdjQuMiBpbnRlciBzZXJ2ZXIgdG8gc2VydmVyIENPUFlcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTUwLVxcbmZzL25mc2QvS2NvbmZpZzoxNTE6Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcXG5mcy9uZnNkL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlByb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE2My1cXG5mcy9uZnNkL0tjb25maWc6MTY0OmNvbmZpZyBORlNEX0xFR0FDWV9DTElFTlRfVFJBQ0tJTkdcXG5mcy9uZnNkL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IE5GU3Y0IGNsaWVudCB0cmFja2luZyBtZXRob2RzIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNzktXFxuZnMvbmZzZC9LY29uZmlnOjE4MDpjb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9LY29uZmlnLTE4MS1cXHRib29sIFxcXCJTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ0LjYyNjg2MDYyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTg5NTU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5GU2QgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHRvcCBvZiB0aGUgYGZzL25mc2QvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GUyBzZXJ2ZXIga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgYmVkcm9jazsgaXQncyBnb2luZyB0byBkZWZpbmUgaG93IHRoZSB3aG9sZSB0aGluZyBpcyBidWlsdCBhbmQgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIE5GU3Y0IGlzIHRoZSBkZWZhdWx0LCBpZiBsZWdhY3kgdmVyc2lvbnMgYXJlIGFsc28gaW5jbHVkZWQsIHdoYXQgc2VjdXJpdHkgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgb2YgY291cnNlLCB3aGVyZSBpdCBob29rcyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgc2Vuc2libGUgZGVmYXVsdHMsIGFzIHRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSBhbmQgcm9idXN0bHkgSSBjYW4gdGFpbG9yIHRoZSBORlMgc2VydmVyIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3Mg4oCTIGZyb20gZW1iZWRkZWQgc3lzdGVtcyB0byBoaWdoLXBlcmZvcm1hbmNlIHNlcnZlcnMuIEFueSB1bmV4cGVjdGVkIG9wdGlvbnMgb3IgY29uZnVzaW5nIGxvZ2ljIHdpbGwgaW1tZWRpYXRlbHkgcmFpc2UgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgbWFpbnRhaW5hYmlsaXR5IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgcmV2ZWFscyBhYm91dCB0aGUgTkZTIHNlcnZlcidzIGRlc2lnbiBwaGlsb3NvcGh5IGFuZCBjb25maWd1cmFiaWxpdHkuIExldCdzIHNlZSBpZiBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZWFzeSB0byBncm9rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ4LjgxNjQyMTM2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZnNkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORlNEXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZTIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBGU05PVElGWVxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9NRDUgaWYgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTYgaWYgTkZTRF9WNFxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUTyAjIHJlcXVpcmVkIGJ5IFJQQ1NFQ19HU1NfS1JCNSBhbmQgc2lnbmVkIGZpbGVoYW5kbGVzXFxuICAxMTpcXHRcXHRzZWxlY3QgTE9DS0RcXG4gIDEyOlxcdFxcdHNlbGVjdCBTVU5SUENcXG4gIDEzOlxcdFxcdHNlbGVjdCBFWFBPUlRGU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IE5GU19DT01NT05cXG4gIDE1OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WMl9BQ0xcXG4gIDE2OlxcdFxcdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIENob29zZSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgb3RoZXIgY29tcHV0ZXJzIHRvIGFjY2Vzc1xcbiAgMjA6XFx0XFx0ICBmaWxlcyByZXNpZGluZyBvbiB0aGlzIHN5c3RlbSB1c2luZyBTdW4ncyBOZXR3b3JrIEZpbGUgU3lzdGVtXFxuICAyMTpcXHRcXHQgIHByb3RvY29sLiAgVG8gY29tcGlsZSB0aGUgTkZTIHNlcnZlciBzdXBwb3J0IGFzIGEgbW9kdWxlLFxcbiAgMjI6XFx0XFx0ICBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5mc2QuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgWW91IG1heSBjaG9vc2UgdG8gdXNlIGEgdXNlci1zcGFjZSBORlMgc2VydmVyIGluc3RlYWQsIGluIHdoaWNoXFxuICAyNTpcXHRcXHQgIGNhc2UgeW91IGNhbiBjaG9vc2UgTiBoZXJlLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRvIGV4cG9ydCBsb2NhbCBmaWxlIHN5c3RlbXMgdXNpbmcgTkZTLCB5b3UgYWxzbyBuZWVkIHRvIGluc3RhbGxcXG4gIDI4OlxcdFxcdCAgdXNlciBzcGFjZSBwcm9ncmFtcyB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IG5mcy11dGlsc1xcbiAgMjk6XFx0XFx0ICBwYWNrYWdlLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uICBNb3JlIGRldGFpbCBhYm91dFxcbiAgMzA6XFx0XFx0ICB0aGUgTGludXggTkZTIHNlcnZlciBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhIHRoZVxcbiAgMzE6XFx0XFx0ICBleHBvcnRzKDUpIG1hbiBwYWdlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEJlbG93IHlvdSBjYW4gY2hvb3NlIHdoaWNoIHZlcnNpb25zIG9mIHRoZSBORlMgcHJvdG9jb2wgYXJlXFxuICAzNDpcXHRcXHQgIGF2YWlsYWJsZSB0byBjbGllbnRzIG1vdW50aW5nIHRoZSBORlMgc2VydmVyIG9uIHRoaXMgc3lzdGVtLlxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIChSRkMgMTgxMykgaXMgYWx3YXlzIGF2YWlsYWJsZSB3aGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjQ4LjgxNjQ5NTU4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDQ5MDQ1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCBgQ09ORklHX05GU0RgIGhhcyBhIGRlcGVuZGVuY3kgY2hhaW46IGBJTkVUYCwgYEZJTEVfTE9DS0lOR2AsIGBGU05PVElGWWAsIGFuZCBgTVVMVElVU0VSYCwgYW5kIGl0IGFsc28gc2VsZWN0cyBgU1VOUlBDYC4gQWx0ZXJuYXRpdmVseSwgYENPTkZJR19TVU5SUENgIGl0c2VsZiBpcyBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IGBORlNEYCwgYE5GU19GU2AsIGBMT0NLRGAsIGFuZCBvdGhlcnMuIFByb3ZpZGluZyBgU1VOUlBDYCBhbmQgYE5GU0RgIGFzIGBFbmFibGVDb25maWdzYCBpcyBhIGdvb2Qgc3RyYXRlZ2ljIG1vdmUsIGFzIGl0IGNvdmVycyBtdWx0aXBsZSBlbnRyeSBwb2ludHMuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHZlcmlmeSBob3cgZm9jdXNlZCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBhcmUuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIGBzdmNfaGFuZGxlX3hwcnRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlbGVjdGlvbiBvZiBzeW1ib2xzIGlzIHByZWNpc2UuIExldCdzIGRlbHZlIGludG8gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIFxuXG5SaWdodCwgYHN2Y19oYW5kbGVfeHBydGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBJdHMgZGlyZWN0IGNhbGxlciBpcyBgc3ZjX3JlY3ZgLCBhbmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaXMgcmlnaHQgdGhlcmUgYWxvbmdzaWRlIGl0LiBTbywgY29uc2lkZXJpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYHN2Y19oYW5kbGVfeHBydGAsIGBzdmNfcmVjdmAsIGFuZCBgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0YCBpbiB0aGUgYW5hbHlzaXMuIFRoZXNlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgaGlnaGx5IHNwZWNpZmljIGFuZCBub3QgdXNlZCB1YmlxdWl0b3VzbHkgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaCBpcyBjbGVhci4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGBzdmNfaGFuZGxlX3hwcnQoKWAgaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AsIHdoZXJlIGl0IG5vdyBhY3F1aXJlcyBhIHRlbXBvcmFyeSB0cmFuc3BvcnQgcmVmZXJlbmNlICh1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgKSBhcm91bmQgYHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpYCBhbmQgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlLiBXaXRob3V0IHRoaXMsIHRoZSBhY2NlcHRlZCB0cmFuc3BvcnQgY291bGQgYmUgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCBmcmVlZCBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgY29uY3VycmVudGx5IGFmdGVyIGJlaW5nIGFkZGVkLCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgZXhlY3V0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgaGl0IGJ5IFNVTlJQQyBzZXJ2ZXIgbGlzdGVuZXJzIGxpa2UgTkZTRCBhbmQgbG9ja2Qgd2hlbiBhY2NlcHRpbmcgaW5jb21pbmcgUlBDIG5ldHdvcmsgY29ubmVjdGlvbnMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHN0YXRlIGNvcnJ1cHRpb24gdW5kZXIgY29uY3VycmVudCBjb25uZWN0L2Rpc2Nvbm5lY3Qgc2NlbmFyaW9zLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRoZSBhcHByb2FjaCBpcyBzb3VuZCwgYW5kIHRoZSBzZWxlY3Rpb24gaXMgYXBwcm9wcmlhdGUuIEknbSBjb25maWRlbnQgaW4gdGhlIGxvZ2ljLCBhbmQgaXQgZnVsZmlsbHMgdGhlIHJlcXVpcmVtZW50cy4gTGV0J3Mgc2lnbmFsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDUyLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjU0Ljg2NTU0NDM1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTk4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfaGFuZGxlX3hwcnRcIixcbiAgICBcInN2Y19yZWN2XCIsXG4gICAgXCJzdmNfYWRkX25ld190ZW1wX3hwcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdmNfaGFuZGxlX3hwcnQoKSBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmMgYnkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0ICh2aWEgc3ZjX3hwcnRfZ2V0L3B1dCkgYWNyb3NzIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGFuZCB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlL1VBRiB3aGVyZSB0aGUgdHJhbnNwb3J0IG1pZ2h0IGJlIGNsb3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBydW5zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGNvcmUga2VybmVsIFJQQyBuZXR3b3JraW5nIGFuZCBpcyByZWFjaGFibGUgd2hlbiBpbmNvbWluZyBjb25uZWN0aW9ucyBhcmUgYWNjZXB0ZWQgb24gU1VOUlBDIGxpc3RlbmVyIHNvY2tldHMgKGUuZy4sIE5GU0QsIGxvY2tkKS4gSXQgaXMgd29ydGggZnV6emluZyB0byB0ZXN0IHRyYW5zcG9ydCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNVTlJQQ1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19oYW5kbGVfeHBydFwiLFxuICAgIFwic3ZjX3JlY3ZcIixcbiAgICBcInN2Y19hZGRfbmV3X3RlbXBfeHBydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN2Y19oYW5kbGVfeHBydCgpIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYyBieSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKHZpYSBzdmNfeHBydF9nZXQvcHV0KSBhY3Jvc3Mgc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgYW5kIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UvVUFGIHdoZXJlIHRoZSB0cmFuc3BvcnQgbWlnaHQgYmUgY2xvc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIHJ1bnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgY29yZSBrZXJuZWwgUlBDIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBvbiBTVU5SUEMgbGlzdGVuZXIgc29ja2V0cyAoZS5nLiwgTkZTRCwgbG9ja2QpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIHRlc3QgdHJhbnNwb3J0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAwOjU0Ljk0MDc1MjMxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4MzYwNTE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo1NC45NDEyMTk2NjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjgzNTU4MDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgcmFjZSBjb25kaXRpb24gaW4gbmV0L3N1bnJwYy9zdmNfeHBydC5jOnN2Y19oYW5kbGVfeHBydCgpLiBPbmNlIHN2Y19hZGRfbmV3X3RlbXBfeHBydCgpIGlzIGNhbGxlZCwgdGhlIG5ld2x5IGFjY2VwdGVkIHRyYW5zcG9ydCAobmV3eHB0KSBjYW4gYmUgcHJvY2Vzc2VkIGFuZCBmcmVlZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB3b3JrZXIgdGhyZWFkIGJlZm9yZSB0cmFjZV9zdmNfeHBydF9hY2NlcHQoKSBmaW5pc2hlcyBhY2Nlc3NpbmcgaXQuIEJ5IHRha2luZyBhIHJlZmVyZW5jZSB3aXRoIHN2Y194cHJ0X2dldCgpIGJlZm9yZSBhZGRpbmcgdGhlIHRyYW5zcG9ydCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggc3ZjX3hwcnRfcHV0KCkgYWZ0ZXJ3YXJkcywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHBvaW50ZXIgcmVtYWlucyB2YWxpZCBkdXJpbmcgdGhlIHRyYWNlcG9pbnQgY2FsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY2VybmVkIHdpdGggb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgb2JqZWN0IGxpZmV0aW1lIChVQUYgcHJldmVudGlvbikuIExpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhN2NkODk5ODgxYjViYjI2M2MxNWIyMjY0YTI1YTAyODVlYWU2NzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNDo1OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuY1xuaW5kZXggNDAwNDBhZjU4OGZiMi4uOTM3MDQwMTQ2M2I2YSAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuY1xuKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jXG5AQCAtODUyLDggKzg1MiwxMCBAQCBzdGF0aWMgdm9pZCBzdmNfaGFuZGxlX3hwcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuIFx0XHRuZXd4cHQgPSB4cHJ0LVx1MDAzZXhwdF9vcHMtXHUwMDNleHBvX2FjY2VwdCh4cHJ0KTtcbiBcdFx0aWYgKG5ld3hwdCkge1xuIFx0XHRcdG5ld3hwdC1cdTAwM2V4cHRfY3JlZCA9IGdldF9jcmVkKHhwcnQtXHUwMDNleHB0X2NyZWQpO1xuK1x0XHRcdHN2Y194cHJ0X2dldChuZXd4cHQpO1xuIFx0XHRcdHN2Y19hZGRfbmV3X3RlbXBfeHBydChzZXJ2LCBuZXd4cHQpO1xuIFx0XHRcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXHUwMDNlc3ZfbmFtZSk7XG4rXHRcdFx0c3ZjX3hwcnRfcHV0KG5ld3hwdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bW9kdWxlX3B1dCh4cHJ0LVx1MDAzZXhwdF9jbGFzcy1cdTAwM2V4Y2xfb3duZXIpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMDo1NC45NDEyMjM2MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg4ODgzNjA0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUlBDIFRyYW5zcG9ydCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3N1bnJwYy9zdmNfeHBydC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBmb2N1c2VzIGFyb3VuZCB0aGUgYHN2Y19oYW5kbGVfeHBydGAgZnVuY3Rpb24gYW5kIGl0cyBoYW5kbGluZyBvZiBhY2NlcHRlZCB0cmFuc3BvcnQgZW5kcG9pbnRzLiBUaGUgY2hhbmdlIGlzIGluc2VydGluZyBgc3ZjX3hwcnRfZ2V0KClgIGFuZCBgc3ZjX3hwcnRfcHV0KClgIGNhbGxzIGFyb3VuZCB0aGUgbmV3bHkgY3JlYXRlZCBgbmV3eHB0YC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHdlJ3JlIG1hbmFnaW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG5ldyB0cmFuc3BvcnQgZW5kcG9pbnQgbW9yZSBjYXJlZnVsbHkuXG5cbkJlZm9yZSB0aGlzIHBhdGNoLCB3ZSB3ZXJlIGp1c3QgZ2V0dGluZyB0aGUgY3JlZGVudGlhbCwgYWRkaW5nIGl0IGFzIGEgdGVtcG9yYXJ5IHRyYW5zcG9ydCwgYW5kIHRyYWNpbmcgdGhlIGFjY2VwdGFuY2UuIE5vdywgd2UncmUgZXhwbGljaXRseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0KClgIHJpZ2h0IGFmdGVyIGdldHRpbmcgdGhlIG5ldyB0cmFuc3BvcnQsIGFuZCBkZWNyZW1lbnRpbmcgaXQsIHdpdGggYHN2Y194cHJ0X3B1dCgpYCwgYWZ0ZXIgYWRkaW5nIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0LiBUaGUgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdGAgY2FsbCBsb29rcyBsaWtlIGl0IGlzIGJldHdlZW4gdGhlIGBnZXRgIGFuZCB0aGUgYHB1dGAuIEkgd29uZGVyIGlmIHRoZXJlIHdhcyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZGVudGlmaWVkLCBsZWFkaW5nIHRvIHRoaXMgYWRkaXRpb24uXG5cbkkgYXNzdW1lIHRoZSBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoZSBgbmV3eHB0YCBpc24ndCBwcmVtYXR1cmVseSByZWxlYXNlZCBieSB0aGUgc3lzdGVtIHdoaWxlIGl0J3MgYmVpbmcgcHJvY2Vzc2VkIGFuZCBhZGRlZCB0byB0aGUgc2VydmVyJ3MgdGVtcG9yYXJ5IHRyYW5zcG9ydCBsaXN0LiBUaGUgYG1vZHVsZV9wdXRgIGNhbGwgaW4gdGhlIGBlbHNlYCBicmFuY2ggcmVtYWlucywgc28gaWYgdGhlIHRyYW5zcG9ydCBpc24ndCBhY2NlcHRlZCwgdGhlIG1vZHVsZSBpcyBzdGlsbCByZWxlYXNlZCwgYXMgaXQgc2hvdWxkIGJlLiBUaGUgYGdldF9jcmVkYCBsb29rcyBsaWtlIGl0IHN0aWxsIG1hbmFnZXMgdGhlIGNyZWRlbnRpYWxzLCBhbmQgdGhlIG5ldyB0cmFuc3BvcnQgZG9lcyBnZXQgaXRzIGNyZWRlbnRpYWxzLiBUaGlzIGlzIHN0YW5kYXJkLCBidXQgdGhlIGRvdWJsZSBgZ2V0YCBhbmQgYHB1dGAgaXMgYSBuZXcgdG91Y2guXG5cbkknZCB3YW50IHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkaXNjdXNzaW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUsIGJ1dCBteSBpbW1lZGlhdGUgZ3Vlc3MgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoIGhvdyB0aGUgdHJhbnNwb3J0IGVuZHBvaW50IGxpZmV0aW1lIGlzIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0ZW1wb3JhcnkgdHJhbnNwb3J0IGxpc3QuIFdlJ3JlIGV4cGxpY2l0bHkgY29udHJvbGxpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBwcm90ZWN0IHRoZSB0cmFuc3BvcnQgZHVyaW5nIGl0cyBsaWZlY3ljbGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgbWFuYWdpbmcgbGlmZXRpbWVzIGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MTMuODI5NTg3NTE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdFxcdHN2Y19kZWxldGVfeHBydCh4cHJ0KTtcXG4gODQxOlxcdFxcdFxcdC8qIExlYXZlIFhQVF9CVVNZIHNldCBvbiB0aGUgZGVhZCB4cHJ0OiAqL1xcbiA4NDI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg0MzpcXHRcXHR9XFxuIDg0NDpcXHRcXHRpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCBcXHUwMDI2eHBydC1cXHUwMDNleHB0X2ZsYWdzKSkge1xcbiA4NDU6XFx0XFx0XFx0c3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7XFxuIDg0NjpcXHRcXHRcXHQvKlxcbiA4NDc6XFx0XFx0XFx0ICogV2Uga25vdyB0aGlzIG1vZHVsZV9nZXQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgdGhlXFxuIDg0ODpcXHRcXHRcXHQgKiBsaXN0ZW5lciBob2xkcyBhIHJlZmVyZW5jZSB0b29cXG4gODQ5OlxcdFxcdFxcdCAqL1xcbiA4NTA6XFx0XFx0XFx0X19tb2R1bGVfZ2V0KHhwcnQtXFx1MDAzZXhwdF9jbGFzcy1cXHUwMDNleGNsX293bmVyKTtcXG4gODUxOlxcdFxcdFxcdHN2Y19jaGVja19jb25uX2xpbWl0cyh4cHJ0LVxcdTAwM2V4cHRfc2VydmVyKTtcXG4gODUyOlxcdFxcdFxcdG5ld3hwdCA9IHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19hY2NlcHQoeHBydCk7XFxuIDg1MzpcXHRcXHRcXHRpZiAobmV3eHB0KSB7XFxuIDg1NDpcXHRcXHRcXHRcXHRuZXd4cHQtXFx1MDAzZXhwdF9jcmVkID0gZ2V0X2NyZWQoeHBydC1cXHUwMDNleHB0X2NyZWQpO1xcbiA4NTU6XFx0XFx0XFx0XFx0c3ZjX3hwcnRfZ2V0KG5ld3hwdCk7XFxuIDg1NjpcXHRcXHRcXHRcXHRzdmNfYWRkX25ld190ZW1wX3hwcnQoc2VydiwgbmV3eHB0KTtcXG4gODU3OlxcdFxcdFxcdFxcdHRyYWNlX3N2Y194cHJ0X2FjY2VwdChuZXd4cHQsIHNlcnYtXFx1MDAzZXN2X25hbWUpO1xcbiA4NTg6XFx0XFx0XFx0XFx0c3ZjX3hwcnRfcHV0KG5ld3hwdCk7XFxuIDg1OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4NjA6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dCh4cHJ0LVxcdTAwM2V4cHRfY2xhc3MtXFx1MDAzZXhjbF9vd25lcik7XFxuIDg2MTpcXHRcXHRcXHR9XFxuIDg2MjpcXHRcXHRcXHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcXG4gODYzOlxcdFxcdH0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0hBTkRTSEFLRSwgXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9mbGFncykpIHtcXG4gODY0OlxcdFxcdFxcdHhwcnQtXFx1MDAzZXhwdF9vcHMtXFx1MDAzZXhwb19oYW5kc2hha2UoeHBydCk7XFxuIDg2NTpcXHRcXHRcXHRzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTtcXG4gODY2OlxcdFxcdH0gZWxzZSBpZiAoc3ZjX3hwcnRfcmVzZXJ2ZV9zbG90KHJxc3RwLCB4cHJ0KSkge1xcbiA4Njc6XFx0XFx0XFx0LyogWFBUX0RBVEF8WFBUX0RFRkVSUkVEIGNhc2U6ICovXFxuIDg2ODpcXHRcXHRcXHRycXN0cC1cXHUwMDNlcnFfZGVmZXJyZWQgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KTtcXG4gODY5OlxcdFxcdFxcdGlmIChycXN0cC1cXHUwMDNlcnFfZGVmZXJyZWQpXFxuIDg3MDpcXHRcXHRcXHRcXHRsZW4gPSBzdmNfZGVmZXJyZWRfcmVjdihycXN0cCk7XFxuIDg3MTpcXHRcXHRcXHRlbHNlXFxuIDg3MjpcXHRcXHRcXHRcXHRsZW4gPSB4cHJ0LVxcdTAwM2V4cHRfb3BzLVxcdTAwM2V4cG9fcmVjdmZyb20ocnFzdHApO1xcbiA4NzM6XFx0XFx0XFx0cnFzdHAtXFx1MDAzZXJxX3Jlc2VydmVkID0gc2Vydi1cXHUwMDNlc3ZfbWF4X21lc2c7XFxuIDg3NDpcXHRcXHRcXHRhdG9taWNfYWRkKHJxc3RwLVxcdTAwM2VycV9yZXNlcnZlZCwgXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9yZXNlcnZlZCk7XFxuIDg3NTpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2M9IDApXFxuIDg3NjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0dHJhY2Vfc3ZjX3hkcl9yZWN2ZnJvbShcXHUwMDI2cnFzdHAtXFx1MDAzZXJxX2FyZyk7XFxuIDg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MTMuODI5NjkyNzc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3OTI0MTA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBzdmNcXF9hZGRcXF9uZXdcXF90ZW1wXFxfeHBydCBhbmQgdGhlIHN2Y1xcX3hwcnQgZnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJvbGUgb2YgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgaW4gdGhpcyBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhlIGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBmdW5jdGlvbnMgd2VyZSBpbnRyb2R1Y2VkIGludG8gdGhpcyBhcmVhLiBXaGF0IHByb2JsZW0gd2VyZSB0aGV5IGRlc2lnbmVkIHRvIHNvbHZlPyBJcyBpdCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHRocmVhZCBzYWZldHksIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBwcm90b2NvbCBoYW5kbGluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIHRob3NlIGFkZGl0aW9ucy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCwgZmlndXJlIG91dCB0aGUgY29udGV4dCwgYW5kIHRyYWNlIGl0IGJhY2sgdG8gc2VlIHdoYXQgdHJpZ2dlcmVkIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCB0byBiZWdpbiB3aXRoLiBUaGUgXCJ3aHlcIiBpcyB0aGUga2V5IGRyaXZlciBoZXJlLCBzbyBJJ20gbm90IG9ubHkgZm9jdXNpbmcgb24gdGhlIFwid2hhdC5cIiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToxNi42MjIxMjE1ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjIxNzI1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmM9Nzg0PXN0YXRpYyBib29sIHN2Y190aHJlYWRfd2FpdF9mb3Jfd29yayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBsb25nIHRpbWVvKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTgxNS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6ODE2OnN0YXRpYyB2b2lkIHN2Y19hZGRfbmV3X3RlbXBfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBzdmNfeHBydCAqbmV3eHB0KVxcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy04MTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToxNy45ODQzMDIxOTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4OTA3MDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHN2Y194cHJ0LmM6IEEgU3BlY2lmaWMgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYG5ldC9zdW5ycGMvc3ZjX3hwcnQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgZnJvbSBsaW5lcyA4MTAgdG8gODQ1LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvLi4uIHdlbGwsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGBzdmNfeHBydGAsIHByb2JhYmx5IHRyYW5zcG9ydC1sYXllciBoYW5kbGluZyBvciBzb21lIGFzcGVjdCBvZiBjb25uZWN0aW9uIG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCBtaWdodCBkZWFsIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIHBhcnRpY3VsYXIgUlBDIHRyYW5zYWN0aW9uLCBtYXliZSBjb25uZWN0aW9uIHNldHVwLCB0ZWFyLWRvd24sIG9yIGV2ZW4gZXJyb3IgaGFuZGxpbmcuIEl0J3MgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGlzIGNvcnJlY3QsIGFuZCB3aGF0IHRoaXMgc2VjdGlvbiBpcyByZWFsbHkgcmVzcG9uc2libGUgZm9yLiBUaW1lIHRvIGdvIGxpbmUtYnktbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjIwLjI3MzM3NTY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc3VucnBjL3N2Y194cHJ0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODEwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODEwOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA4MTE6XFx0XFx0fVxcbiA4MTI6XFx0XFx0dHJ5X3RvX2ZyZWV6ZSgpO1xcbiA4MTM6XFx0XFx0cmV0dXJuIGRpZF90aW1lb3V0O1xcbiA4MTQ6XFx0fVxcbiA4MTU6XFx0XFxuIDgxNjpcXHRzdGF0aWMgdm9pZCBzdmNfYWRkX25ld190ZW1wX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdClcXG4gODE3OlxcdHtcXG4gODE4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfbG9jayk7XFxuIDgxOTpcXHRcXHRzZXRfYml0KFhQVF9URU1QLCBcXHUwMDI2bmV3eHB0LVxcdTAwM2V4cHRfZmxhZ3MpO1xcbiA4MjA6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ld3hwdC1cXHUwMDNleHB0X2xpc3QsIFxcdTAwMjZzZXJ2LVxcdTAwM2Vzdl90ZW1wc29ja3MpO1xcbiA4MjE6XFx0XFx0c2Vydi1cXHUwMDNlc3ZfdG1wY250Kys7XFxuIDgyMjpcXHRcXHRpZiAoc2Vydi1cXHUwMDNlc3ZfdGVtcHRpbWVyLmZ1bmN0aW9uID09IE5VTEwpIHtcXG4gODIzOlxcdFxcdFxcdC8qIHNldHVwIHRpbWVyIHRvIGFnZSB0ZW1wIHRyYW5zcG9ydHMgKi9cXG4gODI0OlxcdFxcdFxcdHNlcnYtXFx1MDAzZXN2X3RlbXB0aW1lci5mdW5jdGlvbiA9IHN2Y19hZ2VfdGVtcF94cHJ0cztcXG4gODI1OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2Vydi1cXHUwMDNlc3ZfdGVtcHRpbWVyLFxcbiA4MjY6XFx0XFx0XFx0XFx0ICBqaWZmaWVzICsgc3ZjX2Nvbm5fYWdlX3BlcmlvZCAqIEhaKTtcXG4gODI3OlxcdFxcdH1cXG4gODI4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXJ2LVxcdTAwM2Vzdl9sb2NrKTtcXG4gODI5OlxcdFxcdHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdCk7XFxuIDgzMDpcXHR9XFxuIDgzMTpcXHRcXG4gODMyOlxcdHN0YXRpYyB2b2lkIHN2Y19oYW5kbGVfeHBydChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpXFxuIDgzMzpcXHR7XFxuIDgzNDpcXHRcXHRzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBycXN0cC1cXHUwMDNlcnFfc2VydmVyO1xcbiA4MzU6XFx0XFx0aW50IGxlbiA9IDA7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuIDgzODpcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFhQVF9LSUxMX1RFTVAsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKVxcbiA4Mzk6XFx0XFx0XFx0XFx0eHBydC1cXHUwMDNleHB0X29wcy1cXHUwMDNleHBvX2tpbGxfdGVtcF94cHJ0KHhwcnQpO1xcbiA4NDA6XFx0XFx0XFx0c3ZjX2RlbGV0ZV94cHJ0KHhwcnQpO1xcbiA4NDE6XFx0XFx0XFx0LyogTGVhdmUgWFBUX0JVU1kgc2V0IG9uIHRoZSBkZWFkIHhwcnQ6ICovXFxuIDg0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcdGlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsIFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfZmxhZ3MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjIwLjI3MzUwOTk0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMjg2MTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIFVBRiBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYHN2Y19hZGRfbmV3X3RlbXBfeHBydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgY2FsbHMgYHN2Y194cHJ0X3JlY2VpdmVkKG5ld3hwdClgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGBuZXd4cHRgIGlzIGVzc2VudGlhbGx5IHJlbGVhc2VkIGludG8gdGhlIHdpbGQgd2l0aCB0aGF0IGNhbGwuIEl0IGNhbiB0aGVuIGJlIHBpY2tlZCB1cCBieSBhbm90aGVyIHRocmVhZCwgcHJvY2Vzc2VkLCBjbG9zZWQsIGFuZCAqZnJlZWQqIOKAkyBhbGwgYmVmb3JlIGB0cmFjZV9zdmNfeHBydF9hY2NlcHQobmV3eHB0LCBzZXJ2LVx1MDAzZXN2X25hbWUpYCBldmVuIGdldHMgYSBjaGFuY2UgdG8gcnVuISBUaGF0J3MgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBtZWFucyBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3YXMgYWNjZXNzaW5nIGBuZXd4cHRgICphZnRlciogaXQgY291bGQgaGF2ZSBiZWVuIGZyZWVkLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgaXNzdWUgS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2guXG5cblRoZSBmaXggaXMgZWxlZ2FudDogd3JhcCB0aGUgY2FsbCB0byBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCB3aXRoIGBzdmNfeHBydF9nZXQobmV3eHB0KWAgYW5kIGBzdmNfeHBydF9wdXQobmV3eHB0KWAuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBgbmV3eHB0YCAqYmVmb3JlKiBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byBvdGhlciB0aHJlYWRzLCBndWFyYW50ZWVpbmcgaXQncyBhbGl2ZSB3aGlsZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0YCBleGVjdXRlcywgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB3aGVuIGRvbmUuICBTaW1wbGUsIGVmZmVjdGl2ZSwgYW5kIGl0IGFkZHJlc3NlcyB0aGUgcm9vdCBjYXVzZSBkaXJlY3RseS5cblxuTm93LCBsZXQncyBiZSB0aG9yb3VnaCBhbmQgYW5hbHl6ZSBpZiB0aGUgZml4IGludHJvZHVjZXMgYW55IG90aGVyIHByb2JsZW1zLiBBcmUgdGhlcmUgYW55IHJpc2tzIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gR2l2ZW4gbXkga25vd2xlZGdlLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGFuc3dlciBpcyBubywgYnV0IGEgcXVpY2sgcmV2aWV3IGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gIEl0IGxvb2tzIGxpa2U6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLlxuKiAgIE5vIGNvbmRpdGlvbmFscyBvciBicmFuY2hpbmcgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2l0aG91dCB6ZXJvaW5nLlxuKiAgIE5vIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGhhdmUgYmVlbiBhbHRlcmVkIHRvIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBUaGUgZml4IG9ubHkgcmVsaWVzIG9uIGdldHRpbmcgYW5kIHJlbGVhc2luZyBhIHJlZmVyZW5jZSBjb3VudCB1c2luZyBgc3ZjX3hwcnRfZ2V0YCBhbmQgYHN2Y194cHJ0X3B1dGAgYXJvdW5kIHRoZSB0cmFjZXBvaW50LlxuXG5XZSdyZSBqdXN0IG1hbmlwdWxhdGluZyBhIHJlZmVyZW5jZSBjb3VudCBhbmQgdXNpbmcgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgc28gSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGJyaWVmbHkgcmV2aWV3IGBzdmNfeHBydF9nZXRgIGFuZCBgc3ZjX3hwcnRfcHV0YCBqdXN0IHRvIGJlIGNlcnRhaW4uIEJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBsb29rcyBsaWtlIGEgY2xlYW4sIHdlbGwtcmVhc29uZWQgcGF0Y2ggdG8gc29sdmUgYSBjcml0aWNhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6MDE6MjUuNjAyMTIzNzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDk4NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oPTE4OD12b2lkXFx0c3ZjX3hwcnRfZGVmZXJyZWRfY2xvc2Uoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE4OS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oOjE5MDpzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3hwcnRfZ2V0KHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oLTE5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjI1LjY3MTYyNzE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODEzNjEyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBgc3ZjX3hwcnQuaGAgYXQgTGluZSAxOTAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUlBDIGluZnJhc3RydWN0dXJlIHdvcmtzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgc3ZjX3hwcnQuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHRyYW5zcG9ydCBsYXllciBoYW5kbGluZy4gSXQncyBsaWtlbHkgZ29pbmcgdG8gYmUgc29tZXRoaW5nIHRoYXQgZGVmaW5lcyB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrLiBNYXliZSBJJ2xsIGZpbmQgYSBkYXRhIHN0cnVjdHVyZSBmb3IgYSB0cmFuc3BvcnQgaGFuZGxlLCBvciBwb3NzaWJseSBzb21lIGtleSBtYWNyb3MgZm9yIGRpc3BhdGNoaW5nIGNhbGxzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5IG9uIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMToyNy40ODUyNDE3MDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODg6XFx0dm9pZFxcdHN2Y194cHJ0X2RlZmVycmVkX2Nsb3NlKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxcbiAxOTE6XFx0e1xcbiAxOTI6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnhwcnQtXFx1MDAzZXhwdF9yZWYpO1xcbiAxOTM6XFx0fVxcbiAxOTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2Y194cHJ0X3NldF9sb2NhbChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQsXFxuIDE5NTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLFxcbiAxOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc2l6ZV90IHNhbGVuKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0bWVtY3B5KFxcdTAwMjZ4cHJ0LVxcdTAwM2V4cHRfbG9jYWwsIHNhLCBzYWxlbik7XFxuIDE5OTpcXHRcXHR4cHJ0LVxcdTAwM2V4cHRfbG9jYWxsZW4gPSBzYWxlbjtcXG4gMjAwOlxcdH1cXG4gMjAxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfcmVtb3RlKHN0cnVjdCBzdmNfeHBydCAqeHBydCxcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLFxcbiAyMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHNpemVfdCBzYWxlbilcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdG1lbWNweShcXHUwMDI2eHBydC1cXHUwMDNleHB0X3JlbW90ZSwgc2EsIHNhbGVuKTtcXG4gMjA2OlxcdFxcdHhwcnQtXFx1MDAzZXhwdF9yZW1vdGVsZW4gPSBzYWxlbjtcXG4gMjA3OlxcdFxcdHNucHJpbnRmKHhwcnQtXFx1MDAzZXhwdF9yZW1vdGVidWYsIHNpemVvZih4cHJ0LVxcdTAwM2V4cHRfcmVtb3RlYnVmKSAtIDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjAxOjI3LjQ4NTMxNTI0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjkxNDY0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeDogYHN2Y194cHJ0X2dldGAgaXMgYmVpbmcgYWRkZWQgYmVmb3JlIGBzdmNfYWRkX25ld190ZW1wX3hwcnQoKWAgYW5kIGBzdmNfeHBydF9wdXQoKWAgYWZ0ZXIgYHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpYC4gIEJhc2ljYWxseSwgYSBzaW1wbGUgcmVmZXJlbmNlIGNvdW50IG1hbmlwdWxhdGlvbi4gIGBzdmNfeHBydF9nZXRgIGp1c3QgZG9lcyBhIGBrcmVmX2dldGAsIGFuZCBgc3ZjX3hwcnRfcHV0YCBjYWxscyBga3JlZl9wdXRgIHdpdGggdGhlIGBzdmNfeHBydF9yZWxlYXNlYCBjYWxsYmFjay5cblxuVGhlIHByb2JsZW0gdGhpcyBpcyBtZWFudCB0byBhZGRyZXNzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbjogYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBgbmV3eHB0YCBtaWdodCBnZXQgZGVzdHJveWVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZSBgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KClgIHJ1bnMuICBUaGlzIHJlZmVyZW5jZSBjb3VudGluZyBpcyBtZWFudCB0byBwcmV2ZW50IHRoYXQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnk/ICBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBzcXVhcmVseSBpbiBLQVNBTidzIGRvbWFpbi4gV2UncmUgZGVhbGluZyB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIEtBU0FOIGlzIGJ1aWx0IGZvciB0aGF0LiAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIHJlYWRzIG9yIG1lbW9yeSBsZWFrcyBoZXJlLiBBbnkgcmVmY291bnQgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHRoZSBzdGFuZGFyZCByZWZjb3VudF90IHNhbml0eSBjaGVja3MgYW5kIFNMVUIgZGVidWcgZmVhdHVyZXMuIEtNU0FOIHdvdWxkbid0IG9mZmVyIGFueSB1bmlxdWUgdmFsdWUgaW4gZGV0ZWN0aW5nIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgdW5lcXVpdm9jYWxseSBmYWxzZS4gSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuIFRoaXMgaXMgYSBjbGVhbiwgbmVjZXNzYXJ5IGZpeCwgYW5kIGl0J3Mgd2l0aGluIHRoZSByZW1pdCBvZiBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyNiwiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTowMTozMS43NzY3ODIxMTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIHJhY2UgY29uZGl0aW9uIGluIG5ldC9zdW5ycGMvc3ZjX3hwcnQuYzpzdmNfaGFuZGxlX3hwcnQoKS4gT25jZSBzdmNfYWRkX25ld190ZW1wX3hwcnQoKSBpcyBjYWxsZWQsIHRoZSBuZXdseSBhY2NlcHRlZCB0cmFuc3BvcnQgKG5ld3hwdCkgY2FuIGJlIHByb2Nlc3NlZCBhbmQgZnJlZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgd29ya2VyIHRocmVhZCBiZWZvcmUgdHJhY2Vfc3ZjX3hwcnRfYWNjZXB0KCkgZmluaXNoZXMgYWNjZXNzaW5nIGl0LiBCeSB0YWtpbmcgYSByZWZlcmVuY2Ugd2l0aCBzdmNfeHBydF9nZXQoKSBiZWZvcmUgYWRkaW5nIHRoZSB0cmFuc3BvcnQgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHN2Y194cHJ0X3B1dCgpIGFmdGVyd2FyZHMsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHRyYW5zcG9ydCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB0cmFjZXBvaW50IGNhbGwuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmNlcm5lZCB3aXRoIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIG9iamVjdCBsaWZldGltZSAoVUFGIHByZXZlbnRpb24pLiBMaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSByYWNlIGNvbmRpdGlvbiBpbiBuZXQvc3VucnBjL3N2Y194cHJ0LmM6c3ZjX2hhbmRsZV94cHJ0KCkuIE9uY2Ugc3ZjX2FkZF9uZXdfdGVtcF94cHJ0KCkgaXMgY2FsbGVkLCB0aGUgbmV3bHkgYWNjZXB0ZWQgdHJhbnNwb3J0IChuZXd4cHQpIGNhbiBiZSBwcm9jZXNzZWQgYW5kIGZyZWVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIHdvcmtlciB0aHJlYWQgYmVmb3JlIHRyYWNlX3N2Y194cHJ0X2FjY2VwdCgpIGZpbmlzaGVzIGFjY2Vzc2luZyBpdC4gQnkgdGFraW5nIGEgcmVmZXJlbmNlIHdpdGggc3ZjX3hwcnRfZ2V0KCkgYmVmb3JlIGFkZGluZyB0aGUgdHJhbnNwb3J0IGFuZCByZWxlYXNpbmcgaXQgd2l0aCBzdmNfeHBydF9wdXQoKSBhZnRlcndhcmRzLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSB0cmFuc3BvcnQgcG9pbnRlciByZW1haW5zIHZhbGlkIGR1cmluZyB0aGUgdHJhY2Vwb2ludCBjYWxsLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jZXJuZWQgd2l0aCBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBvYmplY3QgbGlmZXRpbWUgKFVBRiBwcmV2ZW50aW9uKS4gTGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[1] Phase: Succeeded StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 15:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 15:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2] Phase: Succeeded StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 15:01:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 15:01:43 +0000 UTC FinishedAt: 2026-09-12 15:01:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow55bkv/series-workflow55bkv-convert-artifact-3603744659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 15:01:53 +0000 UTC FinishedAt: 2026-09-12 15:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 15:01:53 +0000 UTC FinishedAt: 2026-09-12 15:18:15 +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:*fd6a64cd-1bbf-48ab-84fa-3f403ec74745,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-workflow55bkv/series-workflow55bkv-convert-artifact-3603744659/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": "ab30faa9-2fe0-4dae-8cd1-adb5c8ac48be", "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-workflow55bkv/series-workflow55bkv-build-action-2753619137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 15:01:53 +0000 UTC FinishedAt: 2026-09-12 15:18:05 +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:*fd6a64cd-1bbf-48ab-84fa-3f403ec74745,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-workflow55bkv/series-workflow55bkv-convert-artifact-3603744659/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": "ab30faa9-2fe0-4dae-8cd1-adb5c8ac48be", "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-workflow55bkv/series-workflow55bkv-build-action-2753619137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 15:18:15 +0000 UTC FinishedAt: 2026-09-12 15:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 15:18:15 +0000 UTC FinishedAt: 2026-09-12 15:18:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 15:18:15 +0000 UTC FinishedAt: 2026-09-12 15:18:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 15:18:15 +0000 UTC FinishedAt: 2026-09-12 15:18:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow55bkv/series-workflow55bkv-convert-artifact-3980711306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 15:18:25 +0000 UTC FinishedAt: 2026-09-12 15:20:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 15:18:25 +0000 UTC FinishedAt: 2026-09-12 15:20:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab30faa9-2fe0-4dae-8cd1-adb5c8ac48be,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-workflow55bkv/series-workflow55bkv-build-action-2753619137/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-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 15:20:18 +0000 UTC FinishedAt: 2026-09-12 15:20:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 15:20:18 +0000 UTC FinishedAt: 2026-09-12 15:20:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 15:20:18 +0000 UTC FinishedAt: 2026-09-12 15:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 15:20:18 +0000 UTC FinishedAt: 2026-09-12 15:36:49 +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:*fd6a64cd-1bbf-48ab-84fa-3f403ec74745,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-workflow55bkv/series-workflow55bkv-convert-artifact-3980711306/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": "87ca4421-44ea-436a-9265-b9dd43be6ab1", "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-workflow55bkv/series-workflow55bkv-build-action-4169405358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 15:20:18 +0000 UTC FinishedAt: 2026-09-12 15:36:39 +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:*fd6a64cd-1bbf-48ab-84fa-3f403ec74745,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-workflow55bkv/series-workflow55bkv-convert-artifact-3980711306/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": "87ca4421-44ea-436a-9265-b9dd43be6ab1", "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-workflow55bkv/series-workflow55bkv-build-action-4169405358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 15:36:49 +0000 UTC FinishedAt: 2026-09-12 15:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 15:36:49 +0000 UTC FinishedAt: 2026-09-12 15:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 15:36:49 +0000 UTC FinishedAt: 2026-09-12 15:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 15:36:49 +0000 UTC FinishedAt: 2026-09-12 15:38:28 +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:*87ca4421-44ea-436a-9265-b9dd43be6ab1,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-workflow55bkv/series-workflow55bkv-build-action-4169405358/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-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"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:*ab30faa9-2fe0-4dae-8cd1-adb5c8ac48be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*87ca4421-44ea-436a-9265-b9dd43be6ab1,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-workflow55bkv/series-workflow55bkv-build-action-2753619137/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-workflow55bkv/series-workflow55bkv-build-action-4169405358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 15:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 15:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"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-workflow55bkv/series-workflow55bkv-convert-artifact-2092989983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 15:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 15:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 15:38:38 +0000 UTC FinishedAt: 2026-09-12 15:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 15:38:48 +0000 UTC FinishedAt: 2026-09-12 16:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55bkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["svc_handle_xprt","svc_recv","svc_add_new_temp_xprt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFSD"],"series_id":"f1fcc181-c84b-4eb3-b67c-a4aa5aeb8b1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 15:38:48 +0000 UTC FinishedAt: 2026-09-12 16:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab30faa9-2fe0-4dae-8cd1-adb5c8ac48be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*87ca4421-44ea-436a-9265-b9dd43be6ab1,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-workflow55bkv/series-workflow55bkv-build-action-2753619137/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-workflow55bkv/series-workflow55bkv-build-action-4169405358/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-workflow55bkv/series-workflow55bkv-convert-artifact-2092989983/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,}