Name: series-workflowsshnz Phase: Succeeded StartedAt: 2026-09-03 16:19:37 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[0] Phase: Succeeded StartedAt: 2026-09-03 16:19:37 +0000 UTC FinishedAt: 2026-09-03 16:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 16:19:37 +0000 UTC FinishedAt: 2026-09-03 16:40:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "b1b8ca04-d945-48c9-a072-06000cd40904" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_pmu_is_valid_msr", "intel_is_valid_msr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcG11X2lzX3ZhbGlkX21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9pc192YWxpZF9tc3ImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGFuZCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCkgZnJvbSB0aGUgZ2VuZXJpYyBrdm1fcG11X2lzX3ZhbGlkX21zcigpIGZ1bmN0aW9uIGludG8gaW50ZWxfaXNfdmFsaWRfbXNyKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDg2MDU2OWZlZjc0NTM3ZTRiZGY0OGEyZWRjNWUxNjg2Yjc2OTdkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5pbmRleCBhN2Q2MGM4Nzg1Y2Q0Li5kMmZkNDdlZTVlYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC04MjMsMTQgJiM0Mzs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIHtcbi1cdHN3aXRjaCAobXNyKSB7XG4tXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4tXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuIFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuIFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5pbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4Nyw2ICYjNDM7MTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKG1zcikge1xuJiM0MztcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuJiM0MztcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbiYjNDM7XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxuIFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxuIFx0XHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xuIFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9pc192YWxpZF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDg2MDU2OWZlZjc0NTM3ZTRiZGY0OGEyZWRjNWUxNjg2Yjc2OTdkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmMKaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9wbXUuYwpAQCAtODIzLDE0ICYjNDM7ODIzLDYgQEAgdm9pZCBrdm1fcG11X2RlbGl2ZXJfcG1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiB7Ci0Jc3dpdGNoIChtc3IpIHsKLQljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzoKLQljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKLQkJcmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KIAlyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8CiAJICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwppbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMKQEAgLTE4Nyw2ICYjNDM7MTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcikKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChtc3IpIHsKJiM0MzsJY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDoKJiM0MzsJY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKIAljYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6CiAJCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7CiAJY2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MgoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNVSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AgYW5kIHRoZSBJbnRlbC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHdlIGNhbiBpZ25vcmUgYW55IHBvdGVudGlhbCAzMi1iaXQgc3BlY2lmaWMgY29uY2VybnMgZm9yIG5vdy4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmV5b25kIGp1c3QgdGhlIGxpbmVzIGluIHRoZSBkaWZmIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCBhIHdpZGVyIHZpZXcuIEkmIzM5O2xsIHJlYWNoIGZvciBteSB0b29scyDigJMgcHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcsIG9yIGlmIEkgbmVlZCBtb3JlIHRhcmdldGVkIGluZm9ybWF0aW9uLCBtYXliZSBldmVuIGBncmVwcGVyYCDigJMgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIHRob3NlIGZpbGVzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBQTVUgKFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTSBmb3IgeDg2LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgd2VyZSB0aGV5IHRyeWluZyB0byBmaXggb3IgaW1wcm92ZT8gV2hhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcbiA4MTY6XHR2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDgxNzpcdHtcbiA4MTg6XHRcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpIHtcbiA4MTk6XHRcdFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcbiA4MjA6XHRcdFx0a3ZtX2FwaWNfbG9jYWxfZGVsaXZlcih2Y3B1LVx1MDAzZWFyY2guYXBpYywgQVBJQ19MVlRQQyk7XG4gODIxOlx0XHR9XG4gODIyOlx0fVxuIDgyMzpcdFxuIDgyNDpcdGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDgyNTpcdHtcbiA4MjY6XHRcdHJldHVybiBrdm1fcG11X2NhbGwobXNyX2lkeF90b19wbWMpKHZjcHUsIG1zcikgfHxcbiA4Mjc6XHRcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xuIDgyODpcdH1cbiA4Mjk6XHRcbiA4MzA6XHRzdGF0aWMgdm9pZCBrdm1fcG11X21hcmtfcG1jX2luX3VzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gODMxOlx0e1xuIDgzMjpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDgzMzpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKTtcbiA4MzQ6XHRcbiA4MzU6XHRcdGlmIChwbWMpXG4gODM2Olx0XHRcdF9fc2V0X2JpdChwbWMtXHUwMDNlaWR4LCBwbXUtXHUwMDNlcG1jX2luX3VzZSk7XG4gODM3Olx0fVxuIDgzODpcdFxuIDgzOTpcdGludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIDg0MDpcdHtcbiA4NDE6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiA4NDI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiA4NDM6XHRcbiA4NDQ6XHRcdHN3aXRjaCAobXNyKSB7XG4gODQ1Olx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbiA4NDY6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDg0NzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZWdsb2JhbF9zdGF0dXM7XG4gODQ4Olx0XHRcdGJyZWFrO1xuIDg0OTpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHJldHVybiByZXQ7XG4gMTgxOlx0fVxuIDE4MjpcdFxuIDE4MzpcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gMTg0Olx0e1xuIDE4NTpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDE4NjpcdFx0dTY0IHBlcmZfY2FwYWJpbGl0aWVzO1xuIDE4NzpcdFx0aW50IHJldDtcbiAxODg6XHRcbiAxODk6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTkwOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbiAxOTE6XHRcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbiAxOTI6XHRcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4gMTkzOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gMTk0Olx0XHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4gMTk1Olx0XHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIDE5NjpcdFx0XHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XG4gMTk3Olx0XHRcdGJyZWFrO1xuIDE5ODpcdFx0Y2FzZSBNU1JfSUEzMl9EU19BUkVBOlxuIDE5OTpcdFx0XHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XG4gMjAwOlx0XHRcdGJyZWFrO1xuIDIwMTpcdFx0Y2FzZSBNU1JfUEVCU19EQVRBX0NGRzpcbiAyMDI6XHRcdFx0cGVyZl9jYXBhYmlsaXRpZXMgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KTtcbiAyMDM6XHRcdFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSBcdTAwMjZcdTAwMjZcbiAyMDQ6XHRcdFx0XHQoKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXHUwMDNlIDMpO1xuIDIwNTpcdFx0XHRicmVhaztcbiAyMDY6XHRcdGRlZmF1bHQ6XG4gMjA3Olx0XHRcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxuIDIwODpcdFx0XHRcdGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9QNl9FVk5UU0VMMCkgfHxcbiAyMDk6XHRcdFx0XHRnZXRfZml4ZWRfcG1jKHBtdSwgbXNyKSB8fCBnZXRfZndfZ3BfcG1jKHBtdSwgbXNyKSB8fFxuIDIxMDpcdFx0XHRcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XG4gMjExOlx0XHRcdGJyZWFrO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIEtWTSBQTVUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL3BtdS5jYCBmaWxlLiBUaGUgb3JpZ2luYWwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBmdW5jdGlvbiwgaW4gdGhhdCBmaWxlLCB1c2VkIHRvIGNvbnRhaW4gYSBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKTogYE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVU2AsIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMYCwgYW5kIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTGAuIFRoZSBmdW5jdGlvbiB0aGVuIHVzZWQgdG8gcmV0dXJuIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtgLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgdGhlc2UgSW50ZWwtc3BlY2lmaWMgTVNSIGNoZWNrcyB3ZXJlIHJlc2lkaW5nIGluICpjb21tb24qIGNvZGUgKGBrdm1fcG11LmNgKS4gVGhpcyBoYWQgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgQU1EIHN5c3RlbXMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGRpcmVjdGx5IHVzaW5nIHRob3NlIEludGVsIFBNVSBmZWF0dXJlcywgaWYgQU1EIGNhbGxlZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbC4KCk5vdywgdGhlIHBhdGNoIGFwcGVhcnMgdG8gaGF2ZSBtb3ZlZCB0aGVzZSBJbnRlbC1zcGVjaWZpYyBjaGVja3MuIFRoZXkmIzM5O3ZlIGJlZW4gc2hpZnRlZCBmcm9tIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgdG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBpbnRlbF9pc192YWxpZF9tc3JgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgc2VwYXJhdGVzIHRoZSBJbnRlbC1zcGVjaWZpYyBsb2dpYy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBBTUQgY29kZSwgaWYgaXQgZXhpc3RzLCBpcyBjb3JyZWN0IG9yIGlmIGl0IGNhbGxzIGBpbnRlbF9pc192YWxpZF9tc3JgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBBTUQgUE1VIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdCBzb21ldGhpbmcgc2ltaWxhciBoYXBwZW5pbmcgdGhlcmUsIGluIGBwbXVfYW1kLmNgIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBJJiMzOTtsbCBzZWFyY2ggZm9yIEFNRCYjMzk7cyBgaXNfdmFsaWRfbXNyYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc192YWxpZF9tc3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cdGNhc2UgTVNSX1A2X0VWTlRTRUwwIC4uLiBNU1JfUDZfRVZOVFNFTDE6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTgzOS1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE4NDA6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xODQxLVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM3Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXHUwMDNlaW5kZXgpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM4LVx0XHRcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5Mi1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3JfaW5mby1cdTAwM2VpbmRleCkpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTQtXHRcdFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyNS17XG5hcmNoL3g4Ni9rdm0vcG11LmMtODI2LVx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuYXJjaC94ODYva3ZtL3BtdS5jOjgyNzpcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgyOC19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTI2PXN0cnVjdCBrdm1fcG11X29wcyB7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oLTMwLVx0aW50ICgqY2hlY2tfcmRwbWNfZWFybHkpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlkeCk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6MzE6XHRib29sICgqaXNfdmFsaWRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5oLTMyLVx0aW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11Lmg9Mjc2PWludCBrdm1fcG11X2NoZWNrX3JkcG1jX2Vhcmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlkeCk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6Mjc3OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcbmFyY2gveDg2L2t2bS9wbXUuaC0yNzgtaW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9OTM9c3RhdGljIHN0cnVjdCBrdm1fcG1jICphbWRfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTAzLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzoxMDQ6c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTEwNS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDctXHQuY2hlY2tfcmRwbWNfZWFybHkgPSBhbWRfY2hlY2tfcmRwbWNfZWFybHksXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jOjMwODpcdC5pc192YWxpZF9tc3IgPSBhbWRfaXNfdmFsaWRfbXNyLFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDktXHQuZ2V0X21zciA9IGFtZF9wbXVfZ2V0X21zcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE2NT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbmRleClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4Mi1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTgzOnN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04Mzc9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgzOS1cdC5tc3JfaWR4X3RvX3BtYyA9IGludGVsX21zcl9pZHhfdG9fcG1jLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4NDA6XHQuaXNfdmFsaWRfbXNyID0gaW50ZWxfaXNfdmFsaWRfbXNyLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04NDEtXHQuZ2V0X21zciA9IGludGVsX3BtdV9nZXRfbXNyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBQTVUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBQTVUgZW11bGF0aW9uIGxvZ2ljLCBmb2N1c2luZyBvbiB0aGUgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGNhbiB0aGlzIGJlICpyZWFjaGVkKiBhbmQgKmZ1enplZCogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kIHN5emthbGxlciBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmU/CgpJIGtub3cgc3l6a2FsbGVyIGhlYXZpbHkgdXRpbGl6ZXMgYC9kZXYva3ZtYCBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9NU1JTYCwgYEtWTV9HRVRfTVNSU2AsIGFuZCBgS1ZNX1JVTmAgKGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24vdmNwdSBNU1IgYWNjZXNzKSB0byBoaXQgS1ZNLCBzbyB0aGUgYW5zd2VyIGlzIGEgY29uZmlkZW50IHllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBiZWluZyBoaXQuIEFuZCB0aGUgcHJlcmVxdWlzaXRlcyDigJMgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgb24gYW1kNjQg4oCTIGFyZSwgb2YgY291cnNlLCBwcmVzZW50LiBJIG1lYW4sIHdlJiMzOTtkIGJlIGhhcmQtcHJlc3NlZCB0byAqbm90KiBoYXZlIHRob3NlIGVuYWJsZWQuCgpTbywgaXMgdGhpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIG9idmlvdXNseSwgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb25zIG1lbnRpb25lZC4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgdG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBjcnVjaWFsIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgS1ZNIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUE1VIGNvZGUgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGZvciB4ODYuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHRvIHNlZSBob3cgYm90aCBgcG11LmNgIOKAkyB3aGljaCBJIGFzc3VtZSBpcyB0aGUgZ2VuZXJpYyBQTVUgbGF5ZXIg4oCTIGFuZCB0aGUgSW50ZWwtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2bXgvcG11X2ludGVsLmNgLCBhcmUgYnVpbHQgYW5kIGxpbmtlZC4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGJ1aWxkIGZsYWdzIHVzZWQsIGFuZCBob3cgdGhlIGRpZmZlcmVudCBQTVUgaW1wbGVtZW50YXRpb25zIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGNvcmUgS1ZNIGJ1aWxkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgVk1YIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMjgxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9Nj1pbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtNy1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTktXHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTE1PWt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTYtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTc6a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xOC1cdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNDprdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTI4LSNpbmNsdWRlIFwmIzM0O3RyYWNlLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjI5OiNpbmNsdWRlIFwmIzM0O3BtdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0zMC0jaW5jbHVkZSBcJiMzNDt4ZW4uaFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jPTM3Nj12b2lkIGt2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUwLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6NDUxOlx0a3ZtX3BtdV9yZWZyZXNoKHZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUyLVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jPTE0MzI9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUyNC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MjU6XHRcdGlmICghZW5hYmxlX3BtdSB8fCAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKSB7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTI2LVx0XHRcdGVudHJ5LVx1MDAzZWVheCA9IGVudHJ5LVx1MDAzZWVieCA9IGVudHJ5LVx1MDAzZWVjeCA9IGVudHJ5LVx1MDAzZWVkeCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUyOS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzA6XHRcdGVheC5zcGxpdC52ZXJzaW9uX2lkID0ga3ZtX3BtdV9jYXAudmVyc2lvbjtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzE6XHRcdGVheC5zcGxpdC5udW1fY291bnRlcnMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTMyOlx0XHRlYXguc3BsaXQuYml0X3dpZHRoID0ga3ZtX3BtdV9jYXAuYml0X3dpZHRoX2dwO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzMzpcdFx0ZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoID0ga3ZtX3BtdV9jYXAuZXZlbnRzX21hc2tfbGVuO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNDpcdFx0ZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZCA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzU6XHRcdGVkeC5zcGxpdC5iaXRfd2lkdGhfZml4ZWQgPSBrdm1fcG11X2NhcC5iaXRfd2lkdGhfZml4ZWQ7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM2LVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNzpcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24pXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM4LVx0XHRcdGVkeC5zcGxpdC5hbnl0aHJlYWRfZGVwcmVjYXRlZCA9IDE7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0MC1cdFx0ZW50cnktXHUwMDNlZWF4ID0gZWF4LmZ1bGw7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTQxOlx0XHRlbnRyeS1cdTAwM2VlYnggPSBrdm1fcG11X2NhcC5ldmVudHNfbWFzaztcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1NDItXHRcdGVudHJ5LVx1MDAzZWVjeCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5MS1cdFx0ZW50cnktXHUwMDNlZWN4ID0gZW50cnktXHUwMDNlZWR4ID0gMDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTI6XHRcdGlmICghZW5hYmxlX3BtdSB8fCAha3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpKSB7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODkzLVx0XHRcdGVudHJ5LVx1MDAzZWVheCA9IGVudHJ5LVx1MDAzZWVieCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5OC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTk6XHRcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xOTAwLVx0XHRlbnRyeS1cdTAwM2VlYnggPSBlYnguZnVsbDtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0LSNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM1OiNpbmNsdWRlIFwmIzM0O3BtdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM2LVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtOC0jaW5jbHVkZSBcJiMzNDttc3JzLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tc3JzLmM6OTojaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21zcnMuYy0xMC0jaW5jbHVkZSBcJiMzNDt0cmFjZS5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYz0xOTE9c3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfYmFzZVtdID0ge1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE3LVxuYXJjaC94ODYva3ZtL21zcnMuYzoyMTg6c3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfcG11W10gPSB7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOS1cdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MjUwPXN0YXRpYyB1MzIgbXNyc190b19zYXZlW0FSUkFZX1NJWkUobXNyc190b19zYXZlX2Jhc2UpICYjNDM7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI1MTpcdFx0XHRBUlJBWV9TSVpFKG1zcnNfdG9fc2F2ZV9wbXUpXTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjUyLXN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9OTA2PXN0YXRpYyBmYXN0cGF0aF90IF9faGFuZGxlX2Zhc3RwYXRoX3dybXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTkwNy17XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjkwODpcdGlmICgha3ZtX3BtdV9pc19mYXN0cGF0aF9lbXVsYXRpb25fYWxsb3dlZCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9tc3JzLmMtOTA5LVx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTMtXHRcdHZjcHUtXHUwMDNlYXJjaC5wZXJmX2NhcGFiaWxpdGllcyA9IGRhdGE7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE0OTQ6XHRcdGt2bV9wbXVfcmVmcmVzaCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTQ5NS1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ0FMQ19JTlRFUkNFUFRTLCB2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxNzU1Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc1NjpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE4MzktXHRkZWZhdWx0OlxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTg0MTpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM2LVx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcdFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVx1MDAzZWluZGV4KSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzODpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzOS1cdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTkyLVx0ZGVmYXVsdDpcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE5MzpcdFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVx1MDAzZWluZGV4KSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE5NDpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5NS1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTI1NjM9c3RhdGljIHZvaWQga3ZtX3Byb2JlX21zcl90b19zYXZlKHUzMiBtc3JfaW5kZXgpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjEzLVx0XHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcdTAwM2U9XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2MTQ6XHRcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3ApXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2MTUtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxOS1cdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwIFx1MDAzZT1cbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYyMDpcdFx0ICAgIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncClcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyMS1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjI1LVx0XHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIFx1MDAzZT1cbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYyNjpcdFx0ICAgIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZClcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyNy1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYz0yNjcwPXZvaWQga3ZtX2luaXRfbXNyX2xpc3RzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc0LVx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2NzU6XHRcdFx0IFwmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCYjMzQ7KTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjY3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2ODMtXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2ODQ6XHRpZiAoZW5hYmxlX3BtdSkge1xuYXJjaC94ODYva3ZtL21zcnMuYzoyNjg1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1zcnNfdG9fc2F2ZV9wbXUpOyBpJiM0MzsmIzQzOylcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NjpcdFx0XHRrdm1fcHJvYmVfbXNyX3RvX3NhdmUobXNyc190b19zYXZlX3BtdVtpXSk7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2ODctXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTI0LSNpbmNsdWRlIFwmIzM0O2xhcGljLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9wbXUuYzoyNTojaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuYXJjaC94ODYva3ZtL3BtdS5jLTI2LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMC0vKiBVbmFkdWx0ZXJlZCBQTVUgY2FwYWJpbGl0aWVzIG9mIHRoZSBob3N0LCBpLmUuIG9mIGhhcmR3YXJlLiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjMxOnN0YXRpYyBzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5IF9fcmVhZF9tb3N0bHkga3ZtX2hvc3RfcG11O1xuYXJjaC94ODYva3ZtL3BtdS5jLTMyLVxuYXJjaC94ODYva3ZtL3BtdS5jLTMzLS8qIEtWTSYjMzk7cyBQTVUgY2FwYWJpbGl0aWVzLCBpLmUuIHRoZSBpbnRlcnNlY3Rpb24gb2YgS1ZNIGFuZCBoYXJkd2FyZSBzdXBwb3J0LiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjM0OnN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgX19yZWFkX21vc3RseSBrdm1fcG11X2NhcDtcbmFyY2gveDg2L2t2bS9wbXUuYzozNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9jYXApO1xuYXJjaC94ODYva3ZtL3BtdS5jLTM2LVxuYXJjaC94ODYva3ZtL3BtdS5jLTM3LS8qIEVuYWJsZS9kaXNhYmxlIFBNVSB2aXJ0dWFsaXphdGlvbiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjM4OmJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfcG11ID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9wbXUuYzozOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZW5hYmxlX3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NDA6bW9kdWxlX3BhcmFtKGVuYWJsZV9wbXUsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQxLVxuYXJjaC94ODYva3ZtL3BtdS5jLTQyLS8qIEVuYWJsZS9kaXNhYmxlZCBtZWRpYXRlZCBQTVUgdmlydHVhbGl6YXRpb24uICovXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NDQ6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGVuYWJsZV9tZWRpYXRlZF9wbXUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjQ2OnN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIge1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ3LVx0X191MzIgYWN0aW9uO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy01Ny1cbmFyY2gveDg2L2t2bS9wbXUuYzo1ODpzdHJ1Y3Qga3ZtX3BtdV9lbXVsYXRlZF9ldmVudF9zZWxlY3RvcnMge1xuYXJjaC94ODYva3ZtL3BtdS5jLTU5LVx0dTY0IElOU1RSVUNUSU9OU19SRVRJUkVEO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02MS19O1xuYXJjaC94ODYva3ZtL3BtdS5jOjYyOnN0YXRpYyBzdHJ1Y3Qga3ZtX3BtdV9lbXVsYXRlZF9ldmVudF9zZWxlY3RvcnMgX19yZWFkX21vc3RseSBrdm1fcG11X2V2ZW50c2VsO1xuYXJjaC94ODYva3ZtL3BtdS5jLTYzLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdm14X3BlYnNfcGRpc3RfY3B1W10gPSB7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTgzLSAqICAgaW4gZml4ZWRfY291bnRlcnNbXSByZXNwZWN0aXZlbHkuIEJvdGggb2YgdGhlbSBhcmUgcGFydCBvZiBcJiMzNDtzdHJ1Y3RcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDogKiAgIGt2bV9wbXVcJiMzNDs7XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODU6ICogLSBwbXUuYyB1bmRlcnN0YW5kcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGdwIGNvdW50ZXJzIGFuZCBmaXhlZCBjb3VudGVycy5cbmFyY2gveDg2L2t2bS9wbXUuYy04Ni0gKiAgIEhvd2V2ZXIgQU1EIGRvZXNuJiMzOTt0IHN1cHBvcnQgZml4ZWQtY291bnRlcnM7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTEwNi1cbmFyY2gveDg2L2t2bS9wbXUuYzoxMDc6c3RhdGljIHN0cnVjdCBrdm1fcG11X29wcyBrdm1fcG11X29wcyBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYva3ZtL3BtdS5jLTEwOC1cbmFyY2gveDg2L2t2bS9wbXUuYy0xMDktI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKVx0XHRcdFx0XHQgICAgIFxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTEwOlx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9wbXVfIyNmdW5jLFx0XHRcdCAgICAgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTE6XHRcdFx0XHQqKCgoc3RydWN0IGt2bV9wbXVfb3BzICopMCktXHUwMDNlZnVuYykpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTExMi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMIEtWTV9YODZfUE1VX09QXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTEzLSNkZWZpbmUgS1ZNX1g4Nl9QTVVfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X1BNVV9PUFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNDojaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTU6RVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X3BtdV9wbWNfaXNfZGlzYWJsZWRfaW5fY3VycmVudF9tb2RlKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTYtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTE3OnZvaWQga3ZtX3BtdV9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTgte1xuYXJjaC94ODYva3ZtL3BtdS5jOjExOTpcdG1lbWNweShcdTAwMjZrdm1fcG11X29wcywgcG11X29wcywgc2l6ZW9mKGt2bV9wbXVfb3BzKSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTIwLVxuYXJjaC94ODYva3ZtL3BtdS5jLTEyMS0jZGVmaW5lIF9fS1ZNX1g4Nl9QTVVfT1AoZnVuYykgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjI6XHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9wbXVfIyNmdW5jLCBrdm1fcG11X29wcy5mdW5jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjMtI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKSBcXFxuYXJjaC94ODYva3ZtL3BtdS5jOjEyNDpcdFdBUk5fT04oIWt2bV9wbXVfb3BzLmZ1bmMpOyBfX0tWTV9YODZfUE1VX09QKGZ1bmMpXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTI1LSNkZWZpbmUgS1ZNX1g4Nl9QTVVfT1BfT1BUSU9OQUwgX19LVk1fWDg2X1BNVV9PUFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyNi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjc6XHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9wbXVfIyNmdW5jLCAodm9pZCAqKWt2bV9wbXVfb3BzLmZ1bmMgPyA6IFxcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTI4LVx0XHRcdFx0XHQgICAgICAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xuYXJjaC94ODYva3ZtL3BtdS5jOjEyOTojaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzAtI3VuZGVmIF9fS1ZNX1g4Nl9QTVVfT1Bcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMyLVxuYXJjaC94ODYva3ZtL3BtdS5jOjEzMzp2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzQte1xuYXJjaC94ODYva3ZtL3BtdS5jLTEzNS1cdGJvb2wgaXNfaW50ZWwgPSBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTDtcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzY6XHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVx1MDAzZU1JTl9OUl9HUF9DT1VOVEVSUztcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzctXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE0NC1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0hZQlJJRF9DUFUpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ1Olx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ2Olx0XHRtZW1zZXQoXHUwMDI2a3ZtX2hvc3RfcG11LCAwLCBzaXplb2Yoa3ZtX2hvc3RfcG11KSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ3LVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9wbXUuYzoxNDg6XHRcdHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShcdTAwMjZrdm1faG9zdF9wbXUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE0OS1cdH1cbmFyY2gveDg2L2t2bS9wbXUuYy0xNTAtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTUxOlx0aWYgKGVuYWJsZV9wbXUpIHtcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTItXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE1Ny1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU4Olx0XHRpZiAoIWt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZ3AgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNTk6XHRcdCAgICBXQVJOX09OX09OQ0Uoa3ZtX2hvc3RfcG11Lm51bV9jb3VudGVyc19ncCBcdTAwM2MgbWluX25yX2dwX2N0cnMpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2MDpcdFx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYxOlx0XHRlbHNlIGlmIChpc19pbnRlbCBcdTAwMjZcdTAwMjYgIWt2bV9ob3N0X3BtdS52ZXJzaW9uKVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2MjpcdFx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYzLVx0fVxuYXJjaC94ODYva3ZtL3BtdS5jLTE2NC1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNjU6XHRpZiAoIWVuYWJsZV9wbXUgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHwgIWt2bV9ob3N0X3BtdS5tZWRpYXRlZCB8fFxuYXJjaC94ODYva3ZtL3BtdS5jOjE2NjpcdCAgICAhcG11X29wcy1cdTAwM2Vpc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkKFx1MDAyNmt2bV9ob3N0X3BtdSkpXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY3Olx0XHRlbmFibGVfbWVkaWF0ZWRfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2OTpcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzA6XHRcdHBtdV9vcHMtXHUwMDNld3JpdGVfZ2xvYmFsX2N0cmwgPSBOVUxMO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE3MS1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNzI6XHRpZiAoIWVuYWJsZV9wbXUpIHtcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzM6XHRcdG1lbXNldChcdTAwMjZrdm1fcG11X2NhcCwgMCwgc2l6ZW9mKGt2bV9wbXVfY2FwKSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTc0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE3Ni1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNzc6XHRtZW1jcHkoXHUwMDI2a3ZtX3BtdV9jYXAsIFx1MDAyNmt2bV9ob3N0X3BtdSwgc2l6ZW9mKGt2bV9ob3N0X3BtdSkpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjE3ODpcdGt2bV9wbXVfY2FwLnZlcnNpb24gPSBtaW4oa3ZtX3BtdV9jYXAudmVyc2lvbiwgMik7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc5Olx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncCxcbmFyY2gveDg2L2t2bS9wbXUuYzoxODA6XHRcdFx0XHRcdCAgcG11X29wcy1cdTAwM2VNQVhfTlJfR1BfQ09VTlRFUlMpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjE4MTpcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IG1pbihrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQsXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTgyLVx0XHRcdFx0XHQgICAgIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE4My1cbmFyY2gveDg2L2t2bS9wbXUuYzoxODQ6XHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cbmFyY2gveDg2L2t2bS9wbXUuYy0xODUtXHRcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyk7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg2Olx0a3ZtX3BtdV9ldmVudHNlbC5CUkFOQ0hfSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxuYXJjaC94ODYva3ZtL3BtdS5jLTE4Ny1cdFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTE5MD12b2lkIGt2bV9oYW5kbGVfZ3Vlc3RfbWVkaWF0ZWRfcG1pKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE5My1cbmFyY2gveDg2L2t2bS9wbXUuYzoxOTQ6XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1IHx8ICFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKSlcbmFyY2gveDg2L2t2bS9wbXUuYy0xOTUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBrdm1fcG1jICpwbWMsIGJvb2wgaW5fcG1pKVxuYXJjaC94ODYva3ZtL3BtdS5jLTIwMS17XG5hcmNoL3g4Ni9rdm0vcG11LmM6MjAyOlx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0yMDMtXHRib29sIHNraXBfcG1pID0gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTIxNi1cdFx0XHRza2lwX3BtaSA9IF9fdGVzdF9hbmRfc2V0X2JpdChHTE9CQUxfU1RBVFVTX0JVRkZFUl9PVkZfQklULFxuYXJjaC94ODYva3ZtL3BtdS5jOjIxNzpcdFx0XHRcdFx0XHQgICAgICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0yMTgtXHRcdH1cbmFyY2gveDg2L2t2bS9wbXUuYy0yMTktXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3BtdS5jOjIyMDpcdFx0X19zZXRfYml0KHBtYy1cdTAwM2VpZHgsICh1bnNpZ25lZCBsb25nICopXHUwMDI2cG11LVx1MDAzZWdsb2JhbF9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTIyMS1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjI3PXN0YXRpYyB2b2lkIGt2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0yMzctXHQgKi9cbmFyY2gveDg2L2t2bS9wbXUuYzoyMzg6XHRpZiAodGVzdF9hbmRfc2V0X2JpdChwbWMtXHUwMDNlaWR4LCBwbWNfdG9fcG11KHBtYyktXHUwMDNlcmVwcm9ncmFtX3BtaSkpXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjM5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTI3Nz1zdGF0aWMgaW50IHBtY19yZXByb2dyYW1fY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jLCB1MzIgdHlwZSwgdTY0IGNvbmZpZyxcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjgwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzoyODE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTI4Mi1cdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjkyLVx0fTtcbmFyY2gveDg2L2t2bS9wbXUuYzoyOTM6XHRib29sIHBlYnMgPSB0ZXN0X2JpdChwbWMtXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBtdS1cdTAwM2VwZWJzX2VuYWJsZSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMjk0LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMTgtXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuYXJjaC94ODYva3ZtL3BtdS5jOjMxOTpcdFx0cHJfZGVidWdfcmF0ZWxpbWl0ZWQoXCYjMzQ7a3ZtX3BtdTogZXZlbnQgY3JlYXRpb24gZmFpbGVkICVsZCBmb3IgcG1jLVx1MDAzZWlkeCA9ICVkXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3BtdS5jLTMyMC1cdFx0XHQgICAgUFRSX0VSUihldmVudCksIHBtYy1cdTAwM2VpZHgpO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMjQtXHRwbWMtXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xuYXJjaC94ODYva3ZtL3BtdS5jOjMyNTpcdHBtY190b19wbXUocG1jKS1cdTAwM2VldmVudF9jb3VudCYjNDM7JiM0Mzs7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMzI2LVx0cG1jLVx1MDAzZWlzX3BhdXNlZCA9IGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz0zNTc9c3RhdGljIGJvb2wgcG1jX3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTM2Ny1cbmFyY2gveDg2L2t2bS9wbXUuYzozNjg6XHRpZiAodGVzdF9iaXQocG1jLVx1MDAzZWlkeCwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwbWNfdG9fcG11KHBtYyktXHUwMDNlcGVic19lbmFibGUpICE9XG5hcmNoL3g4Ni9rdm0vcG11LmMtMzY5LVx0ICAgICghIXBtYy1cdTAwM2VwZXJmX2V2ZW50LVx1MDAzZWF0dHIucHJlY2lzZV9pcCkpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTM3OT1zdGF0aWMgdm9pZCBwbWNfcmVsZWFzZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTM4NC1cdFx0cG1jLVx1MDAzZWN1cnJlbnRfY29uZmlnID0gMDtcbmFyY2gveDg2L2t2bS9wbXUuYzozODU6XHRcdHBtY190b19wbXUocG1jKS1cdTAwM2VldmVudF9jb3VudC0tO1xuYXJjaC94ODYva3ZtL3BtdS5jLTM4Ni1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9NDA3PXZvaWQgcG1jX3dyaXRlX2NvdW50ZXIoc3RydWN0IGt2bV9wbWMgKnBtYywgdTY0IHZhbClcbmFyY2gveDg2L2t2bS9wbXUuYy00MDgte1xuYXJjaC94ODYva3ZtL3BtdS5jOjQwOTpcdGlmIChrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHBtYy1cdTAwM2V2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3BtdS5jLTQxMC1cdFx0cG1jLVx1MDAzZWNvdW50ZXIgPSB2YWwgXHUwMDI2IHBtY19iaXRtYXNrKHBtYyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTQ3Nj1zdGF0aWMgYm9vbCBmaWx0ZXJfY29udGFpbnNfbWF0Y2godTY0ICpldmVudHMsIHU2NCBuZXZlbnRzLCB1NjQgZXZlbnRzZWwpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDc3LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo0Nzg6XHR1NjQgZXZlbnRfc2VsZWN0ID0gZXZlbnRzZWwgXHUwMDI2IGt2bV9wbXVfb3BzLkVWRU5UU0VMX0VWRU5UO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ3OS1cdHU2NCB1bWFzayA9IGV2ZW50c2VsIFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVU1BU0s7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTUwOC1cbmFyY2gveDg2L2t2bS9wbXUuYzo1MDk6c3RhdGljIGJvb2wgaXNfZ3BfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZXZlbnRfZmlsdGVyICpmLFxuYXJjaC94ODYva3ZtL3BtdS5jLTUxMC1cdFx0XHRcdHU2NCBldmVudHNlbClcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTE4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjUxOTpzdGF0aWMgYm9vbCBpc19maXhlZF9ldmVudF9hbGxvd2VkKHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmZpbHRlcixcbmFyY2gveDg2L2t2bS9wbXUuYy01MjAtXHRcdFx0XHQgICBpbnQgaWR4KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz01MzQ9c3RhdGljIGJvb2wgcG1jX2lzX2V2ZW50X2FsbG93ZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcbmFyY2gveDg2L2t2bS9wbXUuYy01MzUte1xuYXJjaC94ODYva3ZtL3BtdS5jOjUzNjpcdHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmZpbHRlcjtcbmFyY2gveDg2L2t2bS9wbXUuYy01MzctXHRzdHJ1Y3Qga3ZtICprdm0gPSBwbWMtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTM4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjUzOTpcdGZpbHRlciA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLVx1MDAzZWFyY2gucG11X2V2ZW50X2ZpbHRlciwgXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU0MC1cdGlmICghZmlsdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy01NDgtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTQ5OnN0YXRpYyB2b2lkIGt2bV9tZWRpYXRlZF9wbXVfcmVmcmVzaF9ldmVudF9maWx0ZXIoc3RydWN0IGt2bV9wbWMgKnBtYylcbmFyY2gveDg2L2t2bS9wbXUuYy01NTAte1xuYXJjaC94ODYva3ZtL3BtdS5jLTU1MS1cdGJvb2wgYWxsb3dlZCA9IHBtY19pc19sb2NhbGx5X2VuYWJsZWQocG1jKSBcdTAwMjZcdTAwMjYgcG1jX2lzX2V2ZW50X2FsbG93ZWQocG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYzo1NTI6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU1My1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYxLVxuYXJjaC94ODYva3ZtL3BtdS5jOjU2MjpcdFx0cG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsX2h3IFx1MDAyNj0gfm1hc2s7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYzLVx0XHRpZiAoYWxsb3dlZClcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjQ6XHRcdFx0cG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsX2h3IHw9IHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybCBcdTAwMjYgbWFzaztcbmFyY2gveDg2L2t2bS9wbXUuYy01NjUtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTU2OD1zdGF0aWMgaW50IHJlcHJvZ3JhbV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTY5LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzA6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU3MS1cdHU2NCBldmVudHNlbCA9IHBtYy1cdTAwM2VldmVudHNlbDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjU3NjpcdGlmIChrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHBtdV90b192Y3B1KHBtdSkpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NTc3Olx0XHRrdm1fbWVkaWF0ZWRfcG11X3JlZnJlc2hfZXZlbnRfZmlsdGVyKHBtYyk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc4LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTkwLVx0aWYgKGV2ZW50c2VsIFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfUElOX0NPTlRST0wpXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTkxOlx0XHRwcmludGtfb25jZShcJiMzNDtrdm0gcG11OiBwaW4gY29udHJvbCBiaXQgaXMgaWdub3JlZFxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTkyLVxuYXJjaC94ODYva3ZtL3BtdS5jLTU5My1cdGlmIChwbWNfaXNfZml4ZWQocG1jKSkge1xuYXJjaC94ODYva3ZtL3BtdS5jOjU5NDpcdFx0Zml4ZWRfY3RyX2N0cmwgPSBmaXhlZF9jdHJsX2ZpZWxkKHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybCxcbmFyY2gveDg2L2t2bS9wbXUuYy01OTUtXHRcdFx0XHRcdFx0ICBwbWMtXHUwMDNlaWR4IC0gS1ZNX0ZJWEVEX1BNQ19CQVNFX0lEWCk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTYxMi1cdHJldHVybiBwbWNfcmVwcm9ncmFtX2NvdW50ZXIocG1jLCBQRVJGX1RZUEVfUkFXLFxuYXJjaC94ODYva3ZtL3BtdS5jOjYxMzpcdFx0XHRcdCAgICAgKGV2ZW50c2VsIFx1MDAyNiBwbXUtXHUwMDNlcmF3X2V2ZW50X21hc2spLFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxNC1cdFx0XHRcdCAgICAgIShldmVudHNlbCBcdTAwMjYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUiksXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTYxOT1zdGF0aWMgYm9vbCBwbWNfaXNfZXZlbnRfbWF0Y2goc3RydWN0IGt2bV9wbWMgKnBtYywgdTY0IGV2ZW50c2VsKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02MzctXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjM4OnZvaWQga3ZtX3BtdV9yZWNhbGNfcG1jX2VtdWxhdGlvbihzdHJ1Y3Qga3ZtX3BtdSAqcG11LCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuYXJjaC94ODYva3ZtL3BtdS5jLTYzOS17XG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQwOlx0Yml0bWFwX2NsZWFyKHBtdS1cdTAwM2VwbWNfY291bnRpbmdfaW5zdHJ1Y3Rpb25zLCBwbWMtXHUwMDNlaWR4LCAxKTtcbmFyY2gveDg2L2t2bS9wbXUuYzo2NDE6XHRiaXRtYXBfY2xlYXIocG11LVx1MDAzZXBtY19jb3VudGluZ19icmFuY2hlcywgcG1jLVx1MDAzZWlkeCwgMSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjQyLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02NTEtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjUyOlx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1MzpcdFx0Yml0bWFwX3NldChwbXUtXHUwMDNlcG1jX2NvdW50aW5nX2luc3RydWN0aW9ucywgcG1jLVx1MDAzZWlkeCwgMSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU0LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1NTpcdGlmIChwbWNfaXNfZXZlbnRfbWF0Y2gocG1jLCBrdm1fcG11X2V2ZW50c2VsLkJSQU5DSF9JTlNUUlVDVElPTlNfUkVUSVJFRCkpXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2Olx0XHRiaXRtYXBfc2V0KHBtdS1cdTAwM2VwbWNfY291bnRpbmdfYnJhbmNoZXMsIHBtYy1cdTAwM2VpZHgsIDEpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTY1Ny19XG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NTktXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjYwOnZvaWQga3ZtX3BtdV9oYW5kbGVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3BtdS5jLTY2MS17XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjYyLVx0REVDTEFSRV9CSVRNQVAoYml0bWFwLCBYODZfUE1DX0lEWF9NQVgpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjY2MzpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NjQtXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02NjYtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjY3Olx0Yml0bWFwX2NvcHkoYml0bWFwLCBwbXUtXHUwMDNlcmVwcm9ncmFtX3BtaSwgWDg2X1BNQ19JRFhfTUFYKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NjgtXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTY3NC1cdEJVSUxEX0JVR19PTihzaXplb2YoYml0bWFwKSAhPSBzaXplb2YoYXRvbWljNjRfdCkpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjY3NTpcdGF0b21pYzY0X2FuZG5vdCgqKHM2NCAqKWJpdG1hcCwgXHUwMDI2cG11LVx1MDAzZV9fcmVwcm9ncmFtX3BtaSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc2LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY3NzpcdGt2bV9mb3JfZWFjaF9wbWMocG11LCBwbWMsIGJpdCwgYml0bWFwKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc4LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02ODQtXHRcdGlmIChyZXByb2dyYW1fY291bnRlcihwbWMpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjY4NTpcdFx0XHRzZXRfYml0KHBtYy1cdTAwM2VpZHgsIHBtdS1cdTAwM2VyZXByb2dyYW1fcG1pKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02ODYtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTY5Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjY5MzpcdGlmICh1bmxpa2VseShwbXUtXHUwMDNlbmVlZF9jbGVhbnVwKSlcbmFyY2gveDg2L2t2bS9wbXUuYzo2OTQ6XHRcdGt2bV9wbXVfY2xlYW51cCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy02OTUtXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk2Olx0a3ZtX2Zvcl9lYWNoX3BtYyhwbXUsIHBtYywgYml0LCBiaXRtYXApXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk3Olx0XHRrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKHBtdSwgcG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02OTgtfVxuYXJjaC94ODYva3ZtL3BtdS5jOjY5OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9oYW5kbGVfZXZlbnQpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTcwMC1cbmFyY2gveDg2L2t2bS9wbXUuYzo3MDE6aW50IGt2bV9wbXVfY2hlY2tfcmRwbWNfZWFybHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KVxuYXJjaC94ODYva3ZtL3BtdS5jLTcwMi17XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTcxMC1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjcxMTpcdGlmICgha3ZtX3BtdV9vcHMuY2hlY2tfcmRwbWNfZWFybHkpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEyLVx0XHRyZXR1cm4gMDtcbmFyY2gveDg2L2t2bS9wbXUuYy03MTMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzE0Olx0cmV0dXJuIGt2bV9wbXVfY2FsbChjaGVja19yZHBtY19lYXJseSkodmNwdSwgaWR4KTtcbmFyY2gveDg2L2t2bS9wbXUuYy03MTUtfVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz03MTc9Ym9vbCBpc192bXdhcmVfYmFja2Rvb3JfcG1jKHUzMiBwbWNfaWR4KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03MjctXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzI4OnN0YXRpYyBpbnQga3ZtX3BtdV9yZHBtY192bXdhcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpZHgsIHU2NCAqZGF0YSlcbmFyY2gveDg2L2t2bS9wbXUuYy03Mjkte1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03NTAtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzUxOmludCBrdm1fcG11X3JkcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaWR4LCB1NjQgKmRhdGEpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzUyLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo3NTM6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU0LVx0c3RydWN0IGt2bV9wbWMgKnBtYztcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU2LVxuYXJjaC94ODYva3ZtL3BtdS5jOjc1NzpcdGlmICghcG11LVx1MDAzZXZlcnNpb24pXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU4LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYwLVx0aWYgKGlzX3Ztd2FyZV9iYWNrZG9vcl9wbWMoaWR4KSlcbmFyY2gveDg2L2t2bS9wbXUuYzo3NjE6XHRcdHJldHVybiBrdm1fcG11X3JkcG1jX3Ztd2FyZSh2Y3B1LCBpZHgsIGRhdGEpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTc2Mi1cbmFyY2gveDg2L2t2bS9wbXUuYzo3NjM6XHRwbWMgPSBrdm1fcG11X2NhbGwocmRwbWNfZWN4X3RvX3BtYykodmNwdSwgaWR4LCBcdTAwMjZtYXNrKTtcbmFyY2gveDg2L2t2bS9wbXUuYy03NjQtXHRpZiAoIXBtYylcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzc2PXN0YXRpYyBib29sIGt2bV9uZWVkX2FueV9wbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9wbXUuYy03Nzcte1xuYXJjaC94ODYva3ZtL3BtdS5jOjc3ODpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy03NzktXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzgwOlx0aWYgKCFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKVxuYXJjaC94ODYva3ZtL3BtdS5jLTc4MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTc4Ny1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjc4ODpcdHJldHVybiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycyAhPSBrdm1faG9zdF9wbXUubnVtX2NvdW50ZXJzX2dwIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzg5Olx0ICAgICAgIHBtdS1cdTAwM2Vucl9hcmNoX2ZpeGVkX2NvdW50ZXJzICE9IGt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNzkwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzkyPWJvb2wga3ZtX25lZWRfcGVyZl9nbG9iYWxfY3RybF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03OTQtXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzo3OTU6XHQgICAgICAgIWt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTc5Ni19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTc5OT1ib29sIGt2bV9uZWVkX3JkcG1jX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MDE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODAyLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MTAtXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzo4MTE6XHQgICAgICAgcG11LVx1MDAzZWNvdW50ZXJfYml0bWFza1tLVk1fUE1DX0dQXSAhPSAoQklUX1VMTChrdm1faG9zdF9wbXUuYml0X3dpZHRoX2dwKSAtIDEpIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODEyOlx0ICAgICAgIHBtdS1cdTAwM2Vjb3VudGVyX2JpdG1hc2tbS1ZNX1BNQ19GSVhFRF0gIT0gKEJJVF9VTEwoa3ZtX2hvc3RfcG11LmJpdF93aWR0aF9maXhlZCkgLSAxKTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTMtfVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxND1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX25lZWRfcmRwbWNfaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTUtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODE2OnZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODE3LXtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTgtXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODE5Olx0XHRrdm1fcG11X2NhbGwoZGVsaXZlcl9wbWkpKHZjcHUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgyMC1cdFx0a3ZtX2FwaWNfbG9jYWxfZGVsaXZlcih2Y3B1LVx1MDAzZWFyY2guYXBpYywgQVBJQ19MVlRQQyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cbmFyY2gveDg2L2t2bS9wbXUuYzo4MjQ6Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODI1LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MjY6XHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI3Olx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODI4LX1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjktXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODMwOnN0YXRpYyB2b2lkIGt2bV9wbXVfbWFya19wbWNfaW5fdXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbmFyY2gveDg2L2t2bS9wbXUuYy04MzEte1xuYXJjaC94ODYva3ZtL3BtdS5jOjgzMjpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MzM6XHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jID0ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgzNC1cbmFyY2gveDg2L2t2bS9wbXUuYy04MzUtXHRpZiAocG1jKVxuYXJjaC94ODYva3ZtL3BtdS5jOjgzNjpcdFx0X19zZXRfYml0KHBtYy1cdTAwM2VpZHgsIHBtdS1cdTAwM2VwbWNfaW5fdXNlKTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MzctfVxuYXJjaC94ODYva3ZtL3BtdS5jLTgzOC1cbmFyY2gveDg2L2t2bS9wbXUuYzo4Mzk6aW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODQyLVx0dTMyIG1zciA9IG1zcl9pbmZvLVx1MDAzZWluZGV4O1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04NDYtXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDc6XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1cztcbmFyY2gveDg2L2t2bS9wbXUuYy04NDgtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04NTAtXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODUxOlx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZWdsb2JhbF9jdHJsO1xuYXJjaC94ODYva3ZtL3BtdS5jLTg1Mi1cdFx0YnJlYWs7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNzcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1TUiBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBNU1IgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGUgY3VycmVudCB2ZW5kb3ItYWdub3N0aWMgZnVuY3Rpb24sIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIGlzIHRoZSB0YXJnZXQgZm9yIG1vdmluZyB0aGUgdmFsaWRhdGlvbiBvZiB0aGVzZSBwYXJ0aWN1bGFyIE1TUnMuIEluc3RlYWQsIHRoaXMgcGF0Y2ggcHJvcG9zZXMgdG8gc2hpZnQgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmNoaXRlY3R1cmFsIHNlcGFyYXRpb24uIEdpdmVuIHRoZSBoaXN0b3J5LCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBjb21wb25lbnRzLCB3aGF0IGlzIHRoZSBpbXBhY3Q/IFRoZSBjaGFuZ2UgY2xlYXJseSBhaW1zIGZvciBhIG1vcmUgZ3JhbnVsYXIsIHZlbmRvci1zcGVjaWZpYyBhcHByb2FjaCB0byB2YWxpZGF0aW9uLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBudWFuY2VkIGJlaGF2aW9yIG9yIHJlcXVpcmVtZW50cyB3aXRoaW4gSW50ZWwmIzM5O3MgUE1VIGltcGxlbWVudGF0aW9uIHRoYXQgaXNuJiMzOTt0IGVhc2lseSByZXByZXNlbnRlZCBpbiBhIGdlbmVyaWMgbWFubmVyLgoKTm93IEkgbmVlZCB0byBzZWUgaG93IEFNRCBoYW5kbGVzIHRoZXNlIE1TUnMgKG9yIGlmIHRoZXkgYXJlIGV2ZW4gcmVsZXZhbnQgdG8gdGhlaXIgUE1VKS4gSSYjMzk7bGwganVtcCBvdmVyIHRvIGBwbXVfYW1kLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXBwcm9hY2ggdGhpcyB2YWxpZGF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IGNvbnRleHR1YWxpemUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGluIHJlc3BvbnNpYmlsaXRpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBsb29raW5nIGF0IGJvdGggc2lkZXMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdHJldHVybiBwbWM7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDEwNTpcdHtcbiAxMDY6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTA5Olx0XHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxuIDExMDpcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDA7XG4gMTExOlx0XHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxuIDExMjpcdFx0XHRyZXR1cm4gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKTtcbiAxMTM6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDExNDpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4gMTE1Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19DTFI6XG4gMTE2Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19TRVQ6XG4gMTE3Olx0XHRcdHJldHVybiBwbXUtXHUwMDNldmVyc2lvbiBcdTAwM2UgMTtcbiAxMTg6XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdGlmIChtc3IgXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcdTAwMjZcdTAwMjZcbiAxMjA6XHRcdFx0ICAgIG1zciBcdTAwM2MgTVNSX0YxNUhfUEVSRl9DVEwwICYjNDM7IDIgKiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycylcbiAxMjE6XHRcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDE7XG4gMTIyOlx0XHRcdGJyZWFrO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gMTI5Olx0e1xuIDEzMDpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDEzMTpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYztcbiAxMzI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qIE1TUl9QRVJGQ1RSbiAqL1xuIDEzNTpcdFx0cG1jID0gZ2V0X2dwX3BtY19hbWQocG11LCBtc3IsIFBNVV9UWVBFX0NPVU5URVIpO1xuIDEzNjpcdFx0aWYgKHBtYykge1xuIDEzNzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xuIDEzODpcdFx0XHRyZXR1cm4gMDtcbiAxMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBLVk0mIzM5O3MgTVNSIFZhbGlkYXRpb246IEEgUHJvbWlzaW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiBLVk0mIzM5O3MgTVNSIGhhbmRsaW5nIHRoYXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGdvb2QgZnV6emluZyB0YXJnZXQuIFRoZSBwYXRoIHN0YXJ0cyB3aXRoIGBpbnRlbF9pc192YWxpZF9tc3JgIGFuZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLCBhbmQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiBhIGd1ZXN0IG9yIHVzZXJzcGFjZSBpcyBtZXNzaW5nIHdpdGggdGhvc2UgY3J1Y2lhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGVzZSBNU1JzIGFyZSBhY2Nlc3NlZCB2aWEgYHJkbXNyYCAvIGB3cm1zcmAgaW5zdHJ1Y3Rpb25zIG9yIHRocm91Z2ggYC9kZXYva3ZtYCB1c2luZyBgS1ZNX1NFVF9NU1JTYCAvIGBLVk1fR0VUX01TUlNgLCB3aGljaCwgaW4gdHVybiwgZ29lcyB0aHJvdWdoIGBrdm1fZ2V0X21zcl9jb21tb25gIC8gYGt2bV9zZXRfbXNyX2NvbW1vbmAgYW5kIGZpbmFsbHkgY2FsbHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgLgoKUHJldmlvdXNseSwgSSB0aGluaywgb24gQU1EIHN5c3RlbXMgKFNWTSksIGBrdm1fcG11X2lzX3ZhbGlkX21zcigpYCBjaGVja2VkIHNwZWNpZmljYWxseSBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybCgpYCBmdW5jdGlvbiwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgaWYgYW4gSW50ZWwgTVNSIHdhcyBhY2Nlc3NlZC4gTm93LCB0aGF0IGxvZ2ljIGhhcyBiZWVuIGdlbmVyYWxpemVkIHZpYSBga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcilgLiBPbiBBTUQsIGBhbWRfaXNfdmFsaWRfbXNyYCB3b3VsZCByZWplY3QgdGhvc2UgSW50ZWwgTVNScywgd2hpbGUgb24gSW50ZWwsIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYGludGVsX2lzX3ZhbGlkX21zcmAsIGlzIGdvaW5nIHRvIGNoZWNrIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSlgLgoKVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSB0aGlzIHRvdWNoIGlzIGxvY2F0ZWQgaW4gdGhlIGB2aXJ0L2t2bS9hcmNoL3g4NmAgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGtlcm5lbCBjb2RlIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogS1ZNJiMzOTtzIHg4NiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggUUVNVSBhbmQgc3l6a2FsbGVyLCBzbyBjaGVjayEgQ29yZSBTdWJzeXN0ZW1zIG9yIEtWTTogWWVzLCB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gS1ZNLCBzbyBjaGVjayEgVGhhdCBtZWFucyBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkPyBXZSYjMzk7bGwgbmVlZCBgS1ZNYCBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBgS1ZNX0lOVEVMYC4gVGhlIGNvZGUsIGluIGBwbXVfaW50ZWwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcHRocyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBjb25maWcgS1ZNX0lOVEVMYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIHdlYiBvZiBkZXBlbmRlbmNpZXMgYXJvdW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGFsb25nc2lkZSBgS1ZNX0lOVEVMYCwgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSB3aWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzk0CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDY3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gUE1VIE1TUiBWYWxpZGF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCAob3IgYEtWTV9BTURgLCBvZiBjb3Vyc2UsIHRob3VnaCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2ggbGVhbnMgdG93YXJkcyBJbnRlbCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4KCkZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEZyb20gdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoZSBjaGFuZ2VzIGRpcmVjdGx5IGltcGFjdDogYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzIHRoYXQgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGU6IEkgbmVlZCB0byBjb25zaWRlciBga3ZtX3BtdV9nZXRfbXNyYCwgYGt2bV9wbXVfc2V0X21zcmAsIGBrdm1fc2V0X21zcl9jb21tb25gLCBhbmQgYGt2bV9nZXRfbXNyX2NvbW1vbmAuIFRoZXNlICpjb3VsZCogYmUgYWZmZWN0ZWQsIHRob3VnaCBwZXJoYXBzIGluZGlyZWN0bHkuCgpga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCBgaW50ZWxfaXNfdmFsaWRfbXNyYCBhcmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uLiBMZXQgbWUgY2hlY2sgaWYgYGludGVsX2lzX3ZhbGlkX21zcmAgaXMgc3RhdGljIG9yIG5vdC4gTG9va2luZyBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zciguLi4pYC4gQWhhISBJdCYjMzk7cyAqc3RhdGljKiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGAuaXNfdmFsaWRfbXNyYCB3aXRoaW4gdGhlIGBpbnRlbF9wbXVfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgaXQgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCBvciBga3ZtLWludGVsLmtvYCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgbGF0ZXIuICBga3ZtX3BtdV9pc192YWxpZF9tc3JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgYSBub24tc3RhdGljIHN5bWJvbCwgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3BtdS5jYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBiZWluZyBjYWxsZWQgb3IgcmVsYXRlZCB0byBvdGhlciBmdW5jdGlvbnMuIEkmIzM5O2xsIGNoZWNrIGNhbGxlcnMgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHBtdS5jYCBhbmQgYHBtdV9pbnRlbC5jYC4gIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBjYWxsZWQgdmlhIGEgYHN0YXRpY19jYWxsYCBvciBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIGNvZGUgc2hvd3MgaXQgaXMgY2FsbGVkIGJ5IGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpYCBpbiBga3ZtX3BtdV9pc192YWxpZF9tc3JgLgoKU28sIGxldCYjMzk7cyB2ZXJpZnkgbXkga2V5IGZvY3VzLiAgTXkgcHJpbWFyeSBzeW1ib2xzIGFyZTogYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAuCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGdpdCBkaWZmIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBBaCwgbG9va3MgbGlrZSB0aGUgcGF0Y2ggKm9ubHkqIHRvdWNoZXM6IDEuIGBhcmNoL3g4Ni9rdm0vcG11LmNgOiAgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgMi4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgOiBgaW50ZWxfaXNfdmFsaWRfbXNyYC4KClRoZXNlIGFyZSBib3RoIG5vbi11YmlxdWl0b3VzIHN5bWJvbHMsIHNwZWNpZmljIHRvIEtWTSBQTVUgTVNSIGhhbmRsaW5nLCB3aGljaCBtYWtlcyB0aGVtIHZlcnkgaW50ZXJlc3RpbmcuCgpPa2F5LCBxdWljayBmaW5hbCBjaGVjazoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyB2ZXJ5IG11Y2ggd29ydGggZnVydGhlciBpbnNwZWN0aW9uLgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtLVk0mIzM0OywgJiMzNDtLVk1fSU5URUwmIzM0O11gIC0gQ29ycmVjdCwgdGhlc2UgYXJlIHRoZSByZWxldmFudCBjb25maWdzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDtdYCAtIEFic29sdXRlbHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IHJlZmFjdG9yaW5nIFBNVSBNU1IgdmFsaWRhdGlvbiBmcm9tIHRoZSBjb21tb24geDg2IEtWTSBQTVUgY29kZSB0byBJbnRlbC1zcGVjaWZpYyBQTVUgY29kZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX2lzX3ZhbGlkX21zciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX2lzX3ZhbGlkX21zciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA4NjA1NjlmZWY3NDUzN2U0YmRmNDhhMmVkYzVlMTY4NmI3Njk3ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE2OjM4OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jCmluZGV4IGE3ZDYwYzg3ODVjZDQuLmQyZmQ0N2VlNWVjODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcG11LmMKQEAgLTgyMywxNCAmIzQzOzgyMyw2IEBAIHZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKQogewotCXN3aXRjaCAobXNyKSB7Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOgotCWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6Ci0JCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAJcmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fAogCSAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMKaW5kZXggYmZhODYxMmZiNDUwOC4uNzBhOGM0ODE2MTM1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCkBAIC0xODcsNiAmIzQzOzE4Nyw5IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiAJaW50IHJldDsKIAogCXN3aXRjaCAobXNyKSB7CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOgomIzQzOwljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CiAJY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOgogCQlyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpOwogCWNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk0CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTVNSIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc2hpZnRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciB2YWxpZGF0aW5nIHNvbWUgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKSDigJMgc3BlY2lmaWNhbGx5LCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYCDigJMgZnJvbSB0aGUgZ2VuZXJpYyBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0vcG11LmNgLCB0byBhIG1vcmUgSW50ZWwtc3BlY2lmaWMgZnVuY3Rpb24sIGBpbnRlbF9pc192YWxpZF9tc3JgLCBsb2NhdGVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYC4gU28sIGl0JiMzOTtzIGEgY29kZSByZW9yZ2FuaXphdGlvbiwgbGlrZWx5IHRvIGNvbnNvbGlkYXRlIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgbG9naWMuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCBpcyBoYXBwZW5pbmcuIElzIGl0IGZvciBwZXJmb3JtYW5jZT8gSXMgaXQgdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgSW50ZWwtc3BlY2lmaWMgY2hlY2tzPyBBcmUgdGhlcmUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBpbiB0aGUgVk1YIGltcGxlbWVudGF0aW9uIHRoYXQgbmVjZXNzaXRhdGUgdGhpcz8gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBkaWZmIG9yIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXNlIE1TUnMgYXJlIGJlaW5nIHVzZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLCBhbmQgd2hhdCBkcm92ZSB0aGUgZGV2ZWxvcGVycyB0byBtYWtlIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGp1c3QgYSByZWZhY3RvcmluZyBmb3IgY2xhcml0eSwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHJlYXNvbiBiZWhpbmQgdGhpcyBtb3ZlPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3BtdV9pc192YWxpZF9tc3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cdGNhc2UgTVNSX1A2X0VWTlRTRUwwIC4uLiBNU1JfUDZfRVZOVFNFTDE6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTgzOS1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE4NDA6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xODQxLVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM3Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXHUwMDNlaW5kZXgpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM4LVx0XHRcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5Mi1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3JfaW5mby1cdTAwM2VpbmRleCkpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTQtXHRcdFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyNS17XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTI3Nj1pbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpO1xuYXJjaC94ODYva3ZtL3BtdS5oOjI3Nzpib29sIGt2bV9wbXVfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcik7XG5hcmNoL3g4Ni9rdm0vcG11LmgtMjc4LWludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9MTY1PXN0YXRpYyBib29sIGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluZGV4KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTgyLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzoxODM6c3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTg0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTgzNz1zdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODM5LVx0Lm1zcl9pZHhfdG9fcG1jID0gaW50ZWxfbXNyX2lkeF90b19wbWMsXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjg0MDpcdC5pc192YWxpZF9tc3IgPSBpbnRlbF9pc192YWxpZF9tc3IsXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg0MS1cdC5nZXRfbXNyID0gaW50ZWxfcG11X2dldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipDaGVja2luZyBBTUQmIzM5O3MgUE1VIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIGFuZCB0aGUgY3VycmVudCBjb2RlIGJhc2Ugc2VlbXMgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRyaWNhY2llcyBvZiBpdC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4NiBhcmNoaXRlY3R1cmUsIEkgc2hvdWxkIGFsc28gZ2xhbmNlIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jYC4gVGhpcyBpcyB3aGVyZSBBTUQmIzM5O3MgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB1c3VhbGx5IGhhbmRsZXMgaXRzIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBTUQmIzM5O3MgcHJvY2Vzc29ycyBkZWFsIHdpdGggdGhpcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgQU1EIGhhcyBhbnkgZGlzdGluY3QgbG9naWMgb3IgaGFuZGxpbmcgZm9yIHRoZSBQTVUgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBtb3JlIGdlbmVyYWwgeDg2IGltcGxlbWVudGF0aW9uLiBBcmUgdGhlcmUgYW55IHVuaXF1ZSBob29rcywgcmVnaXN0ZXJzLCBvciBjb250cm9sIGZsb3dzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGNvbnN0cmFpbnRzIG9uIGhvdyBBTUQmIzM5O3MgUE1VIHdvcmtzIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgdGhlIGdlbmVyaWMgY29kZSBtYXkgbm90IGFjY291bnQgZm9yPyBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBBTUQtc3BlY2lmaWMgY29kZSwgbG9va2luZyBmb3IgZWl0aGVyIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgcGl0ZmFsbHMuIEdyYWJiaW5nIHRoaXMgY29kZSBhbmQgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfdmFsaWRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jPTkzPXN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqYW1kX21zcl9pZHhfdG9fcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTEwMy1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MTA0OnN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDUte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA3LVx0LmNoZWNrX3JkcG1jX2Vhcmx5ID0gYW1kX2NoZWNrX3JkcG1jX2Vhcmx5LFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMDg6XHQuaXNfdmFsaWRfbXNyID0gYW1kX2lzX3ZhbGlkX21zcixcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA5LVx0LmdldF9tc3IgPSBhbWRfcG11X2dldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEludGVsIFBNVSBNU1IgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGludGVsX2lzX3ZhbGlkX21zcmAgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBLVk0vVk1YIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTgwLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmUgb3IgY29uc3RhbnQgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgdGhlIHZhbGlkaXR5IG9mIGEgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgYSBmZWVsIGZvciB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQuIEkgd2lsbCBsaWtlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB3aGF0IGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE1TUiwgc3VjaCBhcyB0aGUgYXJjaGl0ZWN0dXJlIHR5cGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbG9vayB1cCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRyZXR1cm4gcmV0O1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDE4NDpcdHtcbiAxODU6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxODY6XHRcdHU2NCBwZXJmX2NhcGFiaWxpdGllcztcbiAxODc6XHRcdGludCByZXQ7XG4gMTg4Olx0XG4gMTg5Olx0XHRzd2l0Y2ggKG1zcikge1xuIDE5MDpcdFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XG4gMTkxOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XG4gMTkyOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxuIDE5MzpcdFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxuIDE5NDpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xuIDE5NTpcdFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiAxOTY6XHRcdFx0cmV0ID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xuIDE5NzpcdFx0XHRicmVhaztcbiAxOTg6XHRcdGNhc2UgTVNSX0lBMzJfRFNfQVJFQTpcbiAxOTk6XHRcdFx0cmV0ID0gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfRFMpO1xuIDIwMDpcdFx0XHRicmVhaztcbiAyMDE6XHRcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XG4gMjAyOlx0XHRcdHBlcmZfY2FwYWJpbGl0aWVzID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSk7XG4gMjAzOlx0XHRcdHJldCA9IChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXHUwMDI2XHUwMDI2XG4gMjA0Olx0XHRcdFx0KChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQpIFx1MDAzZSAzKTtcbiAyMDU6XHRcdFx0YnJlYWs7XG4gMjA2Olx0XHRkZWZhdWx0OlxuIDIwNzpcdFx0XHRyZXQgPSBnZXRfZ3BfcG1jKHBtdSwgbXNyLCBNU1JfSUEzMl9QRVJGQ1RSMCkgfHxcbiAyMDg6XHRcdFx0XHRnZXRfZ3BfcG1jKHBtdSwgbXNyLCBNU1JfUDZfRVZOVFNFTDApIHx8XG4gMjA5Olx0XHRcdFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcbiAyMTA6XHRcdFx0XHRpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcih2Y3B1LCBtc3IpO1xuIDIxMTpcdFx0XHRicmVhaztcbiAyMTI6XHRcdH1cbiAyMTM6XHRcbiAyMTQ6XHRcdHJldHVybiByZXQ7XG4gMjE1Olx0fVxuIDIxNjpcdFxuIDIxNzpcdHN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqaW50ZWxfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDIxODpcdHtcbiAyMTk6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIEFNRCBNU1IgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBNU1IgdmFsaWRhdGlvbiBpbiB0aGUgS1ZNL1NWTSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGRlbHZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vcG11LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYW1kX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb24uIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBjaGVjayB0aGUgbG9naWMsIGNvbnNpZGVyaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQU1ELXNwZWNpZmljIGJlaGF2aW9yLCBhbmQgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZnRlbiBpbnRlcmFjdHMgd2l0aCBNU1JzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGRldGVybWluZXMgd2hpY2ggTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIGFyZSBhY2NlcHRhYmxlIGZvciBndWVzdCBhY2Nlc3MsIHBhcnRpY3VsYXJseSBvbiBhbiBBTUQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzPyBBcmUgdGhlcmUgc3BlY2lmaWMgcmFuZ2VzIG9yIGJpdGZpZWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNjcnV0aW5pemVkPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBBTUQtc3BlY2lmaWMgZmVhdHVyZXMgb3IgZXJyYXRhIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdHJldHVybiBwbWM7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDEwNTpcdHtcbiAxMDY6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTA5Olx0XHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxuIDExMDpcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDA7XG4gMTExOlx0XHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxuIDExMjpcdFx0XHRyZXR1cm4gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKTtcbiAxMTM6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDExNDpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4gMTE1Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19DTFI6XG4gMTE2Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19TRVQ6XG4gMTE3Olx0XHRcdHJldHVybiBwbXUtXHUwMDNldmVyc2lvbiBcdTAwM2UgMTtcbiAxMTg6XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdGlmIChtc3IgXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcdTAwMjZcdTAwMjZcbiAxMjA6XHRcdFx0ICAgIG1zciBcdTAwM2MgTVNSX0YxNUhfUEVSRl9DVEwwICYjNDM7IDIgKiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycylcbiAxMjE6XHRcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDE7XG4gMTIyOlx0XHRcdGJyZWFrO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gMTI5Olx0e1xuIDEzMDpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDEzMTpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYztcbiAxMzI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qIE1TUl9QRVJGQ1RSbiAqL1xuIDEzNTpcdFx0cG1jID0gZ2V0X2dwX3BtY19hbWQocG11LCBtc3IsIFBNVV9UWVBFX0NPVU5URVIpO1xuIDEzNjpcdFx0aWYgKHBtYykge1xuIDEzNzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xuIDEzODpcdFx0XHRyZXR1cm4gMDtcbiAxMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQTVUgTVNSIFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gTVNSIChNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcikgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEtWTSBQTVUgKFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgY29kZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gSW50ZWwgYW5kIEFNRCBwbGF0Zm9ybXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgcmVsb2NhdGluZyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIEludGVsLXNwZWNpZmljIENvcmUgUE1VIE1TUnMsIHNwZWNpZmljYWxseSBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gUHJldmlvdXNseSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBoYW5kbGVkIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IGNhbGxlZCBpbnRvIHZlbmRvci1zcGVjaWZpYyBjYWxsYmFja3MgdmlhIGBrdm1fcG11X2NhbGxgLCBhbmQgdGhlc2UgTVNScyBhcmUgKm9ubHkqIHZhbGlkIG9uIEludGVsLiBPbiBBTUQsIHRoZXNlIE1TUnMgYXJlIG1lYW5pbmdsZXNzOyB0aGV5IGhhdmUgdGhlaXIgb3duIHNldCAoYE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMXypgKS4gQnkgbW92aW5nIHRoZXNlIGNoZWNrcyBpbnRvIGBpbnRlbF9pc192YWxpZF9tc3JgLCB3ZSYjMzk7cmUgcHJldmVudGluZyBBTUQgZ3Vlc3RzIGZyb20gaW5jb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlc2UgSW50ZWwtc3BlY2lmaWMgTVNScyBhcyB2YWxpZCBhbmQgYXR0ZW1wdGluZyB0byB1c2UgdGhlbSwgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIGxldCBtZSBydW4gdGhyb3VnaCBteSBzdGFuZGFyZCBjaGVja2xpc3QgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlZ2FyZHMgdG8gS0FTQU4vS01TQU4uCgoqICAgKipLZXJuZWwgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIG1vZGlmeSBleGlzdGluZyBvbmVzIHRoYXQgbWlnaHQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCYjMzk7cyBnb29kLgoqICAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIFVzYWdlOioqIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGluIHRoZSBjb3JlIGxvZ2ljLiBUaGUgcGF0Y2ggb3BlcmF0ZXMgb24gdGhlIGBtc3JgIHdoaWNoIGlzIHBhc3NlZCBieSB2YWx1ZSAoYW5kIHRoZXJlZm9yZSBtdXN0IGJlIHZhbGlkKS4KKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbjoqKiBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCiogICAqKkJ1ZmZlciBPdmVyZmxvdy9NZW1vcnkgUmVhZHM6KiogSSBzZWUgbm8gaW52b2x2ZW1lbnQgd2l0aCBidWZmZXJzIG9yIGRpcmVjdCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlb3JnYW5pemluZyBNU1IgZGlzcGF0Y2guCgpHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IGluIGFzc2Vzc2luZyB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLgoKKiAgICoqS0FTQU46KiogVGhpcyBjaGFuZ2UgYWx0ZXJzIE1TUiB2YWxpZGF0aW9uIGxvZ2ljLCB3aGljaCBtYXkgYWZmZWN0IGhvdyBLQVNBTiBkZXRlY3RzL2RvZXMgbm90IGRldGVjdCBhbiBlcnJvciwgYnV0IGRvZXMgbm90IGludHJvZHVjZSBvbmUgaXRzZWxmLgoqICAgKipLTVNBTjoqKiBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2sgb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAgaGVyZS4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCwgdGFyZ2V0ZWQgZml4IHRoYXQgc2hvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIEtWTSBQTVUgb24gQU1EIHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuMzE2NzEzMjA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNDA4Mzg1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2lzX3ZhbGlkX21zclwiLFxuICAgIFwiaW50ZWxfaXNfdmFsaWRfbXNyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGFuZCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCkgZnJvbSB0aGUgZ2VuZXJpYyBrdm1fcG11X2lzX3ZhbGlkX21zcigpIGZ1bmN0aW9uIGludG8gaW50ZWxfaXNfdmFsaWRfbXNyKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuMzE2NzE3ODk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc5OTEyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwODYwNTY5ZmVmNzQ1MzdlNGJkZjQ4YTJlZGM1ZTE2ODZiNzY5N2Q3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXFxuaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vcG11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcXG5AQCAtODIzLDE0ICs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIHtcXG4tXFx0c3dpdGNoIChtc3IpIHtcXG4tXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuLVxcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcXG4tXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcXG4tXFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbiBcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XFxuIFxcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuaW5kZXggYmZhODYxMmZiNDUwOC4uNzBhOGM0ODE2MTM1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbkBAIC0xODcsNiArMTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN3aXRjaCAobXNyKSB7XFxuK1xcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxcbitcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuK1xcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XFxuIFxcdGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTDpcXG4gXFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gXFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuNzU1NDMwODE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTU5Nzc0NTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9wbXVfaXNfdmFsaWRfbXNyXCIsXG4gICAgXCJpbnRlbF9pc192YWxpZF9tc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwODYwNTY5ZmVmNzQ1MzdlNGJkZjQ4YTJlZGM1ZTE2ODZiNzY5N2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNjozODo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wbXUuYyBiL2FyY2gveDg2L2t2bS9wbXUuY1xuaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5AQCAtODIzLDE0ICs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIHtcbi1cdHN3aXRjaCAobXNyKSB7XG4tXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4tXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuIFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuIFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5pbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4Nyw2ICsxODcsOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIFx0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAobXNyKSB7XG4rXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuNzU1NDMzMTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYwODU2MTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBNVSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AgYW5kIHRoZSBJbnRlbC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHdlIGNhbiBpZ25vcmUgYW55IHBvdGVudGlhbCAzMi1iaXQgc3BlY2lmaWMgY29uY2VybnMgZm9yIG5vdy5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMsIEknbGwgbmVlZCB0byBsb29rIGJleW9uZCBqdXN0IHRoZSBsaW5lcyBpbiB0aGUgZGlmZiBpdHNlbGYuIEknbGwgbmVlZCBhIHdpZGVyIHZpZXcuIEknbGwgcmVhY2ggZm9yIG15IHRvb2xzIOKAkyBwcm9iYWJseSBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldywgb3IgaWYgSSBuZWVkIG1vcmUgdGFyZ2V0ZWQgaW5mb3JtYXRpb24sIG1heWJlIGV2ZW4gYGdyZXBwZXJgIOKAkyB0byBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGJvdGggdGhvc2UgZmlsZXMuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGUgdG8gdGhlIG92ZXJhbGwgUE1VIChQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0gZm9yIHg4Ni4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgd2VyZSB0aGV5IHRyeWluZyB0byBmaXggb3IgaW1wcm92ZT8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODIsIk91dHB1dFRva2VucyI6ODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTowNy4zNjM5OTc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9wbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFxuIDgxNjpcXHR2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4MTc6XFx0e1xcbiA4MTg6XFx0XFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbiA4MTk6XFx0XFx0XFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcXG4gODIwOlxcdFxcdFxcdGt2bV9hcGljX2xvY2FsX2RlbGl2ZXIodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0xWVFBDKTtcXG4gODIxOlxcdFxcdH1cXG4gODIyOlxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDgyNTpcXHR7XFxuIDgyNjpcXHRcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XFxuIDgyNzpcXHRcXHQgICAgICAga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcikodmNwdSwgbXNyKTtcXG4gODI4OlxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0c3RhdGljIHZvaWQga3ZtX3BtdV9tYXJrX3BtY19pbl91c2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbiA4MzE6XFx0e1xcbiA4MzI6XFx0XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiA4MzM6XFx0XFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0aWYgKHBtYylcXG4gODM2OlxcdFxcdFxcdF9fc2V0X2JpdChwbWMtXFx1MDAzZWlkeCwgcG11LVxcdTAwM2VwbWNfaW5fdXNlKTtcXG4gODM3OlxcdH1cXG4gODM4OlxcdFxcbiA4Mzk6XFx0aW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIDg0MDpcXHR7XFxuIDg0MTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDg0MjpcXHRcXHR1MzIgbXNyID0gbXNyX2luZm8tXFx1MDAzZWluZGV4O1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiA4NDU6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDg0NjpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcXG4gODQ3OlxcdFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG11LVxcdTAwM2VnbG9iYWxfc3RhdHVzO1xcbiA4NDg6XFx0XFx0XFx0YnJlYWs7XFxuIDg0OTpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX0NUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDcuMzY0MDkwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MTpcXHR9XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDE4NjpcXHRcXHR1NjQgcGVyZl9jYXBhYmlsaXRpZXM7XFxuIDE4NzpcXHRcXHRpbnQgcmV0O1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxOTA6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDE5MTpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuIDE5MjpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxcbiAxOTM6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gMTk1OlxcdFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIDE5NjpcXHRcXHRcXHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xcbiAxOTc6XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRjYXNlIE1TUl9JQTMyX0RTX0FSRUE6XFxuIDE5OTpcXHRcXHRcXHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XFxuIDIwMDpcXHRcXHRcXHRicmVhaztcXG4gMjAxOlxcdFxcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XFxuIDIwMjpcXHRcXHRcXHRwZXJmX2NhcGFiaWxpdGllcyA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpO1xcbiAyMDM6XFx0XFx0XFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXFx1MDAyNlxcdTAwMjZcXG4gMjA0OlxcdFxcdFxcdFxcdCgocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXFx1MDAzZSAzKTtcXG4gMjA1OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMjA3OlxcdFxcdFxcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxcbiAyMDg6XFx0XFx0XFx0XFx0Z2V0X2dwX3BtYyhwbXUsIG1zciwgTVNSX1A2X0VWTlRTRUwwKSB8fFxcbiAyMDk6XFx0XFx0XFx0XFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcXG4gMjEwOlxcdFxcdFxcdFxcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XFxuIDIxMTpcXHRcXHRcXHRicmVhaztcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDcuMzY0MTQ2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY3NzI0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIFBNVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBhcmNoL3g4Ni9rdm0vcG11LmNgIGZpbGUuIFRoZSBvcmlnaW5hbCBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLCBpbiB0aGF0IGZpbGUsIHVzZWQgdG8gY29udGFpbiBhIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpOiBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gVGhlIGZ1bmN0aW9uIHRoZW4gdXNlZCB0byByZXR1cm4gYGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO2AuXG5cblRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHRoZXNlIEludGVsLXNwZWNpZmljIE1TUiBjaGVja3Mgd2VyZSByZXNpZGluZyBpbiAqY29tbW9uKiBjb2RlIChga3ZtX3BtdS5jYCkuIFRoaXMgaGFkIHRoZSBwb3RlbnRpYWwgdG8gaW1wYWN0IEFNRCBzeXN0ZW1zLCBldmVuIGlmIHRoZXkgYXJlbid0IGRpcmVjdGx5IHVzaW5nIHRob3NlIEludGVsIFBNVSBmZWF0dXJlcywgaWYgQU1EIGNhbGxlZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLiBUaGF0J3Mgbm90IGlkZWFsLlxuXG5Ob3csIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGhhdmUgbW92ZWQgdGhlc2UgSW50ZWwtc3BlY2lmaWMgY2hlY2tzLiBUaGV5J3ZlIGJlZW4gc2hpZnRlZCBmcm9tIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgdG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBpbnRlbF9pc192YWxpZF9tc3JgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgc2VwYXJhdGVzIHRoZSBJbnRlbC1zcGVjaWZpYyBsb2dpYy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBBTUQgY29kZSwgaWYgaXQgZXhpc3RzLCBpcyBjb3JyZWN0IG9yIGlmIGl0IGNhbGxzIGBpbnRlbF9pc192YWxpZF9tc3JgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEFNRCBQTVUgY29kZSB0byBtYWtlIHN1cmUgdGhlcmUncyBub3Qgc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHRoZXJlLCBpbiBgcG11X2FtZC5jYCBvciBzb21ldGhpbmcgZXF1aXZhbGVudC4gSSdsbCBzZWFyY2ggZm9yIEFNRCdzIGBpc192YWxpZF9tc3JgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MTAuOTMxODc0MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MTcxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfdmFsaWRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcikpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0MS1cXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzNi1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzgtXFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTk0LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjUte1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MjYtXFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxcbmFyY2gveDg2L2t2bS9wbXUuYzo4Mjc6XFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyOC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9MjY9c3RydWN0IGt2bV9wbXVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaC0zMC1cXHRpbnQgKCpjaGVja19yZHBtY19lYXJseSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6MzE6XFx0Ym9vbCAoKmlzX3ZhbGlkX21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtMzItXFx0aW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaD0yNzY9aW50IGt2bV9wbXVfY2hlY2tfcmRwbWNfZWFybHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6Mjc3OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtMjc4LWludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9OTM9c3RhdGljIHN0cnVjdCBrdm1fcG1jICphbWRfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDMtXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzoxMDQ6c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTMwNy1cXHQuY2hlY2tfcmRwbWNfZWFybHkgPSBhbWRfY2hlY2tfcmRwbWNfZWFybHksXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMDg6XFx0LmlzX3ZhbGlkX21zciA9IGFtZF9pc192YWxpZF9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDktXFx0LmdldF9tc3IgPSBhbWRfcG11X2dldF9tc3IsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE2NT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTgyLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTgzOnN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy0xODQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04Mzc9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODM5LVxcdC5tc3JfaWR4X3RvX3BtYyA9IGludGVsX21zcl9pZHhfdG9fcG1jLFxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6ODQwOlxcdC5pc192YWxpZF9tc3IgPSBpbnRlbF9pc192YWxpZF9tc3IsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04NDEtXFx0LmdldF9tc3IgPSBpbnRlbF9wbXVfZ2V0X21zcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MTAuOTgxNDk1MDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzMDA2ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFBNVSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBQTVUgZW11bGF0aW9uIGxvZ2ljLCBmb2N1c2luZyBvbiB0aGUgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGNhbiB0aGlzIGJlICpyZWFjaGVkKiBhbmQgKmZ1enplZCogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kIHN5emthbGxlciBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmU/XG5cbkkga25vdyBzeXprYWxsZXIgaGVhdmlseSB1dGlsaXplcyBgL2Rldi9rdm1gIGlvY3RscyBsaWtlIGBLVk1fU0VUX01TUlNgLCBgS1ZNX0dFVF9NU1JTYCwgYW5kIGBLVk1fUlVOYCAoYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi92Y3B1IE1TUiBhY2Nlc3MpIHRvIGhpdCBLVk0sIHNvIHRoZSBhbnN3ZXIgaXMgYSBjb25maWRlbnQgeWVzLCBpdCdzIGRlZmluaXRlbHkgYmVpbmcgaGl0LiBBbmQgdGhlIHByZXJlcXVpc2l0ZXMg4oCTIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgIG9uIGFtZDY0IOKAkyBhcmUsIG9mIGNvdXJzZSwgcHJlc2VudC4gSSBtZWFuLCB3ZSdkIGJlIGhhcmQtcHJlc3NlZCB0byAqbm90KiBoYXZlIHRob3NlIGVuYWJsZWQuXG5cblNvLCBpcyB0aGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IFllcywgb2J2aW91c2x5LCBiZWNhdXNlIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBOb3csIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBLVk0gb24geDg2IHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNC4wMTE1NjYzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQzMTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNC4wNjQwMDQ0NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNTIzMjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNVSBjb2RlIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yayBmb3IgeDg2LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBkaXJlY3RvcnkuIEknbGwgbmVlZCB0byBvcGVuIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHRvIHNlZSBob3cgYm90aCBgcG11LmNgIOKAkyB3aGljaCBJIGFzc3VtZSBpcyB0aGUgZ2VuZXJpYyBQTVUgbGF5ZXIg4oCTIGFuZCB0aGUgSW50ZWwtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2bXgvcG11X2ludGVsLmNgLCBhcmUgYnVpbHQgYW5kIGxpbmtlZC4gSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYnVpbGQgZmxhZ3MgdXNlZCwgYW5kIGhvdyB0aGUgZGlmZmVyZW50IFBNVSBpbXBsZW1lbnRhdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgY29yZSBLVk0gYnVpbGQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBob3cgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBWTVggaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNS44OTkyMzk0MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjIzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjI4MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTY9aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cXHRcXHRcXHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0xNT1rdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNi1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTc6a3ZtLWludGVsLXlcXHRcXHQrPSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTgtXFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTI4LSNpbmNsdWRlIFxcXCJ0cmFjZS5oXFxcIlxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjI5OiNpbmNsdWRlIFxcXCJwbXUuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0zMC0jaW5jbHVkZSBcXFwieGVuLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYz0zNzY9dm9pZCBrdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUwLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjQ1MTpcXHRrdm1fcG11X3JlZnJlc2godmNwdSk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUyLVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM9MTQzMj1zdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1MjQtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUyNTpcXHRcXHRpZiAoIWVuYWJsZV9wbXUgfHwgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkge1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1MjYtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVheCA9IGVudHJ5LVxcdTAwM2VlYnggPSBlbnRyeS1cXHUwMDNlZWN4ID0gZW50cnktXFx1MDAzZWVkeCA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTI5LVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzA6XFx0XFx0ZWF4LnNwbGl0LnZlcnNpb25faWQgPSBrdm1fcG11X2NhcC52ZXJzaW9uO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzE6XFx0XFx0ZWF4LnNwbGl0Lm51bV9jb3VudGVycyA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncDtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTMyOlxcdFxcdGVheC5zcGxpdC5iaXRfd2lkdGggPSBrdm1fcG11X2NhcC5iaXRfd2lkdGhfZ3A7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzMzpcXHRcXHRlYXguc3BsaXQubWFza19sZW5ndGggPSBrdm1fcG11X2NhcC5ldmVudHNfbWFza19sZW47XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNDpcXHRcXHRlZHguc3BsaXQubnVtX2NvdW50ZXJzX2ZpeGVkID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzU6XFx0XFx0ZWR4LnNwbGl0LmJpdF93aWR0aF9maXhlZCA9IGt2bV9wbXVfY2FwLmJpdF93aWR0aF9maXhlZDtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM2LVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1Mzc6XFx0XFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24pXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUzOC1cXHRcXHRcXHRlZHguc3BsaXQuYW55dGhyZWFkX2RlcHJlY2F0ZWQgPSAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0MC1cXHRcXHRlbnRyeS1cXHUwMDNlZWF4ID0gZWF4LmZ1bGw7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTU0MTpcXHRcXHRlbnRyeS1cXHUwMDNlZWJ4ID0ga3ZtX3BtdV9jYXAuZXZlbnRzX21hc2s7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0Mi1cXHRcXHRlbnRyeS1cXHUwMDNlZWN4ID0gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTEtXFx0XFx0ZW50cnktXFx1MDAzZWVjeCA9IGVudHJ5LVxcdTAwM2VlZHggPSAwO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTI6XFx0XFx0aWYgKCFlbmFibGVfcG11IHx8ICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpIHtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODkzLVxcdFxcdFxcdGVudHJ5LVxcdTAwM2VlYXggPSBlbnRyeS1cXHUwMDNlZWJ4ID0gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTgtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTg5OTpcXHRcXHRlYnguc3BsaXQubnVtX2NvcmVfcG1jID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE5MDAtXFx0XFx0ZW50cnktXFx1MDAzZWVieCA9IGVieC5mdWxsO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNC0jaW5jbHVkZSBcXFwibW11LmhcXFwiXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNTojaW5jbHVkZSBcXFwicG11LmhcXFwiXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtOC0jaW5jbHVkZSBcXFwibXNycy5oXFxcIlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6OTojaW5jbHVkZSBcXFwicG11LmhcXFwiXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xMC0jaW5jbHVkZSBcXFwidHJhY2UuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTkxPXN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE3LVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE4OnN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX3BtdVtdID0ge1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5LVxcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz0yNTA9c3RhdGljIHUzMiBtc3JzX3RvX3NhdmVbQVJSQVlfU0laRShtc3JzX3RvX3NhdmVfYmFzZSkgK1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjUxOlxcdFxcdFxcdEFSUkFZX1NJWkUobXNyc190b19zYXZlX3BtdSldO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjUyLXN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz05MDY9c3RhdGljIGZhc3RwYXRoX3QgX19oYW5kbGVfZmFzdHBhdGhfd3Jtc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTkwNy17XFxuYXJjaC94ODYva3ZtL21zcnMuYzo5MDg6XFx0aWYgKCFrdm1fcG11X2lzX2Zhc3RwYXRoX2VtdWxhdGlvbl9hbGxvd2VkKHZjcHUpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtOTA5LVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5wZXJmX2NhcGFiaWxpdGllcyA9IGRhdGE7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxNDk0OlxcdFxcdGt2bV9wbXVfcmVmcmVzaCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTUtXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ0FMQ19JTlRFUkNFUFRTLCB2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc1NTpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTY6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfc2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTg0MTpcXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE4NDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE5Mzc6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM4OlxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzOS1cXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYzoyMTk0OlxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MjU2Mz1zdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxMy1cXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcXHUwMDNlPVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYxNDpcXHRcXHQgICAga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxNS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2MTktXFx0XFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwIFxcdTAwM2U9XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyNjIwOlxcdFxcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3ApXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjIxLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyNS1cXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIFxcdTAwM2U9XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyNjI2OlxcdFxcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjI3LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MjY3MD12b2lkIGt2bV9pbml0X21zcl9saXN0cyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc0LVxcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSAzLFxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY3NTpcXHRcXHRcXHQgXFxcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXFxcIik7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjgzLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NDpcXHRpZiAoZW5hYmxlX3BtdSkge1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtc3JzX3RvX3NhdmVfcG11KTsgaSsrKVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NjpcXHRcXHRcXHRrdm1fcHJvYmVfbXNyX3RvX3NhdmUobXNyc190b19zYXZlX3BtdVtpXSk7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjg3LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yNC0jaW5jbHVkZSBcXFwibGFwaWMuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjU6I2luY2x1ZGUgXFxcInBtdS5oXFxcIlxcbmFyY2gveDg2L2t2bS9wbXUuYy0yNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMC0vKiBVbmFkdWx0ZXJlZCBQTVUgY2FwYWJpbGl0aWVzIG9mIHRoZSBob3N0LCBpLmUuIG9mIGhhcmR3YXJlLiAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzozMTpzdGF0aWMgc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSBfX3JlYWRfbW9zdGx5IGt2bV9ob3N0X3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzItXFxuYXJjaC94ODYva3ZtL3BtdS5jLTMzLS8qIEtWTSdzIFBNVSBjYXBhYmlsaXRpZXMsIGkuZS4gdGhlIGludGVyc2VjdGlvbiBvZiBLVk0gYW5kIGhhcmR3YXJlIHN1cHBvcnQuICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjM0OnN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgX19yZWFkX21vc3RseSBrdm1fcG11X2NhcDtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MzU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wbXVfY2FwKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzYtXFxuYXJjaC94ODYva3ZtL3BtdS5jLTM3LS8qIEVuYWJsZS9kaXNhYmxlIFBNVSB2aXJ0dWFsaXphdGlvbiAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzozODpib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX3BtdSA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDA6bW9kdWxlX3BhcmFtKGVuYWJsZV9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy00MS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfbWVkaWF0ZWRfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ2OnN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIge1xcbmFyY2gveDg2L2t2bS9wbXUuYy00Ny1cXHRfX3UzMiBhY3Rpb247XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTctXFxuYXJjaC94ODYva3ZtL3BtdS5jOjU4OnN0cnVjdCBrdm1fcG11X2VtdWxhdGVkX2V2ZW50X3NlbGVjdG9ycyB7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5LVxcdHU2NCBJTlNUUlVDVElPTlNfUkVUSVJFRDtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02MS19O1xcbmFyY2gveDg2L2t2bS9wbXUuYzo2MjpzdGF0aWMgc3RydWN0IGt2bV9wbXVfZW11bGF0ZWRfZXZlbnRfc2VsZWN0b3JzIF9fcmVhZF9tb3N0bHkga3ZtX3BtdV9ldmVudHNlbDtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHZteF9wZWJzX3BkaXN0X2NwdVtdID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzLSAqICAgaW4gZml4ZWRfY291bnRlcnNbXSByZXNwZWN0aXZlbHkuIEJvdGggb2YgdGhlbSBhcmUgcGFydCBvZiBcXFwic3RydWN0XFxuYXJjaC94ODYva3ZtL3BtdS5jOjg0OiAqICAga3ZtX3BtdVxcXCI7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjg1OiAqIC0gcG11LmMgdW5kZXJzdGFuZHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBncCBjb3VudGVycyBhbmQgZml4ZWQgY291bnRlcnMuXFxuYXJjaC94ODYva3ZtL3BtdS5jLTg2LSAqICAgSG93ZXZlciBBTUQgZG9lc24ndCBzdXBwb3J0IGZpeGVkLWNvdW50ZXJzO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEwNi1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTA3OnN0YXRpYyBzdHJ1Y3Qga3ZtX3BtdV9vcHMga3ZtX3BtdV9vcHMgX19yZWFkX21vc3RseTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTA4LVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMDktI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKVxcdFxcdFxcdFxcdFxcdCAgICAgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTA6XFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9wbXVfIyNmdW5jLFxcdFxcdFxcdCAgICAgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTE6XFx0XFx0XFx0XFx0KigoKHN0cnVjdCBrdm1fcG11X29wcyAqKTApLVxcdTAwM2VmdW5jKSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMIEtWTV9YODZfUE1VX09QXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMy0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9QTVVfT1BcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTE0OiNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNTpFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfcG11X3BtY19pc19kaXNhYmxlZF9pbl9jdXJyZW50X21vZGUpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNzp2b2lkIGt2bV9wbXVfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExOC17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjExOTpcXHRtZW1jcHkoXFx1MDAyNmt2bV9wbXVfb3BzLCBwbXVfb3BzLCBzaXplb2Yoa3ZtX3BtdV9vcHMpKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTIwLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjEtI2RlZmluZSBfX0tWTV9YODZfUE1VX09QKGZ1bmMpIFxcXFxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTIyOlxcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X3BtdV8jI2Z1bmMsIGt2bV9wbXVfb3BzLmZ1bmMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjMtI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3BtdS5jOjEyNDpcXHRXQVJOX09OKCFrdm1fcG11X29wcy5mdW5jKTsgX19LVk1fWDg2X1BNVV9PUChmdW5jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjUtI2RlZmluZSBLVk1fWDg2X1BNVV9PUF9PUFRJT05BTCBfX0tWTV9YODZfUE1VX09QXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyNi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjc6XFx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfcG11XyMjZnVuYywgKHZvaWQgKilrdm1fcG11X29wcy5mdW5jID8gOiBcXFxcXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjk6I2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LXBtdS1vcHMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMwLSN1bmRlZiBfX0tWTV9YODZfUE1VX09QXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMyLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzM6dm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNC17XFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNS1cXHRib29sIGlzX2ludGVsID0gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUw7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjEzNjpcXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVxcdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNy1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDQtXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSFlCUklEX0NQVSkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ1OlxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ2OlxcdFxcdG1lbXNldChcXHUwMDI2a3ZtX2hvc3RfcG11LCAwLCBzaXplb2Yoa3ZtX2hvc3RfcG11KSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE0Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxNDg6XFx0XFx0cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KFxcdTAwMjZrdm1faG9zdF9wbXUpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDktXFx0fVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTAtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1MTpcXHRpZiAoZW5hYmxlX3BtdSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTItXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTctXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1ODpcXHRcXHRpZiAoIWt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZ3AgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5OlxcdFxcdCAgICBXQVJOX09OX09OQ0Uoa3ZtX2hvc3RfcG11Lm51bV9jb3VudGVyc19ncCBcXHUwMDNjIG1pbl9ucl9ncF9jdHJzKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYwOlxcdFxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYxOlxcdFxcdGVsc2UgaWYgKGlzX2ludGVsIFxcdTAwMjZcXHUwMDI2ICFrdm1faG9zdF9wbXUudmVyc2lvbilcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYyOlxcdFxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYzLVxcdH1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY0LVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNjU6XFx0aWYgKCFlbmFibGVfcG11IHx8ICFlbmFibGVfbWVkaWF0ZWRfcG11IHx8ICFrdm1faG9zdF9wbXUubWVkaWF0ZWQgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY2OlxcdCAgICAhcG11X29wcy1cXHUwMDNlaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZChcXHUwMDI2a3ZtX2hvc3RfcG11KSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY3OlxcdFxcdGVuYWJsZV9tZWRpYXRlZF9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNjk6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzA6XFx0XFx0cG11X29wcy1cXHUwMDNld3JpdGVfZ2xvYmFsX2N0cmwgPSBOVUxMO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNzEtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE3MjpcXHRpZiAoIWVuYWJsZV9wbXUpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTczOlxcdFxcdG1lbXNldChcXHUwMDI2a3ZtX3BtdV9jYXAsIDAsIHNpemVvZihrdm1fcG11X2NhcCkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE3Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc3OlxcdG1lbWNweShcXHUwMDI2a3ZtX3BtdV9jYXAsIFxcdTAwMjZrdm1faG9zdF9wbXUsIHNpemVvZihrdm1faG9zdF9wbXUpKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc4OlxcdGt2bV9wbXVfY2FwLnZlcnNpb24gPSBtaW4oa3ZtX3BtdV9jYXAudmVyc2lvbiwgMik7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjE3OTpcXHRrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3AgPSBtaW4oa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwLFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxODA6XFx0XFx0XFx0XFx0XFx0ICBwbXVfb3BzLVxcdTAwM2VNQVhfTlJfR1BfQ09VTlRFUlMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxODE6XFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTgyLVxcdFxcdFxcdFxcdFxcdCAgICAgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE4My1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg0OlxcdGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xODUtXFx0XFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg2OlxcdGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTg3LVxcdFxcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTE5MD12b2lkIGt2bV9oYW5kbGVfZ3Vlc3RfbWVkaWF0ZWRfcG1pKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTkzLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxOTQ6XFx0aWYgKFdBUk5fT05fT05DRSghdmNwdSB8fCAha3ZtX3ZjcHVfaGFzX21lZGlhdGVkX3BtdSh2Y3B1KSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE5NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBrdm1fcG1jICpwbWMsIGJvb2wgaW5fcG1pKVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMDEte1xcbmFyY2gveDg2L2t2bS9wbXUuYzoyMDI6XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjAzLVxcdGJvb2wgc2tpcF9wbWkgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMTYtXFx0XFx0XFx0c2tpcF9wbWkgPSBfX3Rlc3RfYW5kX3NldF9iaXQoR0xPQkFMX1NUQVRVU19CVUZGRVJfT1ZGX0JJVCxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnBtdS1cXHUwMDNlZ2xvYmFsX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTIxOC1cXHRcXHR9XFxuYXJjaC94ODYva3ZtL3BtdS5jLTIxOS1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9wbXUuYzoyMjA6XFx0XFx0X19zZXRfYml0KHBtYy1cXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0yMjEtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTIyNz1zdGF0aWMgdm9pZCBrdm1fcGVyZl9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMzctXFx0ICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjIzODpcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChwbWMtXFx1MDAzZWlkeCwgcG1jX3RvX3BtdShwbWMpLVxcdTAwM2VyZXByb2dyYW1fcG1pKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjM5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0yNzc9c3RhdGljIGludCBwbWNfcmVwcm9ncmFtX2NvdW50ZXIoc3RydWN0IGt2bV9wbWMgKnBtYywgdTMyIHR5cGUsIHU2NCBjb25maWcsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjgwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjgxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSBwbWNfdG9fcG11KHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTI4Mi1cXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjkyLVxcdH07XFxuYXJjaC94ODYva3ZtL3BtdS5jOjI5MzpcXHRib29sIHBlYnMgPSB0ZXN0X2JpdChwbWMtXFx1MDAzZWlkeCwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cG11LVxcdTAwM2VwZWJzX2VuYWJsZSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMTgtXFx0aWYgKElTX0VSUihldmVudCkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MzE5OlxcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCJrdm1fcG11OiBldmVudCBjcmVhdGlvbiBmYWlsZWQgJWxkIGZvciBwbWMtXFx1MDAzZWlkeCA9ICVkXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMjAtXFx0XFx0XFx0ICAgIFBUUl9FUlIoZXZlbnQpLCBwbWMtXFx1MDAzZWlkeCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzI0LVxcdHBtYy1cXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xcbmFyY2gveDg2L2t2bS9wbXUuYzozMjU6XFx0cG1jX3RvX3BtdShwbWMpLVxcdTAwM2VldmVudF9jb3VudCsrO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0zMjYtXFx0cG1jLVxcdTAwM2Vpc19wYXVzZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0zNTc9c3RhdGljIGJvb2wgcG1jX3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzY3LVxcbmFyY2gveDg2L2t2bS9wbXUuYzozNjg6XFx0aWYgKHRlc3RfYml0KHBtYy1cXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwbWNfdG9fcG11KHBtYyktXFx1MDAzZXBlYnNfZW5hYmxlKSAhPVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zNjktXFx0ICAgICghIXBtYy1cXHUwMDNlcGVyZl9ldmVudC1cXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0zNzk9c3RhdGljIHZvaWQgcG1jX3JlbGVhc2VfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTM4NC1cXHRcXHRwbWMtXFx1MDAzZWN1cnJlbnRfY29uZmlnID0gMDtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Mzg1OlxcdFxcdHBtY190b19wbXUocG1jKS1cXHUwMDNlZXZlbnRfY291bnQtLTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzg2LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz00MDc9dm9pZCBwbWNfd3JpdGVfY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jLCB1NjQgdmFsKVxcbmFyY2gveDg2L2t2bS9wbXUuYy00MDgte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo0MDk6XFx0aWYgKGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUocG1jLVxcdTAwM2V2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy00MTAtXFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyID0gdmFsIFxcdTAwMjYgcG1jX2JpdG1hc2socG1jKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz00NzY9c3RhdGljIGJvb2wgZmlsdGVyX2NvbnRhaW5zX21hdGNoKHU2NCAqZXZlbnRzLCB1NjQgbmV2ZW50cywgdTY0IGV2ZW50c2VsKVxcbmFyY2gveDg2L2t2bS9wbXUuYy00Nzcte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo0Nzg6XFx0dTY0IGV2ZW50X3NlbGVjdCA9IGV2ZW50c2VsIFxcdTAwMjYga3ZtX3BtdV9vcHMuRVZFTlRTRUxfRVZFTlQ7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTQ3OS1cXHR1NjQgdW1hc2sgPSBldmVudHNlbCBcXHUwMDI2IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VTUFTSztcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy01MDgtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjUwOTpzdGF0aWMgYm9vbCBpc19ncF9ldmVudF9hbGxvd2VkKHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmYsXFxuYXJjaC94ODYva3ZtL3BtdS5jLTUxMC1cXHRcXHRcXHRcXHR1NjQgZXZlbnRzZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTE4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1MTk6c3RhdGljIGJvb2wgaXNfZml4ZWRfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZXZlbnRfZmlsdGVyICpmaWx0ZXIsXFxuYXJjaC94ODYva3ZtL3BtdS5jLTUyMC1cXHRcXHRcXHRcXHQgICBpbnQgaWR4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTUzND1zdGF0aWMgYm9vbCBwbWNfaXNfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01MzUte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo1MzY6XFx0c3RydWN0IGt2bV94ODZfcG11X2V2ZW50X2ZpbHRlciAqZmlsdGVyO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01MzctXFx0c3RydWN0IGt2bSAqa3ZtID0gcG1jLVxcdTAwM2V2Y3B1LVxcdTAwM2Vrdm07XFxuYXJjaC94ODYva3ZtL3BtdS5jLTUzOC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTM5OlxcdGZpbHRlciA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLVxcdTAwM2VhcmNoLnBtdV9ldmVudF9maWx0ZXIsIFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NDAtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTQ4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NDk6c3RhdGljIHZvaWQga3ZtX21lZGlhdGVkX3BtdV9yZWZyZXNoX2V2ZW50X2ZpbHRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01NTAte1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NTEtXFx0Ym9vbCBhbGxvd2VkID0gcG1jX2lzX2xvY2FsbHlfZW5hYmxlZChwbWMpIFxcdTAwMjZcXHUwMDI2IHBtY19pc19ldmVudF9hbGxvd2VkKHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjU1MjpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYxLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjI6XFx0XFx0cG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybF9odyBcXHUwMDI2PSB+bWFzaztcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYzLVxcdFxcdGlmIChhbGxvd2VkKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjQ6XFx0XFx0XFx0cG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybF9odyB8PSBwbXUtXFx1MDAzZWZpeGVkX2N0cl9jdHJsIFxcdTAwMjYgbWFzaztcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTY1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz01Njg9c3RhdGljIGludCByZXByb2dyYW1fY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01Njkte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzA6XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTcxLVxcdHU2NCBldmVudHNlbCA9IHBtYy1cXHUwMDNlZXZlbnRzZWw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc1LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzY6XFx0aWYgKGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUocG11X3RvX3ZjcHUocG11KSkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTc3OlxcdFxcdGt2bV9tZWRpYXRlZF9wbXVfcmVmcmVzaF9ldmVudF9maWx0ZXIocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5MC1cXHRpZiAoZXZlbnRzZWwgXFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfUElOX0NPTlRST0wpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjU5MTpcXHRcXHRwcmludGtfb25jZShcXFwia3ZtIHBtdTogcGluIGNvbnRyb2wgYml0IGlzIGlnbm9yZWRcXFxcblxcXCIpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01OTItXFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5My1cXHRpZiAocG1jX2lzX2ZpeGVkKHBtYykpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTk0OlxcdFxcdGZpeGVkX2N0cl9jdHJsID0gZml4ZWRfY3RybF9maWVsZChwbXUtXFx1MDAzZWZpeGVkX2N0cl9jdHJsLFxcbmFyY2gveDg2L2t2bS9wbXUuYy01OTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBwbWMtXFx1MDAzZWlkeCAtIEtWTV9GSVhFRF9QTUNfQkFTRV9JRFgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxMi1cXHRyZXR1cm4gcG1jX3JlcHJvZ3JhbV9jb3VudGVyKHBtYywgUEVSRl9UWVBFX1JBVyxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjEzOlxcdFxcdFxcdFxcdCAgICAgKGV2ZW50c2VsIFxcdTAwMjYgcG11LVxcdTAwM2VyYXdfZXZlbnRfbWFzayksXFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxNC1cXHRcXHRcXHRcXHQgICAgICEoZXZlbnRzZWwgXFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSxcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz02MTk9c3RhdGljIGJvb2wgcG1jX2lzX2V2ZW50X21hdGNoKHN0cnVjdCBrdm1fcG1jICpwbWMsIHU2NCBldmVudHNlbClcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02MzctXFxuYXJjaC94ODYva3ZtL3BtdS5jOjYzODp2b2lkIGt2bV9wbXVfcmVjYWxjX3BtY19lbXVsYXRpb24oc3RydWN0IGt2bV9wbXUgKnBtdSwgc3RydWN0IGt2bV9wbWMgKnBtYylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjM5LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQwOlxcdGJpdG1hcF9jbGVhcihwbXUtXFx1MDAzZXBtY19jb3VudGluZ19pbnN0cnVjdGlvbnMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQxOlxcdGJpdG1hcF9jbGVhcihwbXUtXFx1MDAzZXBtY19jb3VudGluZ19icmFuY2hlcywgcG1jLVxcdTAwM2VpZHgsIDEpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjUxLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTI6XFx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQpKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTM6XFx0XFx0Yml0bWFwX3NldChwbXUtXFx1MDAzZXBtY19jb3VudGluZ19pbnN0cnVjdGlvbnMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU0LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTU6XFx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2OlxcdFxcdGJpdG1hcF9zZXQocG11LVxcdTAwM2VwbWNfY291bnRpbmdfYnJhbmNoZXMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU3LX1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU5LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NjA6dm9pZCBrdm1fcG11X2hhbmRsZV9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2MS17XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2Mi1cXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIFg4Nl9QTUNfSURYX01BWCk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjY2MzpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2NC1cXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjY3OlxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVxcdTAwM2VyZXByb2dyYW1fcG1pLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NjgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc0LVxcdEJVSUxEX0JVR19PTihzaXplb2YoYml0bWFwKSAhPSBzaXplb2YoYXRvbWljNjRfdCkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYzo2NzU6XFx0YXRvbWljNjRfYW5kbm90KCooczY0ICopYml0bWFwLCBcXHUwMDI2cG11LVxcdTAwM2VfX3JlcHJvZ3JhbV9wbWkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NzYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY3NzpcXHRrdm1fZm9yX2VhY2hfcG1jKHBtdSwgcG1jLCBiaXQsIGJpdG1hcCkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NzgtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02ODQtXFx0XFx0aWYgKHJlcHJvZ3JhbV9jb3VudGVyKHBtYykpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY4NTpcXHRcXHRcXHRzZXRfYml0KHBtYy1cXHUwMDNlaWR4LCBwbXUtXFx1MDAzZXJlcHJvZ3JhbV9wbWkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02ODYtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5Mi1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjkzOlxcdGlmICh1bmxpa2VseShwbXUtXFx1MDAzZW5lZWRfY2xlYW51cCkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY5NDpcXHRcXHRrdm1fcG11X2NsZWFudXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5NS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk2OlxcdGt2bV9mb3JfZWFjaF9wbWMocG11LCBwbWMsIGJpdCwgYml0bWFwKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2OTc6XFx0XFx0a3ZtX3BtdV9yZWNhbGNfcG1jX2VtdWxhdGlvbihwbXUsIHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5OC19XFxuYXJjaC94ODYva3ZtL3BtdS5jOjY5OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9oYW5kbGVfZXZlbnQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MDAtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjcwMTppbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTcwMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzo3MTE6XFx0aWYgKCFrdm1fcG11X29wcy5jaGVja19yZHBtY19lYXJseSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEyLVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MTMtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjcxNDpcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKGNoZWNrX3JkcG1jX2Vhcmx5KSh2Y3B1LCBpZHgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTcxNz1ib29sIGlzX3Ztd2FyZV9iYWNrZG9vcl9wbWModTMyIHBtY19pZHgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzI3LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3Mjg6c3RhdGljIGludCBrdm1fcG11X3JkcG1jX3Ztd2FyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGlkeCwgdTY0ICpkYXRhKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1MC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzUxOmludCBrdm1fcG11X3JkcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaWR4LCB1NjQgKmRhdGEpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1Mi17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjc1MzpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1NC1cXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzU3OlxcdGlmICghcG11LVxcdTAwM2V2ZXJzaW9uKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03NTgtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYwLVxcdGlmIChpc192bXdhcmVfYmFja2Rvb3JfcG1jKGlkeCkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjc2MTpcXHRcXHRyZXR1cm4ga3ZtX3BtdV9yZHBtY192bXdhcmUodmNwdSwgaWR4LCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYyLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3NjM6XFx0cG1jID0ga3ZtX3BtdV9jYWxsKHJkcG1jX2VjeF90b19wbWMpKHZjcHUsIGlkeCwgXFx1MDAyNm1hc2spO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03NjQtXFx0aWYgKCFwbWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzc2PXN0YXRpYyBib29sIGt2bV9uZWVkX2FueV9wbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzc3LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzc4OlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzc5LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3ODA6XFx0aWYgKCFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03ODEtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzg3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzo3ODg6XFx0cmV0dXJuIHBtdS1cXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycyAhPSBrdm1faG9zdF9wbXUubnVtX2NvdW50ZXJzX2dwIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jOjc4OTpcXHQgICAgICAgcG11LVxcdTAwM2Vucl9hcmNoX2ZpeGVkX2NvdW50ZXJzICE9IGt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzkyPWJvb2wga3ZtX25lZWRfcGVyZl9nbG9iYWxfY3RybF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5NC1cXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzk1OlxcdCAgICAgICAha3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybCh2Y3B1X3RvX3BtdSh2Y3B1KSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzk5PWJvb2wga3ZtX25lZWRfcmRwbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODAxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgxMC1cXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODExOlxcdCAgICAgICBwbXUtXFx1MDAzZWNvdW50ZXJfYml0bWFza1tLVk1fUE1DX0dQXSAhPSAoQklUX1VMTChrdm1faG9zdF9wbXUuYml0X3dpZHRoX2dwKSAtIDEpIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgxMjpcXHQgICAgICAgcG11LVxcdTAwM2Vjb3VudGVyX2JpdG1hc2tbS1ZNX1BNQ19GSVhFRF0gIT0gKEJJVF9VTEwoa3ZtX2hvc3RfcG11LmJpdF93aWR0aF9maXhlZCkgLSAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODEzLX1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9ODE0PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbmVlZF9yZHBtY19pbnRlcmNlcHQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MTUtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgxNjp2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MTcte1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MTgtXFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYzo4MTk6XFx0XFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODIwLVxcdFxcdGt2bV9hcGljX2xvY2FsX2RlbGl2ZXIodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0xWVFBDKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgyNDpib29sIGt2bV9wbXVfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODI1LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI2OlxcdHJldHVybiBrdm1fcG11X2NhbGwobXNyX2lkeF90b19wbWMpKHZjcHUsIG1zcikgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI3OlxcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MjgtfVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjktXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMDpzdGF0aWMgdm9pZCBrdm1fcG11X21hcmtfcG1jX2luX3VzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzMS17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMjpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMzpcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jID0ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MzQtXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzNS1cXHRpZiAocG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo4MzY6XFx0XFx0X19zZXRfYml0KHBtYy1cXHUwMDNlaWR4LCBwbXUtXFx1MDAzZXBtY19pbl91c2UpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MzctfVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MzgtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzOTppbnQga3ZtX3BtdV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODQxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQyLVxcdHUzMiBtc3IgPSBtc3JfaW5mby1cXHUwMDNlaW5kZXg7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQ2LVxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDc6XFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXM7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTg0OC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy04NTAtXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxcbmFyY2gveDg2L2t2bS9wbXUuYzo4NTE6XFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZWdsb2JhbF9jdHJsO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04NTItXFx0XFx0YnJlYWs7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjE1Ljk1Mzg2NjQ2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODI2NTYwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNU1IgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBNU1IgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGUgY3VycmVudCB2ZW5kb3ItYWdub3N0aWMgZnVuY3Rpb24sIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIGlzIHRoZSB0YXJnZXQgZm9yIG1vdmluZyB0aGUgdmFsaWRhdGlvbiBvZiB0aGVzZSBwYXJ0aWN1bGFyIE1TUnMuIEluc3RlYWQsIHRoaXMgcGF0Y2ggcHJvcG9zZXMgdG8gc2hpZnQgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyY2hpdGVjdHVyYWwgc2VwYXJhdGlvbi4gR2l2ZW4gdGhlIGhpc3RvcnksIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsIHdoYXQgaXMgdGhlIGltcGFjdD8gVGhlIGNoYW5nZSBjbGVhcmx5IGFpbXMgZm9yIGEgbW9yZSBncmFudWxhciwgdmVuZG9yLXNwZWNpZmljIGFwcHJvYWNoIHRvIHZhbGlkYXRpb24uIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIG51YW5jZWQgYmVoYXZpb3Igb3IgcmVxdWlyZW1lbnRzIHdpdGhpbiBJbnRlbCdzIFBNVSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzbid0IGVhc2lseSByZXByZXNlbnRlZCBpbiBhIGdlbmVyaWMgbWFubmVyLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSBob3cgQU1EIGhhbmRsZXMgdGhlc2UgTVNScyAob3IgaWYgdGhleSBhcmUgZXZlbiByZWxldmFudCB0byB0aGVpciBQTVUpLiBJJ2xsIGp1bXAgb3ZlciB0byBgcG11X2FtZC5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFwcHJvYWNoIHRoaXMgdmFsaWRhdGlvbi4gVGhhdCBzaG91bGQgcXVpY2tseSBjb250ZXh0dWFsaXplIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBzaGlmdCBpbiByZXNwb25zaWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgbG9va2luZyBhdCBib3RoIHNpZGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjc3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjIyLjc4MDQyOTgxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHJldHVybiBwbWM7XFxuIDEwMjpcXHR9XFxuIDEwMzpcXHRcXG4gMTA0OlxcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbiAxMDU6XFx0e1xcbiAxMDY6XFx0XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxMDk6XFx0XFx0Y2FzZSBNU1JfSzdfRVZOVFNFTDAgLi4uIE1TUl9LN19QRVJGQ1RSMzpcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBwbXUtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSAwO1xcbiAxMTE6XFx0XFx0Y2FzZSBNU1JfRjE1SF9QRVJGX0NUTDAgLi4uIE1TUl9GMTVIX1BFUkZfQ1RSNTpcXG4gMTEyOlxcdFxcdFxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpO1xcbiAxMTM6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVM6XFxuIDExNDpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX0NUTDpcXG4gMTE1OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTX0NMUjpcXG4gMTE2OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTX1NFVDpcXG4gMTE3OlxcdFxcdFxcdHJldHVybiBwbXUtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSAxO1xcbiAxMTg6XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdGlmIChtc3IgXFx1MDAzZSBNU1JfRjE1SF9QRVJGX0NUUjUgXFx1MDAyNlxcdTAwMjZcXG4gMTIwOlxcdFxcdFxcdCAgICBtc3IgXFx1MDAzYyBNU1JfRjE1SF9QRVJGX0NUTDAgKyAyICogcG11LVxcdTAwM2Vucl9hcmNoX2dwX2NvdW50ZXJzKVxcbiAxMjE6XFx0XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDE7XFxuIDEyMjpcXHRcXHRcXHRicmVhaztcXG4gMTIzOlxcdFxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDEzMTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbiAxMzI6XFx0XFx0dTMyIG1zciA9IG1zcl9pbmZvLVxcdTAwM2VpbmRleDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0LyogTVNSX1BFUkZDVFJuICovXFxuIDEzNTpcXHRcXHRwbWMgPSBnZXRfZ3BfcG1jX2FtZChwbXUsIG1zciwgUE1VX1RZUEVfQ09VTlRFUik7XFxuIDEzNjpcXHRcXHRpZiAocG1jKSB7XFxuIDEzNzpcXHRcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IHBtY19yZWFkX2NvdW50ZXIocG1jKTtcXG4gMTM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMzk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToyMi43ODA1MDI0NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwNzE4NDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEtWTSdzIE1TUiBWYWxpZGF0aW9uOiBBIFByb21pc2luZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIEtWTSdzIE1TUiBoYW5kbGluZyB0aGF0IHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIGZ1enppbmcgdGFyZ2V0LiBUaGUgcGF0aCBzdGFydHMgd2l0aCBgaW50ZWxfaXNfdmFsaWRfbXNyYCBhbmQgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCwgYW5kIGxvb2tzIGxpa2UgaXQncyByZWFjaGFibGUgd2hlbiBhIGd1ZXN0IG9yIHVzZXJzcGFjZSBpcyBtZXNzaW5nIHdpdGggdGhvc2UgY3J1Y2lhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGVzZSBNU1JzIGFyZSBhY2Nlc3NlZCB2aWEgYHJkbXNyYCAvIGB3cm1zcmAgaW5zdHJ1Y3Rpb25zIG9yIHRocm91Z2ggYC9kZXYva3ZtYCB1c2luZyBgS1ZNX1NFVF9NU1JTYCAvIGBLVk1fR0VUX01TUlNgLCB3aGljaCwgaW4gdHVybiwgZ29lcyB0aHJvdWdoIGBrdm1fZ2V0X21zcl9jb21tb25gIC8gYGt2bV9zZXRfbXNyX2NvbW1vbmAgYW5kIGZpbmFsbHkgY2FsbHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgLlxuXG5QcmV2aW91c2x5LCBJIHRoaW5rLCBvbiBBTUQgc3lzdGVtcyAoU1ZNKSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgIGNoZWNrZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKClgIGZ1bmN0aW9uLCBsaWtlbHkgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyBpZiBhbiBJbnRlbCBNU1Igd2FzIGFjY2Vzc2VkLiBOb3csIHRoYXQgbG9naWMgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgdmlhIGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKWAuIE9uIEFNRCwgYGFtZF9pc192YWxpZF9tc3JgIHdvdWxkIHJlamVjdCB0aG9zZSBJbnRlbCBNU1JzLCB3aGlsZSBvbiBJbnRlbCwgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGBpbnRlbF9pc192YWxpZF9tc3JgLCBpcyBnb2luZyB0byBjaGVjayBga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpYC5cblxuVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSB0aGlzIHRvdWNoIGlzIGxvY2F0ZWQgaW4gdGhlIGB2aXJ0L2t2bS9hcmNoL3g4NmAgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGtlcm5lbCBjb2RlIHRoYXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz9cblxuTGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogS1ZNJ3MgeDg2IGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBRRU1VIGFuZCBzeXprYWxsZXIsIHNvIGNoZWNrISBDb3JlIFN1YnN5c3RlbXMgb3IgS1ZNOiBZZXMsIHRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBLVk0sIHNvIGNoZWNrISBUaGF0IG1lYW5zIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5vdywgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZD8gV2UnbGwgbmVlZCBgS1ZNYCBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBgS1ZNX0lOVEVMYC4gVGhlIGNvZGUsIGluIGBwbXVfaW50ZWwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyB0aGF0IEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjI3LjQ4NzY4OTg5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzM3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MjcuNzM0MDMyNjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTEwODIzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcHRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgc3Vycm91bmRpbmcgYGNvbmZpZyBLVk1fSU5URUxgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgd2ViIG9mIGRlcGVuZGVuY2llcyBhcm91bmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbG9uZ3NpZGUgYEtWTV9JTlRFTGAsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVwZW5kIG9uIGl0LiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBmZWF0dXJlIGludGVncmF0ZXMgd2l0aCB0aGUgd2lkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NDMuODQ0ODU4ODQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTA1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuIDEwODpcXHQgICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbiAxMDk6XFx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NDMuODQ0OTI0MzY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MjkxMTI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIFBNVSBNU1IgVmFsaWRhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDogYEtWTWAgYW5kIGBLVk1fSU5URUxgIChvciBgS1ZNX0FNRGAsIG9mIGNvdXJzZSwgdGhvdWdoIEknbSBndWVzc2luZyB0aGlzIHNwZWNpZmljIHBhdGNoIGxlYW5zIHRvd2FyZHMgSW50ZWwpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEZyb20gdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0OiBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCBgaW50ZWxfaXNfdmFsaWRfbXNyYC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGVudHJ5IHBvaW50cyB0aGF0IGFyZW4ndCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGU6IEkgbmVlZCB0byBjb25zaWRlciBga3ZtX3BtdV9nZXRfbXNyYCwgYGt2bV9wbXVfc2V0X21zcmAsIGBrdm1fc2V0X21zcl9jb21tb25gLCBhbmQgYGt2bV9nZXRfbXNyX2NvbW1vbmAuIFRoZXNlICpjb3VsZCogYmUgYWZmZWN0ZWQsIHRob3VnaCBwZXJoYXBzIGluZGlyZWN0bHkuXG5cbmBrdm1fcG11X2lzX3ZhbGlkX21zcmAgYW5kIGBpbnRlbF9pc192YWxpZF9tc3JgIGFyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbi4gTGV0IG1lIGNoZWNrIGlmIGBpbnRlbF9pc192YWxpZF9tc3JgIGlzIHN0YXRpYyBvciBub3QuIExvb2tpbmcgaW4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zciguLi4pYC4gQWhhISBJdCdzICpzdGF0aWMqIHdpdGhpbiB0aGF0IGZpbGUsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgYXNzaWduZWQgdG8gYC5pc192YWxpZF9tc3JgIHdpdGhpbiB0aGUgYGludGVsX3BtdV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBtYWtlcyBpdCBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gYHZtbGludXhgIG9yIGBrdm0taW50ZWwua29gIHdoaWNoIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGZvciBsYXRlci4gIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhIG5vbi1zdGF0aWMgc3ltYm9sLCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vcG11LmNgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIG9yIHJlbGF0ZWQgdG8gb3RoZXIgZnVuY3Rpb25zLiBJJ2xsIGNoZWNrIGNhbGxlcnMgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHBtdS5jYCBhbmQgYHBtdV9pbnRlbC5jYC4gIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBjYWxsZWQgdmlhIGEgYHN0YXRpY19jYWxsYCBvciBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIGNvZGUgc2hvd3MgaXQgaXMgY2FsbGVkIGJ5IGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpYCBpbiBga3ZtX3BtdV9pc192YWxpZF9tc3JgLlxuXG5TbywgbGV0J3MgdmVyaWZ5IG15IGtleSBmb2N1cy4gIE15IHByaW1hcnkgc3ltYm9scyBhcmU6IGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgYW5kIGBpbnRlbF9pc192YWxpZF9tc3JgLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGdpdCBkaWZmIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEFoLCBsb29rcyBsaWtlIHRoZSBwYXRjaCAqb25seSogdG91Y2hlczogMS4gYGFyY2gveDg2L2t2bS9wbXUuY2A6ICBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCAyLiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2A6IGBpbnRlbF9pc192YWxpZF9tc3JgLlxuXG5UaGVzZSBhcmUgYm90aCBub24tdWJpcXVpdG91cyBzeW1ib2xzLCBzcGVjaWZpYyB0byBLVk0gUE1VIE1TUiBoYW5kbGluZywgd2hpY2ggbWFrZXMgdGhlbSB2ZXJ5IGludGVyZXN0aW5nLlxuXG5Pa2F5LCBxdWljayBmaW5hbCBjaGVjazpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIHZlcnkgbXVjaCB3b3J0aCBmdXJ0aGVyIGluc3BlY3Rpb24uXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJLVk1cIiwgXCJLVk1fSU5URUxcIl1gIC0gQ29ycmVjdCwgdGhlc2UgYXJlIHRoZSByZWxldmFudCBjb25maWdzLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJrdm1fcG11X2lzX3ZhbGlkX21zclwiLCBcImludGVsX2lzX3ZhbGlkX21zclwiXWAgLSBBYnNvbHV0ZWx5LlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogcmVmYWN0b3JpbmcgUE1VIE1TUiB2YWxpZGF0aW9uIGZyb20gdGhlIGNvbW1vbiB4ODYgS1ZNIFBNVSBjb2RlIHRvIEludGVsLXNwZWNpZmljIFBNVSBjb2RlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTQsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NTAuMjc0MDM5MzI2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMzI3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3BtdV9pc192YWxpZF9tc3JcIixcbiAgICBcImludGVsX2lzX3ZhbGlkX21zclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3BtdV9pc192YWxpZF9tc3JcIixcbiAgICBcImludGVsX2lzX3ZhbGlkX21zclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1MC4zNTMxODAyMjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTA0MzYyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NTAuMzUzNjQyOTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUxMDM4OTY1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByZWZhY3RvcmluZy9jb3JyZWN0bmVzcyBmaXggZm9yIE1TUiB2YWxpZGF0aW9uIGFjcm9zcyBDUFUgdmVuZG9yIGJhY2tlbmRzIChJbnRlbCB2cyBBTUQpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIG1hbmlwdWxhdGUgZGF0YSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA4NjA1NjlmZWY3NDUzN2U0YmRmNDhhMmVkYzVlMTY4NmI3Njk3ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjM4OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5pbmRleCBhN2Q2MGM4Nzg1Y2Q0Li5kMmZkNDdlZTVlYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC04MjMsMTQgKzgyMyw2IEBAIHZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4ge1xuLVx0c3dpdGNoIChtc3IpIHtcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuLVx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxuLVx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcbi1cdFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4tXHR9XG4gXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XG4gXHQgICAgICAga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcikodmNwdSwgbXNyKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbmluZGV4IGJmYTg2MTJmYjQ1MDguLjcwYThjNDgxNjEzNTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5AQCAtMTg3LDYgKzE4Nyw5IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gXHRpbnQgcmV0O1xuIFxuIFx0c3dpdGNoIChtc3IpIHtcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuK1x0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxuK1x0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcbiBcdGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTDpcbiBcdFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1MC4zNTM2NDM5NzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwMDI3OTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBNU1IgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzaGlmdGluZyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIHZhbGlkYXRpbmcgc29tZSBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpIOKAkyBzcGVjaWZpY2FsbHksIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgIOKAkyBmcm9tIHRoZSBnZW5lcmljIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIHRvIGEgbW9yZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiwgYGludGVsX2lzX3ZhbGlkX21zcmAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgLiBTbywgaXQncyBhIGNvZGUgcmVvcmdhbml6YXRpb24sIGxpa2VseSB0byBjb25zb2xpZGF0ZSBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGxvZ2ljLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCBpcyBoYXBwZW5pbmcuIElzIGl0IGZvciBwZXJmb3JtYW5jZT8gSXMgaXQgdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgSW50ZWwtc3BlY2lmaWMgY2hlY2tzPyBBcmUgdGhlcmUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBpbiB0aGUgVk1YIGltcGxlbWVudGF0aW9uIHRoYXQgbmVjZXNzaXRhdGUgdGhpcz8gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgZGlmZiBvciBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciByZWxhdGVkIGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBNU1JzIGFyZSBiZWluZyB1c2VkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZSwgYW5kIHdoYXQgZHJvdmUgdGhlIGRldmVsb3BlcnMgdG8gbWFrZSB0aGlzIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgcmVmYWN0b3JpbmcgZm9yIGNsYXJpdHksIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCByZWFzb24gYmVoaW5kIHRoaXMgbW92ZT8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTQsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1OS45NTM5MjYwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3Mzg1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9wbXVfaXNfdmFsaWRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcikpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0MS1cXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzNi1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzgtXFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTk0LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5oPTI3Nj1pbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpO1xcbmFyY2gveDg2L2t2bS9wbXUuaDoyNzc6Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuaC0yNzgtaW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjo0MDowMC4xNzEzMzQ0NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludGVsX2lzX3ZhbGlkX21zclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0xNjU9c3RhdGljIGJvb2wgaW50ZWxfcG11X2lzX3ZhbGlkX2xicl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjE4MzpzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTg0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODM3PXN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgzOS1cXHQubXNyX2lkeF90b19wbWMgPSBpbnRlbF9tc3JfaWR4X3RvX3BtYyxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjg0MDpcXHQuaXNfdmFsaWRfbXNyID0gaW50ZWxfaXNfdmFsaWRfbXNyLFxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODQxLVxcdC5nZXRfbXNyID0gaW50ZWxfcG11X2dldF9tc3IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjAwLjIxNjY4MzY5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwMDM4MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIEFNRCdzIFBNVSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgYW5kIHRoZSBjdXJyZW50IGNvZGUgYmFzZSBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggdGhlIGludHJpY2FjaWVzIG9mIGl0LiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODYgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGdsYW5jZSBhdCBgYXJjaC94ODYva3ZtL3N2bS9wbXUuY2AuIFRoaXMgaXMgd2hlcmUgQU1EJ3MgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB1c3VhbGx5IGhhbmRsZXMgaXRzIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBTUQncyBwcm9jZXNzb3JzIGRlYWwgd2l0aCB0aGlzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBLVk0gY29udGV4dC4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSBpZiBBTUQgaGFzIGFueSBkaXN0aW5jdCBsb2dpYyBvciBoYW5kbGluZyBmb3IgdGhlIFBNVSB0aGF0IGRpdmVyZ2VzIGZyb20gdGhlIG1vcmUgZ2VuZXJhbCB4ODYgaW1wbGVtZW50YXRpb24uIEFyZSB0aGVyZSBhbnkgdW5pcXVlIGhvb2tzLCByZWdpc3RlcnMsIG9yIGNvbnRyb2wgZmxvd3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uc3RyYWludHMgb24gaG93IEFNRCdzIFBNVSB3b3JrcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGF0IHRoZSBnZW5lcmljIGNvZGUgbWF5IG5vdCBhY2NvdW50IGZvcj8gRXNzZW50aWFsbHksIEkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgQU1ELXNwZWNpZmljIGNvZGUsIGxvb2tpbmcgZm9yIGVpdGhlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IHBpdGZhbGxzLiBHcmFiYmluZyB0aGlzIGNvZGUgYW5kIHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDQuMTE2NzI0NTk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY4NDgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc192YWxpZF9tc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jPTkzPXN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqYW1kX21zcl9pZHhfdG9fcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTAzLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MTA0OnN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTA1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDctXFx0LmNoZWNrX3JkcG1jX2Vhcmx5ID0gYW1kX2NoZWNrX3JkcG1jX2Vhcmx5LFxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MzA4OlxcdC5pc192YWxpZF9tc3IgPSBhbWRfaXNfdmFsaWRfbXNyLFxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA5LVxcdC5nZXRfbXNyID0gYW1kX3BtdV9nZXRfbXNyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjo0MDowNC4xNTk0MTMwMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyOTc5NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEludGVsIFBNVSBNU1IgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEtWTS9WTVggY29udGV4dC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTgwLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgb3IgYXQgbGVhc3QgYSByZWxldmFudCBkYXRhIHN0cnVjdHVyZSBvciBjb25zdGFudCBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHRoZSB2YWxpZGl0eSBvZiBhIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVyIChNU1IpLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCwgYW5kIGEgZmVlbCBmb3IgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLiBJIHdpbGwgbGlrZWx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBNU1IsIHN1Y2ggYXMgdGhlIGFyY2hpdGVjdHVyZSB0eXBlLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGxvb2sgdXAgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDYuMzg5MjEwNTY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MTpcXHR9XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDE4NjpcXHRcXHR1NjQgcGVyZl9jYXBhYmlsaXRpZXM7XFxuIDE4NzpcXHRcXHRpbnQgcmV0O1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxOTA6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDE5MTpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuIDE5MjpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxcbiAxOTM6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gMTk1OlxcdFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIDE5NjpcXHRcXHRcXHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xcbiAxOTc6XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRjYXNlIE1TUl9JQTMyX0RTX0FSRUE6XFxuIDE5OTpcXHRcXHRcXHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XFxuIDIwMDpcXHRcXHRcXHRicmVhaztcXG4gMjAxOlxcdFxcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XFxuIDIwMjpcXHRcXHRcXHRwZXJmX2NhcGFiaWxpdGllcyA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpO1xcbiAyMDM6XFx0XFx0XFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXFx1MDAyNlxcdTAwMjZcXG4gMjA0OlxcdFxcdFxcdFxcdCgocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXFx1MDAzZSAzKTtcXG4gMjA1OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMjA3OlxcdFxcdFxcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxcbiAyMDg6XFx0XFx0XFx0XFx0Z2V0X2dwX3BtYyhwbXUsIG1zciwgTVNSX1A2X0VWTlRTRUwwKSB8fFxcbiAyMDk6XFx0XFx0XFx0XFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcXG4gMjEwOlxcdFxcdFxcdFxcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XFxuIDIxMTpcXHRcXHRcXHRicmVhaztcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIHN0cnVjdCBrdm1fcG1jICppbnRlbF9tc3JfaWR4X3RvX3BtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjA2LjM4OTMwMzgyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYwMTcxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBBTUQgTVNSIFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IE1TUiB2YWxpZGF0aW9uIGluIHRoZSBLVk0vU1ZNIGNvbnRleHQuIEl0J3MgdGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGFtZF9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLiBUaGlzIGZlZWxzIGxpa2UgYSBnb29kIHNwb3QgdG8gY2hlY2sgdGhlIGxvZ2ljLCBjb25zaWRlcmluZyB3ZSdyZSBkZWFsaW5nIHdpdGggQU1ELXNwZWNpZmljIGJlaGF2aW9yLCBhbmQgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZnRlbiBpbnRlcmFjdHMgd2l0aCBNU1JzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyBLVk0gZGV0ZXJtaW5lcyB3aGljaCBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgYXJlIGFjY2VwdGFibGUgZm9yIGd1ZXN0IGFjY2VzcywgcGFydGljdWxhcmx5IG9uIGFuIEFNRCBzeXN0ZW0uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YWxpZGF0aW9uIGNyaXRlcmlhLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcz8gQXJlIHRoZXJlIHNwZWNpZmljIHJhbmdlcyBvciBiaXRmaWVsZCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzY3J1dGluaXplZD8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggb3RoZXIgQU1ELXNwZWNpZmljIGZlYXR1cmVzIG9yIGVycmF0YSBpbiB0aGUgY29kZT8gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDkuMzQ5NDc3MTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vcG11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0cmV0dXJuIHBtYztcXG4gMTAyOlxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDEwNTpcXHR7XFxuIDEwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdHN3aXRjaCAobXNyKSB7XFxuIDEwOTpcXHRcXHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxcbiAxMTA6XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDA7XFxuIDExMTpcXHRcXHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxcbiAxMTI6XFx0XFx0XFx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX1BFUkZDVFJfQ09SRSk7XFxuIDExMzpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcXG4gMTE0OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfQ1RMOlxcbiAxMTU6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVNfQ0xSOlxcbiAxMTY6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVNfU0VUOlxcbiAxMTc6XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDE7XFxuIDExODpcXHRcXHRkZWZhdWx0OlxcbiAxMTk6XFx0XFx0XFx0aWYgKG1zciBcXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcXHUwMDI2XFx1MDAyNlxcbiAxMjA6XFx0XFx0XFx0ICAgIG1zciBcXHUwMDNjIE1TUl9GMTVIX1BFUkZfQ1RMMCArIDIgKiBwbXUtXFx1MDAzZW5yX2FyY2hfZ3BfY291bnRlcnMpXFxuIDEyMTpcXHRcXHRcXHRcXHRyZXR1cm4gcG11LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMTtcXG4gMTIyOlxcdFxcdFxcdGJyZWFrO1xcbiAxMjM6XFx0XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRyZXR1cm4gYW1kX21zcl9pZHhfdG9fcG1jKHZjcHUsIG1zcik7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdHN0YXRpYyBpbnQgYW1kX3BtdV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4gMTI5OlxcdHtcXG4gMTMwOlxcdFxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG4gMTMxOlxcdFxcdHN0cnVjdCBrdm1fcG1jICpwbWM7XFxuIDEzMjpcXHRcXHR1MzIgbXNyID0gbXNyX2luZm8tXFx1MDAzZWluZGV4O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBNU1JfUEVSRkNUUm4gKi9cXG4gMTM1OlxcdFxcdHBtYyA9IGdldF9ncF9wbWNfYW1kKHBtdSwgbXNyLCBQTVVfVFlQRV9DT1VOVEVSKTtcXG4gMTM2OlxcdFxcdGlmIChwbWMpIHtcXG4gMTM3OlxcdFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xcbiAxMzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjA5LjM0OTU0MjEwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTA3OTc4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUE1VIE1TUiBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIE1TUiAoTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXIpIHZhbGlkYXRpb24gd2l0aGluIHRoZSBLVk0gUE1VIChQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEludGVsIGFuZCBBTUQgcGxhdGZvcm1zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgcmVsb2NhdGluZyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIEludGVsLXNwZWNpZmljIENvcmUgUE1VIE1TUnMsIHNwZWNpZmljYWxseSBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gUHJldmlvdXNseSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBoYW5kbGVkIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IGNhbGxlZCBpbnRvIHZlbmRvci1zcGVjaWZpYyBjYWxsYmFja3MgdmlhIGBrdm1fcG11X2NhbGxgLCBhbmQgdGhlc2UgTVNScyBhcmUgKm9ubHkqIHZhbGlkIG9uIEludGVsLiBPbiBBTUQsIHRoZXNlIE1TUnMgYXJlIG1lYW5pbmdsZXNzOyB0aGV5IGhhdmUgdGhlaXIgb3duIHNldCAoYE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMXypgKS4gQnkgbW92aW5nIHRoZXNlIGNoZWNrcyBpbnRvIGBpbnRlbF9pc192YWxpZF9tc3JgLCB3ZSdyZSBwcmV2ZW50aW5nIEFNRCBndWVzdHMgZnJvbSBpbmNvcnJlY3RseSBpZGVudGlmeWluZyB0aGVzZSBJbnRlbC1zcGVjaWZpYyBNU1JzIGFzIHZhbGlkIGFuZCBhdHRlbXB0aW5nIHRvIHVzZSB0aGVtLCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cblxuTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggbXkgc3RhbmRhcmQgY2hlY2tsaXN0IHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpbiByZWdhcmRzIHRvIEtBU0FOL0tNU0FOLlxuXG4qICAgKipLZXJuZWwgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0J3MgZ29vZC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgVXNhZ2U6KiogVGhlcmUncyBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbiB0aGUgY29yZSBsb2dpYy4gVGhlIHBhdGNoIG9wZXJhdGVzIG9uIHRoZSBgbXNyYCB3aGljaCBpcyBwYXNzZWQgYnkgdmFsdWUgKGFuZCB0aGVyZWZvcmUgbXVzdCBiZSB2YWxpZCkuXG4qICAgKipEYXRhIFN0cnVjdHVyZSBBbGxvY2F0aW9uOioqIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IG1pZ2h0IGJlIHN1c2NlcHRpYmxlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuKiAgICoqQnVmZmVyIE92ZXJmbG93L01lbW9yeSBSZWFkczoqKiBJIHNlZSBubyBpbnZvbHZlbWVudCB3aXRoIGJ1ZmZlcnMgb3IgZGlyZWN0IG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggcmVvcmdhbml6aW5nIE1TUiBkaXNwYXRjaC5cblxuR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCBJJ20gY29uZmlkZW50IGluIGFzc2Vzc2luZyB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLlxuXG4qICAgKipLQVNBTjoqKiBUaGlzIGNoYW5nZSBhbHRlcnMgTVNSIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1heSBhZmZlY3QgaG93IEtBU0FOIGRldGVjdHMvZG9lcyBub3QgZGV0ZWN0IGFuIGVycm9yLCBidXQgZG9lcyBub3QgaW50cm9kdWNlIG9uZSBpdHNlbGYuXG4qICAgKipLTVNBTjoqKiBJIGRvbid0IHNlZSBhbnkgcmlzayBvZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgIGhlcmUuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIHRhcmdldGVkIGZpeCB0aGF0IHNob3VsZCBpbXByb3ZlIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBLVk0gUE1VIG9uIEFNRCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQwLCJPdXRwdXRUb2tlbnMiOjE4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjE1LjQ1NzUyMzE0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2sgZm9yIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgTVNScyAoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBhbmQgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gdGhlIGdlbmVyaWMga3ZtX3BtdV9pc192YWxpZF9tc3IoKSBmdW5jdGlvbiBpbnRvIGludGVsX2lzX3ZhbGlkX21zcigpLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2sgZm9yIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgTVNScyAoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBhbmQgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gdGhlIGdlbmVyaWMga3ZtX3BtdV9pc192YWxpZF9tc3IoKSBmdW5jdGlvbiBpbnRvIGludGVsX2lzX3ZhbGlkX21zcigpLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsshnz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 16:19:37 +0000 UTC FinishedAt: 2026-09-03 16:40:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "b1b8ca04-d945-48c9-a072-06000cd40904" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_pmu_is_valid_msr", "intel_is_valid_msr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcG11X2lzX3ZhbGlkX21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9pc192YWxpZF9tc3ImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGFuZCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCkgZnJvbSB0aGUgZ2VuZXJpYyBrdm1fcG11X2lzX3ZhbGlkX21zcigpIGZ1bmN0aW9uIGludG8gaW50ZWxfaXNfdmFsaWRfbXNyKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDg2MDU2OWZlZjc0NTM3ZTRiZGY0OGEyZWRjNWUxNjg2Yjc2OTdkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5pbmRleCBhN2Q2MGM4Nzg1Y2Q0Li5kMmZkNDdlZTVlYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC04MjMsMTQgJiM0Mzs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIHtcbi1cdHN3aXRjaCAobXNyKSB7XG4tXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4tXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuIFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuIFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5pbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4Nyw2ICYjNDM7MTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKG1zcikge1xuJiM0MztcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuJiM0MztcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbiYjNDM7XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxuIFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxuIFx0XHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xuIFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9pc192YWxpZF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDg2MDU2OWZlZjc0NTM3ZTRiZGY0OGEyZWRjNWUxNjg2Yjc2OTdkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmMKaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9wbXUuYwpAQCAtODIzLDE0ICYjNDM7ODIzLDYgQEAgdm9pZCBrdm1fcG11X2RlbGl2ZXJfcG1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiB7Ci0Jc3dpdGNoIChtc3IpIHsKLQljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzoKLQljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKLQkJcmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KIAlyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8CiAJICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwppbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMKQEAgLTE4Nyw2ICYjNDM7MTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcikKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChtc3IpIHsKJiM0MzsJY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDoKJiM0MzsJY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKIAljYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6CiAJCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7CiAJY2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MgoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNVSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AgYW5kIHRoZSBJbnRlbC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHdlIGNhbiBpZ25vcmUgYW55IHBvdGVudGlhbCAzMi1iaXQgc3BlY2lmaWMgY29uY2VybnMgZm9yIG5vdy4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmV5b25kIGp1c3QgdGhlIGxpbmVzIGluIHRoZSBkaWZmIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCBhIHdpZGVyIHZpZXcuIEkmIzM5O2xsIHJlYWNoIGZvciBteSB0b29scyDigJMgcHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcsIG9yIGlmIEkgbmVlZCBtb3JlIHRhcmdldGVkIGluZm9ybWF0aW9uLCBtYXliZSBldmVuIGBncmVwcGVyYCDigJMgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIHRob3NlIGZpbGVzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBQTVUgKFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTSBmb3IgeDg2LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgd2VyZSB0aGV5IHRyeWluZyB0byBmaXggb3IgaW1wcm92ZT8gV2hhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcbiA4MTY6XHR2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDgxNzpcdHtcbiA4MTg6XHRcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpIHtcbiA4MTk6XHRcdFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcbiA4MjA6XHRcdFx0a3ZtX2FwaWNfbG9jYWxfZGVsaXZlcih2Y3B1LVx1MDAzZWFyY2guYXBpYywgQVBJQ19MVlRQQyk7XG4gODIxOlx0XHR9XG4gODIyOlx0fVxuIDgyMzpcdFxuIDgyNDpcdGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDgyNTpcdHtcbiA4MjY6XHRcdHJldHVybiBrdm1fcG11X2NhbGwobXNyX2lkeF90b19wbWMpKHZjcHUsIG1zcikgfHxcbiA4Mjc6XHRcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xuIDgyODpcdH1cbiA4Mjk6XHRcbiA4MzA6XHRzdGF0aWMgdm9pZCBrdm1fcG11X21hcmtfcG1jX2luX3VzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gODMxOlx0e1xuIDgzMjpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDgzMzpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKTtcbiA4MzQ6XHRcbiA4MzU6XHRcdGlmIChwbWMpXG4gODM2Olx0XHRcdF9fc2V0X2JpdChwbWMtXHUwMDNlaWR4LCBwbXUtXHUwMDNlcG1jX2luX3VzZSk7XG4gODM3Olx0fVxuIDgzODpcdFxuIDgzOTpcdGludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIDg0MDpcdHtcbiA4NDE6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiA4NDI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiA4NDM6XHRcbiA4NDQ6XHRcdHN3aXRjaCAobXNyKSB7XG4gODQ1Olx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbiA4NDY6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDg0NzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZWdsb2JhbF9zdGF0dXM7XG4gODQ4Olx0XHRcdGJyZWFrO1xuIDg0OTpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHJldHVybiByZXQ7XG4gMTgxOlx0fVxuIDE4MjpcdFxuIDE4MzpcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gMTg0Olx0e1xuIDE4NTpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDE4NjpcdFx0dTY0IHBlcmZfY2FwYWJpbGl0aWVzO1xuIDE4NzpcdFx0aW50IHJldDtcbiAxODg6XHRcbiAxODk6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTkwOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbiAxOTE6XHRcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbiAxOTI6XHRcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4gMTkzOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gMTk0Olx0XHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4gMTk1Olx0XHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIDE5NjpcdFx0XHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XG4gMTk3Olx0XHRcdGJyZWFrO1xuIDE5ODpcdFx0Y2FzZSBNU1JfSUEzMl9EU19BUkVBOlxuIDE5OTpcdFx0XHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XG4gMjAwOlx0XHRcdGJyZWFrO1xuIDIwMTpcdFx0Y2FzZSBNU1JfUEVCU19EQVRBX0NGRzpcbiAyMDI6XHRcdFx0cGVyZl9jYXBhYmlsaXRpZXMgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KTtcbiAyMDM6XHRcdFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSBcdTAwMjZcdTAwMjZcbiAyMDQ6XHRcdFx0XHQoKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXHUwMDNlIDMpO1xuIDIwNTpcdFx0XHRicmVhaztcbiAyMDY6XHRcdGRlZmF1bHQ6XG4gMjA3Olx0XHRcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxuIDIwODpcdFx0XHRcdGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9QNl9FVk5UU0VMMCkgfHxcbiAyMDk6XHRcdFx0XHRnZXRfZml4ZWRfcG1jKHBtdSwgbXNyKSB8fCBnZXRfZndfZ3BfcG1jKHBtdSwgbXNyKSB8fFxuIDIxMDpcdFx0XHRcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XG4gMjExOlx0XHRcdGJyZWFrO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIEtWTSBQTVUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL3BtdS5jYCBmaWxlLiBUaGUgb3JpZ2luYWwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBmdW5jdGlvbiwgaW4gdGhhdCBmaWxlLCB1c2VkIHRvIGNvbnRhaW4gYSBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKTogYE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVU2AsIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMYCwgYW5kIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTGAuIFRoZSBmdW5jdGlvbiB0aGVuIHVzZWQgdG8gcmV0dXJuIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtgLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgdGhlc2UgSW50ZWwtc3BlY2lmaWMgTVNSIGNoZWNrcyB3ZXJlIHJlc2lkaW5nIGluICpjb21tb24qIGNvZGUgKGBrdm1fcG11LmNgKS4gVGhpcyBoYWQgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgQU1EIHN5c3RlbXMsIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGRpcmVjdGx5IHVzaW5nIHRob3NlIEludGVsIFBNVSBmZWF0dXJlcywgaWYgQU1EIGNhbGxlZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbC4KCk5vdywgdGhlIHBhdGNoIGFwcGVhcnMgdG8gaGF2ZSBtb3ZlZCB0aGVzZSBJbnRlbC1zcGVjaWZpYyBjaGVja3MuIFRoZXkmIzM5O3ZlIGJlZW4gc2hpZnRlZCBmcm9tIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgdG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBpbnRlbF9pc192YWxpZF9tc3JgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgc2VwYXJhdGVzIHRoZSBJbnRlbC1zcGVjaWZpYyBsb2dpYy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBBTUQgY29kZSwgaWYgaXQgZXhpc3RzLCBpcyBjb3JyZWN0IG9yIGlmIGl0IGNhbGxzIGBpbnRlbF9pc192YWxpZF9tc3JgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBBTUQgUE1VIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdCBzb21ldGhpbmcgc2ltaWxhciBoYXBwZW5pbmcgdGhlcmUsIGluIGBwbXVfYW1kLmNgIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBJJiMzOTtsbCBzZWFyY2ggZm9yIEFNRCYjMzk7cyBgaXNfdmFsaWRfbXNyYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc192YWxpZF9tc3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cdGNhc2UgTVNSX1A2X0VWTlRTRUwwIC4uLiBNU1JfUDZfRVZOVFNFTDE6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTgzOS1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE4NDA6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xODQxLVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM3Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXHUwMDNlaW5kZXgpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM4LVx0XHRcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5Mi1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3JfaW5mby1cdTAwM2VpbmRleCkpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTQtXHRcdFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyNS17XG5hcmNoL3g4Ni9rdm0vcG11LmMtODI2LVx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuYXJjaC94ODYva3ZtL3BtdS5jOjgyNzpcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgyOC19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTI2PXN0cnVjdCBrdm1fcG11X29wcyB7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oLTMwLVx0aW50ICgqY2hlY2tfcmRwbWNfZWFybHkpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlkeCk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6MzE6XHRib29sICgqaXNfdmFsaWRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5oLTMyLVx0aW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11Lmg9Mjc2PWludCBrdm1fcG11X2NoZWNrX3JkcG1jX2Vhcmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlkeCk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6Mjc3OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcbmFyY2gveDg2L2t2bS9wbXUuaC0yNzgtaW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9OTM9c3RhdGljIHN0cnVjdCBrdm1fcG1jICphbWRfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTAzLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzoxMDQ6c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTEwNS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDctXHQuY2hlY2tfcmRwbWNfZWFybHkgPSBhbWRfY2hlY2tfcmRwbWNfZWFybHksXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jOjMwODpcdC5pc192YWxpZF9tc3IgPSBhbWRfaXNfdmFsaWRfbXNyLFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDktXHQuZ2V0X21zciA9IGFtZF9wbXVfZ2V0X21zcixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE2NT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbmRleClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4Mi1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTgzOnN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04Mzc9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgzOS1cdC5tc3JfaWR4X3RvX3BtYyA9IGludGVsX21zcl9pZHhfdG9fcG1jLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4NDA6XHQuaXNfdmFsaWRfbXNyID0gaW50ZWxfaXNfdmFsaWRfbXNyLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04NDEtXHQuZ2V0X21zciA9IGludGVsX3BtdV9nZXRfbXNyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBQTVUgRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBQTVUgZW11bGF0aW9uIGxvZ2ljLCBmb2N1c2luZyBvbiB0aGUgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGNhbiB0aGlzIGJlICpyZWFjaGVkKiBhbmQgKmZ1enplZCogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kIHN5emthbGxlciBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmU/CgpJIGtub3cgc3l6a2FsbGVyIGhlYXZpbHkgdXRpbGl6ZXMgYC9kZXYva3ZtYCBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9NU1JTYCwgYEtWTV9HRVRfTVNSU2AsIGFuZCBgS1ZNX1JVTmAgKGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24vdmNwdSBNU1IgYWNjZXNzKSB0byBoaXQgS1ZNLCBzbyB0aGUgYW5zd2VyIGlzIGEgY29uZmlkZW50IHllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBiZWluZyBoaXQuIEFuZCB0aGUgcHJlcmVxdWlzaXRlcyDigJMgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgb24gYW1kNjQg4oCTIGFyZSwgb2YgY291cnNlLCBwcmVzZW50LiBJIG1lYW4sIHdlJiMzOTtkIGJlIGhhcmQtcHJlc3NlZCB0byAqbm90KiBoYXZlIHRob3NlIGVuYWJsZWQuCgpTbywgaXMgdGhpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIG9idmlvdXNseSwgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb25zIG1lbnRpb25lZC4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgdG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBjcnVjaWFsIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgS1ZNIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUE1VIGNvZGUgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIGZvciB4ODYuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHRvIHNlZSBob3cgYm90aCBgcG11LmNgIOKAkyB3aGljaCBJIGFzc3VtZSBpcyB0aGUgZ2VuZXJpYyBQTVUgbGF5ZXIg4oCTIGFuZCB0aGUgSW50ZWwtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2bXgvcG11X2ludGVsLmNgLCBhcmUgYnVpbHQgYW5kIGxpbmtlZC4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGJ1aWxkIGZsYWdzIHVzZWQsIGFuZCBob3cgdGhlIGRpZmZlcmVudCBQTVUgaW1wbGVtZW50YXRpb25zIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGNvcmUgS1ZNIGJ1aWxkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgVk1YIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMjgxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9Nj1pbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtNy1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTktXHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTE1PWt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTYtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTc6a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xOC1cdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNDprdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTI4LSNpbmNsdWRlIFwmIzM0O3RyYWNlLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjI5OiNpbmNsdWRlIFwmIzM0O3BtdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0zMC0jaW5jbHVkZSBcJiMzNDt4ZW4uaFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jPTM3Nj12b2lkIGt2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUwLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6NDUxOlx0a3ZtX3BtdV9yZWZyZXNoKHZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUyLVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jPTE0MzI9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUyNC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MjU6XHRcdGlmICghZW5hYmxlX3BtdSB8fCAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKSB7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTI2LVx0XHRcdGVudHJ5LVx1MDAzZWVheCA9IGVudHJ5LVx1MDAzZWVieCA9IGVudHJ5LVx1MDAzZWVjeCA9IGVudHJ5LVx1MDAzZWVkeCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUyOS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzA6XHRcdGVheC5zcGxpdC52ZXJzaW9uX2lkID0ga3ZtX3BtdV9jYXAudmVyc2lvbjtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzE6XHRcdGVheC5zcGxpdC5udW1fY291bnRlcnMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTMyOlx0XHRlYXguc3BsaXQuYml0X3dpZHRoID0ga3ZtX3BtdV9jYXAuYml0X3dpZHRoX2dwO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzMzpcdFx0ZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoID0ga3ZtX3BtdV9jYXAuZXZlbnRzX21hc2tfbGVuO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNDpcdFx0ZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZCA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzU6XHRcdGVkeC5zcGxpdC5iaXRfd2lkdGhfZml4ZWQgPSBrdm1fcG11X2NhcC5iaXRfd2lkdGhfZml4ZWQ7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM2LVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNzpcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24pXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM4LVx0XHRcdGVkeC5zcGxpdC5hbnl0aHJlYWRfZGVwcmVjYXRlZCA9IDE7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0MC1cdFx0ZW50cnktXHUwMDNlZWF4ID0gZWF4LmZ1bGw7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTQxOlx0XHRlbnRyeS1cdTAwM2VlYnggPSBrdm1fcG11X2NhcC5ldmVudHNfbWFzaztcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1NDItXHRcdGVudHJ5LVx1MDAzZWVjeCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5MS1cdFx0ZW50cnktXHUwMDNlZWN4ID0gZW50cnktXHUwMDNlZWR4ID0gMDtcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTI6XHRcdGlmICghZW5hYmxlX3BtdSB8fCAha3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpKSB7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODkzLVx0XHRcdGVudHJ5LVx1MDAzZWVheCA9IGVudHJ5LVx1MDAzZWVieCA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5OC1cbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTk6XHRcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xOTAwLVx0XHRlbnRyeS1cdTAwM2VlYnggPSBlYnguZnVsbDtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0LSNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM1OiNpbmNsdWRlIFwmIzM0O3BtdS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM2LVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtOC0jaW5jbHVkZSBcJiMzNDttc3JzLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tc3JzLmM6OTojaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21zcnMuYy0xMC0jaW5jbHVkZSBcJiMzNDt0cmFjZS5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYz0xOTE9c3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfYmFzZVtdID0ge1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE3LVxuYXJjaC94ODYva3ZtL21zcnMuYzoyMTg6c3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfcG11W10gPSB7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOS1cdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MjUwPXN0YXRpYyB1MzIgbXNyc190b19zYXZlW0FSUkFZX1NJWkUobXNyc190b19zYXZlX2Jhc2UpICYjNDM7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI1MTpcdFx0XHRBUlJBWV9TSVpFKG1zcnNfdG9fc2F2ZV9wbXUpXTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjUyLXN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9OTA2PXN0YXRpYyBmYXN0cGF0aF90IF9faGFuZGxlX2Zhc3RwYXRoX3dybXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTkwNy17XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjkwODpcdGlmICgha3ZtX3BtdV9pc19mYXN0cGF0aF9lbXVsYXRpb25fYWxsb3dlZCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9tc3JzLmMtOTA5LVx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTMtXHRcdHZjcHUtXHUwMDNlYXJjaC5wZXJmX2NhcGFiaWxpdGllcyA9IGRhdGE7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE0OTQ6XHRcdGt2bV9wbXVfcmVmcmVzaCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTQ5NS1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ0FMQ19JTlRFUkNFUFRTLCB2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxNzU1Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc1NjpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE4MzktXHRkZWZhdWx0OlxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTg0MTpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM2LVx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcdFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVx1MDAzZWluZGV4KSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzODpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzOS1cdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IDA7XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTkyLVx0ZGVmYXVsdDpcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE5MzpcdFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVx1MDAzZWluZGV4KSlcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE5NDpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9nZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5NS1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTI1NjM9c3RhdGljIHZvaWQga3ZtX3Byb2JlX21zcl90b19zYXZlKHUzMiBtc3JfaW5kZXgpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjEzLVx0XHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcdTAwM2U9XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2MTQ6XHRcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3ApXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2MTUtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxOS1cdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwIFx1MDAzZT1cbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYyMDpcdFx0ICAgIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncClcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyMS1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjI1LVx0XHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIFx1MDAzZT1cbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYyNjpcdFx0ICAgIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZClcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyNy1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYz0yNjcwPXZvaWQga3ZtX2luaXRfbXNyX2xpc3RzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc0LVx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2NzU6XHRcdFx0IFwmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCYjMzQ7KTtcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjY3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2ODMtXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjI2ODQ6XHRpZiAoZW5hYmxlX3BtdSkge1xuYXJjaC94ODYva3ZtL21zcnMuYzoyNjg1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1zcnNfdG9fc2F2ZV9wbXUpOyBpJiM0MzsmIzQzOylcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NjpcdFx0XHRrdm1fcHJvYmVfbXNyX3RvX3NhdmUobXNyc190b19zYXZlX3BtdVtpXSk7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2ODctXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTI0LSNpbmNsdWRlIFwmIzM0O2xhcGljLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9wbXUuYzoyNTojaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuYXJjaC94ODYva3ZtL3BtdS5jLTI2LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMC0vKiBVbmFkdWx0ZXJlZCBQTVUgY2FwYWJpbGl0aWVzIG9mIHRoZSBob3N0LCBpLmUuIG9mIGhhcmR3YXJlLiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjMxOnN0YXRpYyBzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5IF9fcmVhZF9tb3N0bHkga3ZtX2hvc3RfcG11O1xuYXJjaC94ODYva3ZtL3BtdS5jLTMyLVxuYXJjaC94ODYva3ZtL3BtdS5jLTMzLS8qIEtWTSYjMzk7cyBQTVUgY2FwYWJpbGl0aWVzLCBpLmUuIHRoZSBpbnRlcnNlY3Rpb24gb2YgS1ZNIGFuZCBoYXJkd2FyZSBzdXBwb3J0LiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjM0OnN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgX19yZWFkX21vc3RseSBrdm1fcG11X2NhcDtcbmFyY2gveDg2L2t2bS9wbXUuYzozNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9jYXApO1xuYXJjaC94ODYva3ZtL3BtdS5jLTM2LVxuYXJjaC94ODYva3ZtL3BtdS5jLTM3LS8qIEVuYWJsZS9kaXNhYmxlIFBNVSB2aXJ0dWFsaXphdGlvbiAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjM4OmJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfcG11ID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9wbXUuYzozOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZW5hYmxlX3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NDA6bW9kdWxlX3BhcmFtKGVuYWJsZV9wbXUsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQxLVxuYXJjaC94ODYva3ZtL3BtdS5jLTQyLS8qIEVuYWJsZS9kaXNhYmxlZCBtZWRpYXRlZCBQTVUgdmlydHVhbGl6YXRpb24uICovXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NDQ6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGVuYWJsZV9tZWRpYXRlZF9wbXUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjQ2OnN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIge1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ3LVx0X191MzIgYWN0aW9uO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy01Ny1cbmFyY2gveDg2L2t2bS9wbXUuYzo1ODpzdHJ1Y3Qga3ZtX3BtdV9lbXVsYXRlZF9ldmVudF9zZWxlY3RvcnMge1xuYXJjaC94ODYva3ZtL3BtdS5jLTU5LVx0dTY0IElOU1RSVUNUSU9OU19SRVRJUkVEO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02MS19O1xuYXJjaC94ODYva3ZtL3BtdS5jOjYyOnN0YXRpYyBzdHJ1Y3Qga3ZtX3BtdV9lbXVsYXRlZF9ldmVudF9zZWxlY3RvcnMgX19yZWFkX21vc3RseSBrdm1fcG11X2V2ZW50c2VsO1xuYXJjaC94ODYva3ZtL3BtdS5jLTYzLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgdm14X3BlYnNfcGRpc3RfY3B1W10gPSB7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTgzLSAqICAgaW4gZml4ZWRfY291bnRlcnNbXSByZXNwZWN0aXZlbHkuIEJvdGggb2YgdGhlbSBhcmUgcGFydCBvZiBcJiMzNDtzdHJ1Y3RcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDogKiAgIGt2bV9wbXVcJiMzNDs7XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODU6ICogLSBwbXUuYyB1bmRlcnN0YW5kcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGdwIGNvdW50ZXJzIGFuZCBmaXhlZCBjb3VudGVycy5cbmFyY2gveDg2L2t2bS9wbXUuYy04Ni0gKiAgIEhvd2V2ZXIgQU1EIGRvZXNuJiMzOTt0IHN1cHBvcnQgZml4ZWQtY291bnRlcnM7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTEwNi1cbmFyY2gveDg2L2t2bS9wbXUuYzoxMDc6c3RhdGljIHN0cnVjdCBrdm1fcG11X29wcyBrdm1fcG11X29wcyBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYva3ZtL3BtdS5jLTEwOC1cbmFyY2gveDg2L2t2bS9wbXUuYy0xMDktI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKVx0XHRcdFx0XHQgICAgIFxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTEwOlx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9wbXVfIyNmdW5jLFx0XHRcdCAgICAgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTE6XHRcdFx0XHQqKCgoc3RydWN0IGt2bV9wbXVfb3BzICopMCktXHUwMDNlZnVuYykpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTExMi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMIEtWTV9YODZfUE1VX09QXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTEzLSNkZWZpbmUgS1ZNX1g4Nl9QTVVfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X1BNVV9PUFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNDojaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTU6RVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X3BtdV9wbWNfaXNfZGlzYWJsZWRfaW5fY3VycmVudF9tb2RlKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTYtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTE3OnZvaWQga3ZtX3BtdV9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTgte1xuYXJjaC94ODYva3ZtL3BtdS5jOjExOTpcdG1lbWNweShcdTAwMjZrdm1fcG11X29wcywgcG11X29wcywgc2l6ZW9mKGt2bV9wbXVfb3BzKSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTIwLVxuYXJjaC94ODYva3ZtL3BtdS5jLTEyMS0jZGVmaW5lIF9fS1ZNX1g4Nl9QTVVfT1AoZnVuYykgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjI6XHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9wbXVfIyNmdW5jLCBrdm1fcG11X29wcy5mdW5jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjMtI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKSBcXFxuYXJjaC94ODYva3ZtL3BtdS5jOjEyNDpcdFdBUk5fT04oIWt2bV9wbXVfb3BzLmZ1bmMpOyBfX0tWTV9YODZfUE1VX09QKGZ1bmMpXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTI1LSNkZWZpbmUgS1ZNX1g4Nl9QTVVfT1BfT1BUSU9OQUwgX19LVk1fWDg2X1BNVV9PUFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyNi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjc6XHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9wbXVfIyNmdW5jLCAodm9pZCAqKWt2bV9wbXVfb3BzLmZ1bmMgPyA6IFxcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTI4LVx0XHRcdFx0XHQgICAgICAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xuYXJjaC94ODYva3ZtL3BtdS5jOjEyOTojaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzAtI3VuZGVmIF9fS1ZNX1g4Nl9QTVVfT1Bcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMyLVxuYXJjaC94ODYva3ZtL3BtdS5jOjEzMzp2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzQte1xuYXJjaC94ODYva3ZtL3BtdS5jLTEzNS1cdGJvb2wgaXNfaW50ZWwgPSBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTDtcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzY6XHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVx1MDAzZU1JTl9OUl9HUF9DT1VOVEVSUztcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzctXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE0NC1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0hZQlJJRF9DUFUpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ1Olx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ2Olx0XHRtZW1zZXQoXHUwMDI2a3ZtX2hvc3RfcG11LCAwLCBzaXplb2Yoa3ZtX2hvc3RfcG11KSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ3LVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9wbXUuYzoxNDg6XHRcdHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShcdTAwMjZrdm1faG9zdF9wbXUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE0OS1cdH1cbmFyY2gveDg2L2t2bS9wbXUuYy0xNTAtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTUxOlx0aWYgKGVuYWJsZV9wbXUpIHtcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTItXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE1Ny1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU4Olx0XHRpZiAoIWt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZ3AgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNTk6XHRcdCAgICBXQVJOX09OX09OQ0Uoa3ZtX2hvc3RfcG11Lm51bV9jb3VudGVyc19ncCBcdTAwM2MgbWluX25yX2dwX2N0cnMpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2MDpcdFx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYxOlx0XHRlbHNlIGlmIChpc19pbnRlbCBcdTAwMjZcdTAwMjYgIWt2bV9ob3N0X3BtdS52ZXJzaW9uKVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2MjpcdFx0XHRlbmFibGVfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYzLVx0fVxuYXJjaC94ODYva3ZtL3BtdS5jLTE2NC1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNjU6XHRpZiAoIWVuYWJsZV9wbXUgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHwgIWt2bV9ob3N0X3BtdS5tZWRpYXRlZCB8fFxuYXJjaC94ODYva3ZtL3BtdS5jOjE2NjpcdCAgICAhcG11X29wcy1cdTAwM2Vpc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkKFx1MDAyNmt2bV9ob3N0X3BtdSkpXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY3Olx0XHRlbmFibGVfbWVkaWF0ZWRfcG11ID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjE2OTpcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzA6XHRcdHBtdV9vcHMtXHUwMDNld3JpdGVfZ2xvYmFsX2N0cmwgPSBOVUxMO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE3MS1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNzI6XHRpZiAoIWVuYWJsZV9wbXUpIHtcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzM6XHRcdG1lbXNldChcdTAwMjZrdm1fcG11X2NhcCwgMCwgc2l6ZW9mKGt2bV9wbXVfY2FwKSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTc0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE3Ni1cbmFyY2gveDg2L2t2bS9wbXUuYzoxNzc6XHRtZW1jcHkoXHUwMDI2a3ZtX3BtdV9jYXAsIFx1MDAyNmt2bV9ob3N0X3BtdSwgc2l6ZW9mKGt2bV9ob3N0X3BtdSkpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjE3ODpcdGt2bV9wbXVfY2FwLnZlcnNpb24gPSBtaW4oa3ZtX3BtdV9jYXAudmVyc2lvbiwgMik7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc5Olx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncCxcbmFyY2gveDg2L2t2bS9wbXUuYzoxODA6XHRcdFx0XHRcdCAgcG11X29wcy1cdTAwM2VNQVhfTlJfR1BfQ09VTlRFUlMpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjE4MTpcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IG1pbihrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQsXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTgyLVx0XHRcdFx0XHQgICAgIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTE4My1cbmFyY2gveDg2L2t2bS9wbXUuYzoxODQ6XHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cbmFyY2gveDg2L2t2bS9wbXUuYy0xODUtXHRcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyk7XG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg2Olx0a3ZtX3BtdV9ldmVudHNlbC5CUkFOQ0hfSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxuYXJjaC94ODYva3ZtL3BtdS5jLTE4Ny1cdFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTE5MD12b2lkIGt2bV9oYW5kbGVfZ3Vlc3RfbWVkaWF0ZWRfcG1pKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE5My1cbmFyY2gveDg2L2t2bS9wbXUuYzoxOTQ6XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1IHx8ICFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKSlcbmFyY2gveDg2L2t2bS9wbXUuYy0xOTUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBrdm1fcG1jICpwbWMsIGJvb2wgaW5fcG1pKVxuYXJjaC94ODYva3ZtL3BtdS5jLTIwMS17XG5hcmNoL3g4Ni9rdm0vcG11LmM6MjAyOlx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0yMDMtXHRib29sIHNraXBfcG1pID0gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTIxNi1cdFx0XHRza2lwX3BtaSA9IF9fdGVzdF9hbmRfc2V0X2JpdChHTE9CQUxfU1RBVFVTX0JVRkZFUl9PVkZfQklULFxuYXJjaC94ODYva3ZtL3BtdS5jOjIxNzpcdFx0XHRcdFx0XHQgICAgICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzKTtcbmFyY2gveDg2L2t2bS9wbXUuYy0yMTgtXHRcdH1cbmFyY2gveDg2L2t2bS9wbXUuYy0yMTktXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3BtdS5jOjIyMDpcdFx0X19zZXRfYml0KHBtYy1cdTAwM2VpZHgsICh1bnNpZ25lZCBsb25nICopXHUwMDI2cG11LVx1MDAzZWdsb2JhbF9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTIyMS1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjI3PXN0YXRpYyB2b2lkIGt2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0yMzctXHQgKi9cbmFyY2gveDg2L2t2bS9wbXUuYzoyMzg6XHRpZiAodGVzdF9hbmRfc2V0X2JpdChwbWMtXHUwMDNlaWR4LCBwbWNfdG9fcG11KHBtYyktXHUwMDNlcmVwcm9ncmFtX3BtaSkpXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjM5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTI3Nz1zdGF0aWMgaW50IHBtY19yZXByb2dyYW1fY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jLCB1MzIgdHlwZSwgdTY0IGNvbmZpZyxcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjgwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzoyODE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTI4Mi1cdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjkyLVx0fTtcbmFyY2gveDg2L2t2bS9wbXUuYzoyOTM6XHRib29sIHBlYnMgPSB0ZXN0X2JpdChwbWMtXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBtdS1cdTAwM2VwZWJzX2VuYWJsZSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMjk0LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMTgtXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuYXJjaC94ODYva3ZtL3BtdS5jOjMxOTpcdFx0cHJfZGVidWdfcmF0ZWxpbWl0ZWQoXCYjMzQ7a3ZtX3BtdTogZXZlbnQgY3JlYXRpb24gZmFpbGVkICVsZCBmb3IgcG1jLVx1MDAzZWlkeCA9ICVkXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3BtdS5jLTMyMC1cdFx0XHQgICAgUFRSX0VSUihldmVudCksIHBtYy1cdTAwM2VpZHgpO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0zMjQtXHRwbWMtXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xuYXJjaC94ODYva3ZtL3BtdS5jOjMyNTpcdHBtY190b19wbXUocG1jKS1cdTAwM2VldmVudF9jb3VudCYjNDM7JiM0Mzs7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMzI2LVx0cG1jLVx1MDAzZWlzX3BhdXNlZCA9IGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz0zNTc9c3RhdGljIGJvb2wgcG1jX3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTM2Ny1cbmFyY2gveDg2L2t2bS9wbXUuYzozNjg6XHRpZiAodGVzdF9iaXQocG1jLVx1MDAzZWlkeCwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwbWNfdG9fcG11KHBtYyktXHUwMDNlcGVic19lbmFibGUpICE9XG5hcmNoL3g4Ni9rdm0vcG11LmMtMzY5LVx0ICAgICghIXBtYy1cdTAwM2VwZXJmX2V2ZW50LVx1MDAzZWF0dHIucHJlY2lzZV9pcCkpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTM3OT1zdGF0aWMgdm9pZCBwbWNfcmVsZWFzZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTM4NC1cdFx0cG1jLVx1MDAzZWN1cnJlbnRfY29uZmlnID0gMDtcbmFyY2gveDg2L2t2bS9wbXUuYzozODU6XHRcdHBtY190b19wbXUocG1jKS1cdTAwM2VldmVudF9jb3VudC0tO1xuYXJjaC94ODYva3ZtL3BtdS5jLTM4Ni1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9NDA3PXZvaWQgcG1jX3dyaXRlX2NvdW50ZXIoc3RydWN0IGt2bV9wbWMgKnBtYywgdTY0IHZhbClcbmFyY2gveDg2L2t2bS9wbXUuYy00MDgte1xuYXJjaC94ODYva3ZtL3BtdS5jOjQwOTpcdGlmIChrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHBtYy1cdTAwM2V2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3BtdS5jLTQxMC1cdFx0cG1jLVx1MDAzZWNvdW50ZXIgPSB2YWwgXHUwMDI2IHBtY19iaXRtYXNrKHBtYyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTQ3Nj1zdGF0aWMgYm9vbCBmaWx0ZXJfY29udGFpbnNfbWF0Y2godTY0ICpldmVudHMsIHU2NCBuZXZlbnRzLCB1NjQgZXZlbnRzZWwpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDc3LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo0Nzg6XHR1NjQgZXZlbnRfc2VsZWN0ID0gZXZlbnRzZWwgXHUwMDI2IGt2bV9wbXVfb3BzLkVWRU5UU0VMX0VWRU5UO1xuYXJjaC94ODYva3ZtL3BtdS5jLTQ3OS1cdHU2NCB1bWFzayA9IGV2ZW50c2VsIFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVU1BU0s7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTUwOC1cbmFyY2gveDg2L2t2bS9wbXUuYzo1MDk6c3RhdGljIGJvb2wgaXNfZ3BfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZXZlbnRfZmlsdGVyICpmLFxuYXJjaC94ODYva3ZtL3BtdS5jLTUxMC1cdFx0XHRcdHU2NCBldmVudHNlbClcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTE4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjUxOTpzdGF0aWMgYm9vbCBpc19maXhlZF9ldmVudF9hbGxvd2VkKHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmZpbHRlcixcbmFyY2gveDg2L2t2bS9wbXUuYy01MjAtXHRcdFx0XHQgICBpbnQgaWR4KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz01MzQ9c3RhdGljIGJvb2wgcG1jX2lzX2V2ZW50X2FsbG93ZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcbmFyY2gveDg2L2t2bS9wbXUuYy01MzUte1xuYXJjaC94ODYva3ZtL3BtdS5jOjUzNjpcdHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmZpbHRlcjtcbmFyY2gveDg2L2t2bS9wbXUuYy01MzctXHRzdHJ1Y3Qga3ZtICprdm0gPSBwbWMtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTM4LVxuYXJjaC94ODYva3ZtL3BtdS5jOjUzOTpcdGZpbHRlciA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLVx1MDAzZWFyY2gucG11X2V2ZW50X2ZpbHRlciwgXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU0MC1cdGlmICghZmlsdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy01NDgtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTQ5OnN0YXRpYyB2b2lkIGt2bV9tZWRpYXRlZF9wbXVfcmVmcmVzaF9ldmVudF9maWx0ZXIoc3RydWN0IGt2bV9wbWMgKnBtYylcbmFyY2gveDg2L2t2bS9wbXUuYy01NTAte1xuYXJjaC94ODYva3ZtL3BtdS5jLTU1MS1cdGJvb2wgYWxsb3dlZCA9IHBtY19pc19sb2NhbGx5X2VuYWJsZWQocG1jKSBcdTAwMjZcdTAwMjYgcG1jX2lzX2V2ZW50X2FsbG93ZWQocG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYzo1NTI6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU1My1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYxLVxuYXJjaC94ODYva3ZtL3BtdS5jOjU2MjpcdFx0cG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsX2h3IFx1MDAyNj0gfm1hc2s7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYzLVx0XHRpZiAoYWxsb3dlZClcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjQ6XHRcdFx0cG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsX2h3IHw9IHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybCBcdTAwMjYgbWFzaztcbmFyY2gveDg2L2t2bS9wbXUuYy01NjUtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTU2OD1zdGF0aWMgaW50IHJlcHJvZ3JhbV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTY5LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzA6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTU3MS1cdHU2NCBldmVudHNlbCA9IHBtYy1cdTAwM2VldmVudHNlbDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjU3NjpcdGlmIChrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHBtdV90b192Y3B1KHBtdSkpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6NTc3Olx0XHRrdm1fbWVkaWF0ZWRfcG11X3JlZnJlc2hfZXZlbnRfZmlsdGVyKHBtYyk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc4LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTkwLVx0aWYgKGV2ZW50c2VsIFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfUElOX0NPTlRST0wpXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTkxOlx0XHRwcmludGtfb25jZShcJiMzNDtrdm0gcG11OiBwaW4gY29udHJvbCBiaXQgaXMgaWdub3JlZFxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNTkyLVxuYXJjaC94ODYva3ZtL3BtdS5jLTU5My1cdGlmIChwbWNfaXNfZml4ZWQocG1jKSkge1xuYXJjaC94ODYva3ZtL3BtdS5jOjU5NDpcdFx0Zml4ZWRfY3RyX2N0cmwgPSBmaXhlZF9jdHJsX2ZpZWxkKHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybCxcbmFyY2gveDg2L2t2bS9wbXUuYy01OTUtXHRcdFx0XHRcdFx0ICBwbWMtXHUwMDNlaWR4IC0gS1ZNX0ZJWEVEX1BNQ19CQVNFX0lEWCk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTYxMi1cdHJldHVybiBwbWNfcmVwcm9ncmFtX2NvdW50ZXIocG1jLCBQRVJGX1RZUEVfUkFXLFxuYXJjaC94ODYva3ZtL3BtdS5jOjYxMzpcdFx0XHRcdCAgICAgKGV2ZW50c2VsIFx1MDAyNiBwbXUtXHUwMDNlcmF3X2V2ZW50X21hc2spLFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxNC1cdFx0XHRcdCAgICAgIShldmVudHNlbCBcdTAwMjYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUiksXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTYxOT1zdGF0aWMgYm9vbCBwbWNfaXNfZXZlbnRfbWF0Y2goc3RydWN0IGt2bV9wbWMgKnBtYywgdTY0IGV2ZW50c2VsKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02MzctXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjM4OnZvaWQga3ZtX3BtdV9yZWNhbGNfcG1jX2VtdWxhdGlvbihzdHJ1Y3Qga3ZtX3BtdSAqcG11LCBzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuYXJjaC94ODYva3ZtL3BtdS5jLTYzOS17XG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQwOlx0Yml0bWFwX2NsZWFyKHBtdS1cdTAwM2VwbWNfY291bnRpbmdfaW5zdHJ1Y3Rpb25zLCBwbWMtXHUwMDNlaWR4LCAxKTtcbmFyY2gveDg2L2t2bS9wbXUuYzo2NDE6XHRiaXRtYXBfY2xlYXIocG11LVx1MDAzZXBtY19jb3VudGluZ19icmFuY2hlcywgcG1jLVx1MDAzZWlkeCwgMSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjQyLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02NTEtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjUyOlx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1MzpcdFx0Yml0bWFwX3NldChwbXUtXHUwMDNlcG1jX2NvdW50aW5nX2luc3RydWN0aW9ucywgcG1jLVx1MDAzZWlkeCwgMSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU0LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1NTpcdGlmIChwbWNfaXNfZXZlbnRfbWF0Y2gocG1jLCBrdm1fcG11X2V2ZW50c2VsLkJSQU5DSF9JTlNUUlVDVElPTlNfUkVUSVJFRCkpXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2Olx0XHRiaXRtYXBfc2V0KHBtdS1cdTAwM2VwbWNfY291bnRpbmdfYnJhbmNoZXMsIHBtYy1cdTAwM2VpZHgsIDEpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTY1Ny19XG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NTktXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjYwOnZvaWQga3ZtX3BtdV9oYW5kbGVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3BtdS5jLTY2MS17XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjYyLVx0REVDTEFSRV9CSVRNQVAoYml0bWFwLCBYODZfUE1DX0lEWF9NQVgpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjY2MzpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NjQtXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02NjYtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjY3Olx0Yml0bWFwX2NvcHkoYml0bWFwLCBwbXUtXHUwMDNlcmVwcm9ncmFtX3BtaSwgWDg2X1BNQ19JRFhfTUFYKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02NjgtXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTY3NC1cdEJVSUxEX0JVR19PTihzaXplb2YoYml0bWFwKSAhPSBzaXplb2YoYXRvbWljNjRfdCkpO1xuYXJjaC94ODYva3ZtL3BtdS5jOjY3NTpcdGF0b21pYzY0X2FuZG5vdCgqKHM2NCAqKWJpdG1hcCwgXHUwMDI2cG11LVx1MDAzZV9fcmVwcm9ncmFtX3BtaSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc2LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY3NzpcdGt2bV9mb3JfZWFjaF9wbWMocG11LCBwbWMsIGJpdCwgYml0bWFwKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc4LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy02ODQtXHRcdGlmIChyZXByb2dyYW1fY291bnRlcihwbWMpKVxuYXJjaC94ODYva3ZtL3BtdS5jOjY4NTpcdFx0XHRzZXRfYml0KHBtYy1cdTAwM2VpZHgsIHBtdS1cdTAwM2VyZXByb2dyYW1fcG1pKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02ODYtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTY5Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjY5MzpcdGlmICh1bmxpa2VseShwbXUtXHUwMDNlbmVlZF9jbGVhbnVwKSlcbmFyY2gveDg2L2t2bS9wbXUuYzo2OTQ6XHRcdGt2bV9wbXVfY2xlYW51cCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy02OTUtXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk2Olx0a3ZtX2Zvcl9lYWNoX3BtYyhwbXUsIHBtYywgYml0LCBiaXRtYXApXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk3Olx0XHRrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKHBtdSwgcG1jKTtcbmFyY2gveDg2L2t2bS9wbXUuYy02OTgtfVxuYXJjaC94ODYva3ZtL3BtdS5jOjY5OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9oYW5kbGVfZXZlbnQpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTcwMC1cbmFyY2gveDg2L2t2bS9wbXUuYzo3MDE6aW50IGt2bV9wbXVfY2hlY2tfcmRwbWNfZWFybHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KVxuYXJjaC94ODYva3ZtL3BtdS5jLTcwMi17XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTcxMC1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjcxMTpcdGlmICgha3ZtX3BtdV9vcHMuY2hlY2tfcmRwbWNfZWFybHkpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEyLVx0XHRyZXR1cm4gMDtcbmFyY2gveDg2L2t2bS9wbXUuYy03MTMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzE0Olx0cmV0dXJuIGt2bV9wbXVfY2FsbChjaGVja19yZHBtY19lYXJseSkodmNwdSwgaWR4KTtcbmFyY2gveDg2L2t2bS9wbXUuYy03MTUtfVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz03MTc9Ym9vbCBpc192bXdhcmVfYmFja2Rvb3JfcG1jKHUzMiBwbWNfaWR4KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03MjctXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzI4OnN0YXRpYyBpbnQga3ZtX3BtdV9yZHBtY192bXdhcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpZHgsIHU2NCAqZGF0YSlcbmFyY2gveDg2L2t2bS9wbXUuYy03Mjkte1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03NTAtXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzUxOmludCBrdm1fcG11X3JkcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaWR4LCB1NjQgKmRhdGEpXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzUyLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo3NTM6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU0LVx0c3RydWN0IGt2bV9wbWMgKnBtYztcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU2LVxuYXJjaC94ODYva3ZtL3BtdS5jOjc1NzpcdGlmICghcG11LVx1MDAzZXZlcnNpb24pXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzU4LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYwLVx0aWYgKGlzX3Ztd2FyZV9iYWNrZG9vcl9wbWMoaWR4KSlcbmFyY2gveDg2L2t2bS9wbXUuYzo3NjE6XHRcdHJldHVybiBrdm1fcG11X3JkcG1jX3Ztd2FyZSh2Y3B1LCBpZHgsIGRhdGEpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTc2Mi1cbmFyY2gveDg2L2t2bS9wbXUuYzo3NjM6XHRwbWMgPSBrdm1fcG11X2NhbGwocmRwbWNfZWN4X3RvX3BtYykodmNwdSwgaWR4LCBcdTAwMjZtYXNrKTtcbmFyY2gveDg2L2t2bS9wbXUuYy03NjQtXHRpZiAoIXBtYylcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzc2PXN0YXRpYyBib29sIGt2bV9uZWVkX2FueV9wbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9wbXUuYy03Nzcte1xuYXJjaC94ODYva3ZtL3BtdS5jOjc3ODpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYy03NzktXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzgwOlx0aWYgKCFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKVxuYXJjaC94ODYva3ZtL3BtdS5jLTc4MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTc4Ny1cdCAqL1xuYXJjaC94ODYva3ZtL3BtdS5jOjc4ODpcdHJldHVybiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycyAhPSBrdm1faG9zdF9wbXUubnVtX2NvdW50ZXJzX2dwIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzg5Olx0ICAgICAgIHBtdS1cdTAwM2Vucl9hcmNoX2ZpeGVkX2NvdW50ZXJzICE9IGt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNzkwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzkyPWJvb2wga3ZtX25lZWRfcGVyZl9nbG9iYWxfY3RybF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy03OTQtXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzo3OTU6XHQgICAgICAgIWt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTc5Ni19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTc5OT1ib29sIGt2bV9uZWVkX3JkcG1jX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MDE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODAyLVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MTAtXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcbmFyY2gveDg2L2t2bS9wbXUuYzo4MTE6XHQgICAgICAgcG11LVx1MDAzZWNvdW50ZXJfYml0bWFza1tLVk1fUE1DX0dQXSAhPSAoQklUX1VMTChrdm1faG9zdF9wbXUuYml0X3dpZHRoX2dwKSAtIDEpIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODEyOlx0ICAgICAgIHBtdS1cdTAwM2Vjb3VudGVyX2JpdG1hc2tbS1ZNX1BNQ19GSVhFRF0gIT0gKEJJVF9VTEwoa3ZtX2hvc3RfcG11LmJpdF93aWR0aF9maXhlZCkgLSAxKTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTMtfVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxND1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX25lZWRfcmRwbWNfaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTUtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODE2OnZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODE3LXtcbmFyY2gveDg2L2t2bS9wbXUuYy04MTgtXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODE5Olx0XHRrdm1fcG11X2NhbGwoZGVsaXZlcl9wbWkpKHZjcHUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgyMC1cdFx0a3ZtX2FwaWNfbG9jYWxfZGVsaXZlcih2Y3B1LVx1MDAzZWFyY2guYXBpYywgQVBJQ19MVlRQQyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cbmFyY2gveDg2L2t2bS9wbXUuYzo4MjQ6Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG5hcmNoL3g4Ni9rdm0vcG11LmMtODI1LXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MjY6XHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI3Olx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODI4LX1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjktXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODMwOnN0YXRpYyB2b2lkIGt2bV9wbXVfbWFya19wbWNfaW5fdXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbmFyY2gveDg2L2t2bS9wbXUuYy04MzEte1xuYXJjaC94ODYva3ZtL3BtdS5jOjgzMjpcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuYzo4MzM6XHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jID0ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTgzNC1cbmFyY2gveDg2L2t2bS9wbXUuYy04MzUtXHRpZiAocG1jKVxuYXJjaC94ODYva3ZtL3BtdS5jOjgzNjpcdFx0X19zZXRfYml0KHBtYy1cdTAwM2VpZHgsIHBtdS1cdTAwM2VwbWNfaW5fdXNlKTtcbmFyY2gveDg2L2t2bS9wbXUuYy04MzctfVxuYXJjaC94ODYva3ZtL3BtdS5jLTgzOC1cbmFyY2gveDg2L2t2bS9wbXUuYzo4Mzk6aW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQwLXtcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDE6XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtODQyLVx0dTMyIG1zciA9IG1zcl9pbmZvLVx1MDAzZWluZGV4O1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04NDYtXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDc6XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1cztcbmFyY2gveDg2L2t2bS9wbXUuYy04NDgtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04NTAtXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XG5hcmNoL3g4Ni9rdm0vcG11LmM6ODUxOlx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZWdsb2JhbF9jdHJsO1xuYXJjaC94ODYva3ZtL3BtdS5jLTg1Mi1cdFx0YnJlYWs7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNzcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1TUiBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBNU1IgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGUgY3VycmVudCB2ZW5kb3ItYWdub3N0aWMgZnVuY3Rpb24sIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIGlzIHRoZSB0YXJnZXQgZm9yIG1vdmluZyB0aGUgdmFsaWRhdGlvbiBvZiB0aGVzZSBwYXJ0aWN1bGFyIE1TUnMuIEluc3RlYWQsIHRoaXMgcGF0Y2ggcHJvcG9zZXMgdG8gc2hpZnQgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmNoaXRlY3R1cmFsIHNlcGFyYXRpb24uIEdpdmVuIHRoZSBoaXN0b3J5LCBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBjb21wb25lbnRzLCB3aGF0IGlzIHRoZSBpbXBhY3Q/IFRoZSBjaGFuZ2UgY2xlYXJseSBhaW1zIGZvciBhIG1vcmUgZ3JhbnVsYXIsIHZlbmRvci1zcGVjaWZpYyBhcHByb2FjaCB0byB2YWxpZGF0aW9uLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBudWFuY2VkIGJlaGF2aW9yIG9yIHJlcXVpcmVtZW50cyB3aXRoaW4gSW50ZWwmIzM5O3MgUE1VIGltcGxlbWVudGF0aW9uIHRoYXQgaXNuJiMzOTt0IGVhc2lseSByZXByZXNlbnRlZCBpbiBhIGdlbmVyaWMgbWFubmVyLgoKTm93IEkgbmVlZCB0byBzZWUgaG93IEFNRCBoYW5kbGVzIHRoZXNlIE1TUnMgKG9yIGlmIHRoZXkgYXJlIGV2ZW4gcmVsZXZhbnQgdG8gdGhlaXIgUE1VKS4gSSYjMzk7bGwganVtcCBvdmVyIHRvIGBwbXVfYW1kLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXBwcm9hY2ggdGhpcyB2YWxpZGF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IGNvbnRleHR1YWxpemUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHNoaWZ0IGluIHJlc3BvbnNpYmlsaXRpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBsb29raW5nIGF0IGJvdGggc2lkZXMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdHJldHVybiBwbWM7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDEwNTpcdHtcbiAxMDY6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTA5Olx0XHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxuIDExMDpcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDA7XG4gMTExOlx0XHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxuIDExMjpcdFx0XHRyZXR1cm4gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKTtcbiAxMTM6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDExNDpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4gMTE1Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19DTFI6XG4gMTE2Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19TRVQ6XG4gMTE3Olx0XHRcdHJldHVybiBwbXUtXHUwMDNldmVyc2lvbiBcdTAwM2UgMTtcbiAxMTg6XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdGlmIChtc3IgXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcdTAwMjZcdTAwMjZcbiAxMjA6XHRcdFx0ICAgIG1zciBcdTAwM2MgTVNSX0YxNUhfUEVSRl9DVEwwICYjNDM7IDIgKiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycylcbiAxMjE6XHRcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDE7XG4gMTIyOlx0XHRcdGJyZWFrO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gMTI5Olx0e1xuIDEzMDpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDEzMTpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYztcbiAxMzI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qIE1TUl9QRVJGQ1RSbiAqL1xuIDEzNTpcdFx0cG1jID0gZ2V0X2dwX3BtY19hbWQocG11LCBtc3IsIFBNVV9UWVBFX0NPVU5URVIpO1xuIDEzNjpcdFx0aWYgKHBtYykge1xuIDEzNzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xuIDEzODpcdFx0XHRyZXR1cm4gMDtcbiAxMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBLVk0mIzM5O3MgTVNSIFZhbGlkYXRpb246IEEgUHJvbWlzaW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiBLVk0mIzM5O3MgTVNSIGhhbmRsaW5nIHRoYXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGdvb2QgZnV6emluZyB0YXJnZXQuIFRoZSBwYXRoIHN0YXJ0cyB3aXRoIGBpbnRlbF9pc192YWxpZF9tc3JgIGFuZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLCBhbmQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiBhIGd1ZXN0IG9yIHVzZXJzcGFjZSBpcyBtZXNzaW5nIHdpdGggdGhvc2UgY3J1Y2lhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGVzZSBNU1JzIGFyZSBhY2Nlc3NlZCB2aWEgYHJkbXNyYCAvIGB3cm1zcmAgaW5zdHJ1Y3Rpb25zIG9yIHRocm91Z2ggYC9kZXYva3ZtYCB1c2luZyBgS1ZNX1NFVF9NU1JTYCAvIGBLVk1fR0VUX01TUlNgLCB3aGljaCwgaW4gdHVybiwgZ29lcyB0aHJvdWdoIGBrdm1fZ2V0X21zcl9jb21tb25gIC8gYGt2bV9zZXRfbXNyX2NvbW1vbmAgYW5kIGZpbmFsbHkgY2FsbHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgLgoKUHJldmlvdXNseSwgSSB0aGluaywgb24gQU1EIHN5c3RlbXMgKFNWTSksIGBrdm1fcG11X2lzX3ZhbGlkX21zcigpYCBjaGVja2VkIHNwZWNpZmljYWxseSBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybCgpYCBmdW5jdGlvbiwgbGlrZWx5IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgaWYgYW4gSW50ZWwgTVNSIHdhcyBhY2Nlc3NlZC4gTm93LCB0aGF0IGxvZ2ljIGhhcyBiZWVuIGdlbmVyYWxpemVkIHZpYSBga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcilgLiBPbiBBTUQsIGBhbWRfaXNfdmFsaWRfbXNyYCB3b3VsZCByZWplY3QgdGhvc2UgSW50ZWwgTVNScywgd2hpbGUgb24gSW50ZWwsIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYGludGVsX2lzX3ZhbGlkX21zcmAsIGlzIGdvaW5nIHRvIGNoZWNrIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSlgLgoKVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSB0aGlzIHRvdWNoIGlzIGxvY2F0ZWQgaW4gdGhlIGB2aXJ0L2t2bS9hcmNoL3g4NmAgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGtlcm5lbCBjb2RlIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogS1ZNJiMzOTtzIHg4NiBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggUUVNVSBhbmQgc3l6a2FsbGVyLCBzbyBjaGVjayEgQ29yZSBTdWJzeXN0ZW1zIG9yIEtWTTogWWVzLCB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gS1ZNLCBzbyBjaGVjayEgVGhhdCBtZWFucyBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTm93LCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkPyBXZSYjMzk7bGwgbmVlZCBgS1ZNYCBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBgS1ZNX0lOVEVMYC4gVGhlIGNvZGUsIGluIGBwbXVfaW50ZWwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcHRocyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBjb25maWcgS1ZNX0lOVEVMYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIHdlYiBvZiBkZXBlbmRlbmNpZXMgYXJvdW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGFsb25nc2lkZSBgS1ZNX0lOVEVMYCwgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSB3aWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzk0CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDY3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gUE1VIE1TUiBWYWxpZGF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCAob3IgYEtWTV9BTURgLCBvZiBjb3Vyc2UsIHRob3VnaCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2ggbGVhbnMgdG93YXJkcyBJbnRlbCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4KCkZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEZyb20gdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoZSBjaGFuZ2VzIGRpcmVjdGx5IGltcGFjdDogYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzIHRoYXQgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGU6IEkgbmVlZCB0byBjb25zaWRlciBga3ZtX3BtdV9nZXRfbXNyYCwgYGt2bV9wbXVfc2V0X21zcmAsIGBrdm1fc2V0X21zcl9jb21tb25gLCBhbmQgYGt2bV9nZXRfbXNyX2NvbW1vbmAuIFRoZXNlICpjb3VsZCogYmUgYWZmZWN0ZWQsIHRob3VnaCBwZXJoYXBzIGluZGlyZWN0bHkuCgpga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCBgaW50ZWxfaXNfdmFsaWRfbXNyYCBhcmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uLiBMZXQgbWUgY2hlY2sgaWYgYGludGVsX2lzX3ZhbGlkX21zcmAgaXMgc3RhdGljIG9yIG5vdC4gTG9va2luZyBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zciguLi4pYC4gQWhhISBJdCYjMzk7cyAqc3RhdGljKiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGAuaXNfdmFsaWRfbXNyYCB3aXRoaW4gdGhlIGBpbnRlbF9wbXVfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWFrZXMgaXQgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCBvciBga3ZtLWludGVsLmtvYCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiBmb3IgbGF0ZXIuICBga3ZtX3BtdV9pc192YWxpZF9tc3JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgYSBub24tc3RhdGljIHN5bWJvbCwgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3BtdS5jYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBiZWluZyBjYWxsZWQgb3IgcmVsYXRlZCB0byBvdGhlciBmdW5jdGlvbnMuIEkmIzM5O2xsIGNoZWNrIGNhbGxlcnMgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHBtdS5jYCBhbmQgYHBtdV9pbnRlbC5jYC4gIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBjYWxsZWQgdmlhIGEgYHN0YXRpY19jYWxsYCBvciBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIGNvZGUgc2hvd3MgaXQgaXMgY2FsbGVkIGJ5IGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpYCBpbiBga3ZtX3BtdV9pc192YWxpZF9tc3JgLgoKU28sIGxldCYjMzk7cyB2ZXJpZnkgbXkga2V5IGZvY3VzLiAgTXkgcHJpbWFyeSBzeW1ib2xzIGFyZTogYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAuCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGdpdCBkaWZmIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBBaCwgbG9va3MgbGlrZSB0aGUgcGF0Y2ggKm9ubHkqIHRvdWNoZXM6IDEuIGBhcmNoL3g4Ni9rdm0vcG11LmNgOiAgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgMi4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgOiBgaW50ZWxfaXNfdmFsaWRfbXNyYC4KClRoZXNlIGFyZSBib3RoIG5vbi11YmlxdWl0b3VzIHN5bWJvbHMsIHNwZWNpZmljIHRvIEtWTSBQTVUgTVNSIGhhbmRsaW5nLCB3aGljaCBtYWtlcyB0aGVtIHZlcnkgaW50ZXJlc3RpbmcuCgpPa2F5LCBxdWljayBmaW5hbCBjaGVjazoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyB2ZXJ5IG11Y2ggd29ydGggZnVydGhlciBpbnNwZWN0aW9uLgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtLVk0mIzM0OywgJiMzNDtLVk1fSU5URUwmIzM0O11gIC0gQ29ycmVjdCwgdGhlc2UgYXJlIHRoZSByZWxldmFudCBjb25maWdzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDtdYCAtIEFic29sdXRlbHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IHJlZmFjdG9yaW5nIFBNVSBNU1IgdmFsaWRhdGlvbiBmcm9tIHRoZSBjb21tb24geDg2IEtWTSBQTVUgY29kZSB0byBJbnRlbC1zcGVjaWZpYyBQTVUgY29kZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX2lzX3ZhbGlkX21zciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaXNfdmFsaWRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX2lzX3ZhbGlkX21zciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA4NjA1NjlmZWY3NDUzN2U0YmRmNDhhMmVkYzVlMTY4NmI3Njk3ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE2OjM4OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jCmluZGV4IGE3ZDYwYzg3ODVjZDQuLmQyZmQ0N2VlNWVjODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcG11LmMKQEAgLTgyMywxNCAmIzQzOzgyMyw2IEBAIHZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKQogewotCXN3aXRjaCAobXNyKSB7Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6Ci0JY2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOgotCWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6Ci0JCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAJcmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fAogCSAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMKaW5kZXggYmZhODYxMmZiNDUwOC4uNzBhOGM0ODE2MTM1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCkBAIC0xODcsNiAmIzQzOzE4Nyw5IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiAJaW50IHJldDsKIAogCXN3aXRjaCAobXNyKSB7CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOgomIzQzOwljYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6CiYjNDM7CWNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6CiAJY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOgogCQlyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpOwogCWNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk0CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTVNSIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc2hpZnRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciB2YWxpZGF0aW5nIHNvbWUgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKSDigJMgc3BlY2lmaWNhbGx5LCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYCDigJMgZnJvbSB0aGUgZ2VuZXJpYyBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0vcG11LmNgLCB0byBhIG1vcmUgSW50ZWwtc3BlY2lmaWMgZnVuY3Rpb24sIGBpbnRlbF9pc192YWxpZF9tc3JgLCBsb2NhdGVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYC4gU28sIGl0JiMzOTtzIGEgY29kZSByZW9yZ2FuaXphdGlvbiwgbGlrZWx5IHRvIGNvbnNvbGlkYXRlIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgbG9naWMuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCBpcyBoYXBwZW5pbmcuIElzIGl0IGZvciBwZXJmb3JtYW5jZT8gSXMgaXQgdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgSW50ZWwtc3BlY2lmaWMgY2hlY2tzPyBBcmUgdGhlcmUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBpbiB0aGUgVk1YIGltcGxlbWVudGF0aW9uIHRoYXQgbmVjZXNzaXRhdGUgdGhpcz8gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBkaWZmIG9yIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXNlIE1TUnMgYXJlIGJlaW5nIHVzZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLCBhbmQgd2hhdCBkcm92ZSB0aGUgZGV2ZWxvcGVycyB0byBtYWtlIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGp1c3QgYSByZWZhY3RvcmluZyBmb3IgY2xhcml0eSwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHJlYXNvbiBiZWhpbmQgdGhpcyBtb3ZlPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3BtdV9pc192YWxpZF9tc3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xNDQyPWludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cdGNhc2UgTVNSX1A2X0VWTlRTRUwwIC4uLiBNU1JfUDZfRVZOVFNFTDE6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMTgzOS1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE4NDA6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xODQxLVx0XHRcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM3Olx0XHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXHUwMDNlaW5kZXgpKVxuYXJjaC94ODYva3ZtL21zcnMuYy0xOTM4LVx0XHRcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5Mi1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XHRcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3JfaW5mby1cdTAwM2VpbmRleCkpXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTQtXHRcdFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3BtdS5jLTgyNS17XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTI3Nj1pbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpO1xuYXJjaC94ODYva3ZtL3BtdS5oOjI3Nzpib29sIGt2bV9wbXVfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcik7XG5hcmNoL3g4Ni9rdm0vcG11LmgtMjc4LWludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfaXNfdmFsaWRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9MTY1PXN0YXRpYyBib29sIGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluZGV4KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTgyLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzoxODM6c3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTg0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTgzNz1zdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODM5LVx0Lm1zcl9pZHhfdG9fcG1jID0gaW50ZWxfbXNyX2lkeF90b19wbWMsXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjg0MDpcdC5pc192YWxpZF9tc3IgPSBpbnRlbF9pc192YWxpZF9tc3IsXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg0MS1cdC5nZXRfbXNyID0gaW50ZWxfcG11X2dldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipDaGVja2luZyBBTUQmIzM5O3MgUE1VIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIGFuZCB0aGUgY3VycmVudCBjb2RlIGJhc2Ugc2VlbXMgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRyaWNhY2llcyBvZiBpdC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4NiBhcmNoaXRlY3R1cmUsIEkgc2hvdWxkIGFsc28gZ2xhbmNlIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jYC4gVGhpcyBpcyB3aGVyZSBBTUQmIzM5O3MgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB1c3VhbGx5IGhhbmRsZXMgaXRzIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBTUQmIzM5O3MgcHJvY2Vzc29ycyBkZWFsIHdpdGggdGhpcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgQU1EIGhhcyBhbnkgZGlzdGluY3QgbG9naWMgb3IgaGFuZGxpbmcgZm9yIHRoZSBQTVUgdGhhdCBkaXZlcmdlcyBmcm9tIHRoZSBtb3JlIGdlbmVyYWwgeDg2IGltcGxlbWVudGF0aW9uLiBBcmUgdGhlcmUgYW55IHVuaXF1ZSBob29rcywgcmVnaXN0ZXJzLCBvciBjb250cm9sIGZsb3dzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGNvbnN0cmFpbnRzIG9uIGhvdyBBTUQmIzM5O3MgUE1VIHdvcmtzIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgdGhlIGdlbmVyaWMgY29kZSBtYXkgbm90IGFjY291bnQgZm9yPyBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBBTUQtc3BlY2lmaWMgY29kZSwgbG9va2luZyBmb3IgZWl0aGVyIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgcGl0ZmFsbHMuIEdyYWJiaW5nIHRoaXMgY29kZSBhbmQgcXVpY2tseSBzY2FubmluZyB0aGUgZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfdmFsaWRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jPTkzPXN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqYW1kX21zcl9pZHhfdG9fcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTEwMy1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MTA0OnN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDUte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA3LVx0LmNoZWNrX3JkcG1jX2Vhcmx5ID0gYW1kX2NoZWNrX3JkcG1jX2Vhcmx5LFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMDg6XHQuaXNfdmFsaWRfbXNyID0gYW1kX2lzX3ZhbGlkX21zcixcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA5LVx0LmdldF9tc3IgPSBhbWRfcG11X2dldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEludGVsIFBNVSBNU1IgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGludGVsX2lzX3ZhbGlkX21zcmAgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBLVk0vVk1YIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTgwLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmUgb3IgY29uc3RhbnQgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgdGhlIHZhbGlkaXR5IG9mIGEgTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0LCBhbmQgYSBmZWVsIGZvciB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQuIEkgd2lsbCBsaWtlbHkgc3RhcnQgYnkgbG9va2luZyBhdCB3aGF0IGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE1TUiwgc3VjaCBhcyB0aGUgYXJjaGl0ZWN0dXJlIHR5cGUsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbG9vayB1cCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRyZXR1cm4gcmV0O1xuIDE4MTpcdH1cbiAxODI6XHRcbiAxODM6XHRzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDE4NDpcdHtcbiAxODU6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxODY6XHRcdHU2NCBwZXJmX2NhcGFiaWxpdGllcztcbiAxODc6XHRcdGludCByZXQ7XG4gMTg4Olx0XG4gMTg5Olx0XHRzd2l0Y2ggKG1zcikge1xuIDE5MDpcdFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XG4gMTkxOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XG4gMTkyOlx0XHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxuIDE5MzpcdFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxuIDE5NDpcdFx0XHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xuIDE5NTpcdFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiAxOTY6XHRcdFx0cmV0ID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xuIDE5NzpcdFx0XHRicmVhaztcbiAxOTg6XHRcdGNhc2UgTVNSX0lBMzJfRFNfQVJFQTpcbiAxOTk6XHRcdFx0cmV0ID0gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfRFMpO1xuIDIwMDpcdFx0XHRicmVhaztcbiAyMDE6XHRcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XG4gMjAyOlx0XHRcdHBlcmZfY2FwYWJpbGl0aWVzID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSk7XG4gMjAzOlx0XHRcdHJldCA9IChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXHUwMDI2XHUwMDI2XG4gMjA0Olx0XHRcdFx0KChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQpIFx1MDAzZSAzKTtcbiAyMDU6XHRcdFx0YnJlYWs7XG4gMjA2Olx0XHRkZWZhdWx0OlxuIDIwNzpcdFx0XHRyZXQgPSBnZXRfZ3BfcG1jKHBtdSwgbXNyLCBNU1JfSUEzMl9QRVJGQ1RSMCkgfHxcbiAyMDg6XHRcdFx0XHRnZXRfZ3BfcG1jKHBtdSwgbXNyLCBNU1JfUDZfRVZOVFNFTDApIHx8XG4gMjA5Olx0XHRcdFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcbiAyMTA6XHRcdFx0XHRpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcih2Y3B1LCBtc3IpO1xuIDIxMTpcdFx0XHRicmVhaztcbiAyMTI6XHRcdH1cbiAyMTM6XHRcbiAyMTQ6XHRcdHJldHVybiByZXQ7XG4gMjE1Olx0fVxuIDIxNjpcdFxuIDIxNzpcdHN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqaW50ZWxfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDIxODpcdHtcbiAyMTk6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIEFNRCBNU1IgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBNU1IgdmFsaWRhdGlvbiBpbiB0aGUgS1ZNL1NWTSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGRlbHZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vcG11LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYW1kX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb24uIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBjaGVjayB0aGUgbG9naWMsIGNvbnNpZGVyaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQU1ELXNwZWNpZmljIGJlaGF2aW9yLCBhbmQgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZnRlbiBpbnRlcmFjdHMgd2l0aCBNU1JzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGRldGVybWluZXMgd2hpY2ggTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIGFyZSBhY2NlcHRhYmxlIGZvciBndWVzdCBhY2Nlc3MsIHBhcnRpY3VsYXJseSBvbiBhbiBBTUQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzPyBBcmUgdGhlcmUgc3BlY2lmaWMgcmFuZ2VzIG9yIGJpdGZpZWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNjcnV0aW5pemVkPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBBTUQtc3BlY2lmaWMgZmVhdHVyZXMgb3IgZXJyYXRhIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdHJldHVybiBwbWM7XG4gMTAyOlx0fVxuIDEwMzpcdFxuIDEwNDpcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIDEwNTpcdHtcbiAxMDY6XHRcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiAxMDc6XHRcbiAxMDg6XHRcdHN3aXRjaCAobXNyKSB7XG4gMTA5Olx0XHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxuIDExMDpcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDA7XG4gMTExOlx0XHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxuIDExMjpcdFx0XHRyZXR1cm4gZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKTtcbiAxMTM6XHRcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxuIDExNDpcdFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9DVEw6XG4gMTE1Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19DTFI6XG4gMTE2Olx0XHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVU19TRVQ6XG4gMTE3Olx0XHRcdHJldHVybiBwbXUtXHUwMDNldmVyc2lvbiBcdTAwM2UgMTtcbiAxMTg6XHRcdGRlZmF1bHQ6XG4gMTE5Olx0XHRcdGlmIChtc3IgXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcdTAwMjZcdTAwMjZcbiAxMjA6XHRcdFx0ICAgIG1zciBcdTAwM2MgTVNSX0YxNUhfUEVSRl9DVEwwICYjNDM7IDIgKiBwbXUtXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycylcbiAxMjE6XHRcdFx0XHRyZXR1cm4gcG11LVx1MDAzZXZlcnNpb24gXHUwMDNlIDE7XG4gMTIyOlx0XHRcdGJyZWFrO1xuIDEyMzpcdFx0fVxuIDEyNDpcdFxuIDEyNTpcdFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gMTI5Olx0e1xuIDEzMDpcdFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDEzMTpcdFx0c3RydWN0IGt2bV9wbWMgKnBtYztcbiAxMzI6XHRcdHUzMiBtc3IgPSBtc3JfaW5mby1cdTAwM2VpbmRleDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qIE1TUl9QRVJGQ1RSbiAqL1xuIDEzNTpcdFx0cG1jID0gZ2V0X2dwX3BtY19hbWQocG11LCBtc3IsIFBNVV9UWVBFX0NPVU5URVIpO1xuIDEzNjpcdFx0aWYgKHBtYykge1xuIDEzNzpcdFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xuIDEzODpcdFx0XHRyZXR1cm4gMDtcbiAxMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQTVUgTVNSIFZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gTVNSIChNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcikgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEtWTSBQTVUgKFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgY29kZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gSW50ZWwgYW5kIEFNRCBwbGF0Zm9ybXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgcmVsb2NhdGluZyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIEludGVsLXNwZWNpZmljIENvcmUgUE1VIE1TUnMsIHNwZWNpZmljYWxseSBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gUHJldmlvdXNseSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBoYW5kbGVkIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IGNhbGxlZCBpbnRvIHZlbmRvci1zcGVjaWZpYyBjYWxsYmFja3MgdmlhIGBrdm1fcG11X2NhbGxgLCBhbmQgdGhlc2UgTVNScyBhcmUgKm9ubHkqIHZhbGlkIG9uIEludGVsLiBPbiBBTUQsIHRoZXNlIE1TUnMgYXJlIG1lYW5pbmdsZXNzOyB0aGV5IGhhdmUgdGhlaXIgb3duIHNldCAoYE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMXypgKS4gQnkgbW92aW5nIHRoZXNlIGNoZWNrcyBpbnRvIGBpbnRlbF9pc192YWxpZF9tc3JgLCB3ZSYjMzk7cmUgcHJldmVudGluZyBBTUQgZ3Vlc3RzIGZyb20gaW5jb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlc2UgSW50ZWwtc3BlY2lmaWMgTVNScyBhcyB2YWxpZCBhbmQgYXR0ZW1wdGluZyB0byB1c2UgdGhlbSwgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIGxldCBtZSBydW4gdGhyb3VnaCBteSBzdGFuZGFyZCBjaGVja2xpc3QgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlZ2FyZHMgdG8gS0FTQU4vS01TQU4uCgoqICAgKipLZXJuZWwgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIG1vZGlmeSBleGlzdGluZyBvbmVzIHRoYXQgbWlnaHQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCYjMzk7cyBnb29kLgoqICAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIFVzYWdlOioqIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGluIHRoZSBjb3JlIGxvZ2ljLiBUaGUgcGF0Y2ggb3BlcmF0ZXMgb24gdGhlIGBtc3JgIHdoaWNoIGlzIHBhc3NlZCBieSB2YWx1ZSAoYW5kIHRoZXJlZm9yZSBtdXN0IGJlIHZhbGlkKS4KKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbjoqKiBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCiogICAqKkJ1ZmZlciBPdmVyZmxvdy9NZW1vcnkgUmVhZHM6KiogSSBzZWUgbm8gaW52b2x2ZW1lbnQgd2l0aCBidWZmZXJzIG9yIGRpcmVjdCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlb3JnYW5pemluZyBNU1IgZGlzcGF0Y2guCgpHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IGluIGFzc2Vzc2luZyB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLgoKKiAgICoqS0FTQU46KiogVGhpcyBjaGFuZ2UgYWx0ZXJzIE1TUiB2YWxpZGF0aW9uIGxvZ2ljLCB3aGljaCBtYXkgYWZmZWN0IGhvdyBLQVNBTiBkZXRlY3RzL2RvZXMgbm90IGRldGVjdCBhbiBlcnJvciwgYnV0IGRvZXMgbm90IGludHJvZHVjZSBvbmUgaXRzZWxmLgoqICAgKipLTVNBTjoqKiBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2sgb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAgaGVyZS4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCwgdGFyZ2V0ZWQgZml4IHRoYXQgc2hvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIEtWTSBQTVUgb24gQU1EIHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuMzE2NzEzMjA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNDA4Mzg1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2lzX3ZhbGlkX21zclwiLFxuICAgIFwiaW50ZWxfaXNfdmFsaWRfbXNyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGFuZCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCkgZnJvbSB0aGUgZ2VuZXJpYyBrdm1fcG11X2lzX3ZhbGlkX21zcigpIGZ1bmN0aW9uIGludG8gaW50ZWxfaXNfdmFsaWRfbXNyKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcvY29ycmVjdG5lc3MgZml4IGZvciBNU1IgdmFsaWRhdGlvbiBhY3Jvc3MgQ1BVIHZlbmRvciBiYWNrZW5kcyAoSW50ZWwgdnMgQU1EKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBtYW5pcHVsYXRlIGRhdGEgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuMzE2NzE3ODk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc5OTEyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwODYwNTY5ZmVmNzQ1MzdlNGJkZjQ4YTJlZGM1ZTE2ODZiNzY5N2Q3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTY6Mzg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXFxuaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vcG11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcXG5AQCAtODIzLDE0ICs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIHtcXG4tXFx0c3dpdGNoIChtc3IpIHtcXG4tXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuLVxcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcXG4tXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcXG4tXFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbiBcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XFxuIFxcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuaW5kZXggYmZhODYxMmZiNDUwOC4uNzBhOGM0ODE2MTM1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbkBAIC0xODcsNiArMTg3LDkgQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN3aXRjaCAobXNyKSB7XFxuK1xcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxcbitcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuK1xcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XFxuIFxcdGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTDpcXG4gXFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gXFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuNzU1NDMwODE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTU5Nzc0NTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9wbXVfaXNfdmFsaWRfbXNyXCIsXG4gICAgXCJpbnRlbF9pc192YWxpZF9tc3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNU1IgdmFsaWRhdGlvbiBmb3IgSW50ZWwtc3BlY2lmaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBNU1JzIChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIGNvbW1vbiB4ODYgS1ZNIFBNVSBsb2dpYyAoa3ZtX3BtdV9pc192YWxpZF9tc3IpIHRvIEludGVsLXNwZWNpZmljIFBNVSBsb2dpYyAoaW50ZWxfaXNfdmFsaWRfbXNyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGhhbmRsaW5nIHZDUFUgTVNSIHJlYWRzL3dyaXRlcyBhbmQgaW9jdGxzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwODYwNTY5ZmVmNzQ1MzdlNGJkZjQ4YTJlZGM1ZTE2ODZiNzY5N2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNjozODo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wbXUuYyBiL2FyY2gveDg2L2t2bS9wbXUuY1xuaW5kZXggYTdkNjBjODc4NWNkNC4uZDJmZDQ3ZWU1ZWM4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5AQCAtODIzLDE0ICs4MjMsNiBAQCB2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIHtcbi1cdHN3aXRjaCAobXNyKSB7XG4tXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4tXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHZjcHVfdG9fcG11KHZjcHUpKTtcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuIFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxuIFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5pbmRleCBiZmE4NjEyZmI0NTA4Li43MGE4YzQ4MTYxMzU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4Nyw2ICsxODcsOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxuIFx0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAobXNyKSB7XG4rXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUzpcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTDpcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDAuNzU1NDMzMTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYwODU2MTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBNVSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AgYW5kIHRoZSBJbnRlbC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHdlIGNhbiBpZ25vcmUgYW55IHBvdGVudGlhbCAzMi1iaXQgc3BlY2lmaWMgY29uY2VybnMgZm9yIG5vdy5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMsIEknbGwgbmVlZCB0byBsb29rIGJleW9uZCBqdXN0IHRoZSBsaW5lcyBpbiB0aGUgZGlmZiBpdHNlbGYuIEknbGwgbmVlZCBhIHdpZGVyIHZpZXcuIEknbGwgcmVhY2ggZm9yIG15IHRvb2xzIOKAkyBwcm9iYWJseSBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBvdmVydmlldywgb3IgaWYgSSBuZWVkIG1vcmUgdGFyZ2V0ZWQgaW5mb3JtYXRpb24sIG1heWJlIGV2ZW4gYGdyZXBwZXJgIOKAkyB0byBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGJvdGggdGhvc2UgZmlsZXMuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGUgdG8gdGhlIG92ZXJhbGwgUE1VIChQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0gZm9yIHg4Ni4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgd2VyZSB0aGV5IHRyeWluZyB0byBmaXggb3IgaW1wcm92ZT8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODIsIk91dHB1dFRva2VucyI6ODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTowNy4zNjM5OTc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9wbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0XFxuIDgxNjpcXHR2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4MTc6XFx0e1xcbiA4MTg6XFx0XFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbiA4MTk6XFx0XFx0XFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcXG4gODIwOlxcdFxcdFxcdGt2bV9hcGljX2xvY2FsX2RlbGl2ZXIodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0xWVFBDKTtcXG4gODIxOlxcdFxcdH1cXG4gODIyOlxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDgyNTpcXHR7XFxuIDgyNjpcXHRcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XFxuIDgyNzpcXHRcXHQgICAgICAga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcikodmNwdSwgbXNyKTtcXG4gODI4OlxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0c3RhdGljIHZvaWQga3ZtX3BtdV9tYXJrX3BtY19pbl91c2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbiA4MzE6XFx0e1xcbiA4MzI6XFx0XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiA4MzM6XFx0XFx0c3RydWN0IGt2bV9wbWMgKnBtYyA9IGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0aWYgKHBtYylcXG4gODM2OlxcdFxcdFxcdF9fc2V0X2JpdChwbWMtXFx1MDAzZWlkeCwgcG11LVxcdTAwM2VwbWNfaW5fdXNlKTtcXG4gODM3OlxcdH1cXG4gODM4OlxcdFxcbiA4Mzk6XFx0aW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIDg0MDpcXHR7XFxuIDg0MTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDg0MjpcXHRcXHR1MzIgbXNyID0gbXNyX2luZm8tXFx1MDAzZWluZGV4O1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiA4NDU6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDg0NjpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcXG4gODQ3OlxcdFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG11LVxcdTAwM2VnbG9iYWxfc3RhdHVzO1xcbiA4NDg6XFx0XFx0XFx0YnJlYWs7XFxuIDg0OTpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX0NUTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDcuMzY0MDkwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MTpcXHR9XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDE4NjpcXHRcXHR1NjQgcGVyZl9jYXBhYmlsaXRpZXM7XFxuIDE4NzpcXHRcXHRpbnQgcmV0O1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxOTA6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDE5MTpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuIDE5MjpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxcbiAxOTM6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gMTk1OlxcdFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIDE5NjpcXHRcXHRcXHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xcbiAxOTc6XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRjYXNlIE1TUl9JQTMyX0RTX0FSRUE6XFxuIDE5OTpcXHRcXHRcXHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XFxuIDIwMDpcXHRcXHRcXHRicmVhaztcXG4gMjAxOlxcdFxcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XFxuIDIwMjpcXHRcXHRcXHRwZXJmX2NhcGFiaWxpdGllcyA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpO1xcbiAyMDM6XFx0XFx0XFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXFx1MDAyNlxcdTAwMjZcXG4gMjA0OlxcdFxcdFxcdFxcdCgocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXFx1MDAzZSAzKTtcXG4gMjA1OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMjA3OlxcdFxcdFxcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxcbiAyMDg6XFx0XFx0XFx0XFx0Z2V0X2dwX3BtYyhwbXUsIG1zciwgTVNSX1A2X0VWTlRTRUwwKSB8fFxcbiAyMDk6XFx0XFx0XFx0XFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcXG4gMjEwOlxcdFxcdFxcdFxcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XFxuIDIxMTpcXHRcXHRcXHRicmVhaztcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MDcuMzY0MTQ2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY3NzI0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIFBNVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBhcmNoL3g4Ni9rdm0vcG11LmNgIGZpbGUuIFRoZSBvcmlnaW5hbCBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLCBpbiB0aGF0IGZpbGUsIHVzZWQgdG8gY29udGFpbiBhIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpOiBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gVGhlIGZ1bmN0aW9uIHRoZW4gdXNlZCB0byByZXR1cm4gYGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO2AuXG5cblRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHRoZXNlIEludGVsLXNwZWNpZmljIE1TUiBjaGVja3Mgd2VyZSByZXNpZGluZyBpbiAqY29tbW9uKiBjb2RlIChga3ZtX3BtdS5jYCkuIFRoaXMgaGFkIHRoZSBwb3RlbnRpYWwgdG8gaW1wYWN0IEFNRCBzeXN0ZW1zLCBldmVuIGlmIHRoZXkgYXJlbid0IGRpcmVjdGx5IHVzaW5nIHRob3NlIEludGVsIFBNVSBmZWF0dXJlcywgaWYgQU1EIGNhbGxlZCBga3ZtX3BtdV9pc192YWxpZF9tc3JgLiBUaGF0J3Mgbm90IGlkZWFsLlxuXG5Ob3csIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGhhdmUgbW92ZWQgdGhlc2UgSW50ZWwtc3BlY2lmaWMgY2hlY2tzLiBUaGV5J3ZlIGJlZW4gc2hpZnRlZCBmcm9tIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgdG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBpbnRlbF9pc192YWxpZF9tc3JgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgc2VwYXJhdGVzIHRoZSBJbnRlbC1zcGVjaWZpYyBsb2dpYy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBBTUQgY29kZSwgaWYgaXQgZXhpc3RzLCBpcyBjb3JyZWN0IG9yIGlmIGl0IGNhbGxzIGBpbnRlbF9pc192YWxpZF9tc3JgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEFNRCBQTVUgY29kZSB0byBtYWtlIHN1cmUgdGhlcmUncyBub3Qgc29tZXRoaW5nIHNpbWlsYXIgaGFwcGVuaW5nIHRoZXJlLCBpbiBgcG11X2FtZC5jYCBvciBzb21ldGhpbmcgZXF1aXZhbGVudC4gSSdsbCBzZWFyY2ggZm9yIEFNRCdzIGBpc192YWxpZF9tc3JgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MTAuOTMxODc0MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MTcxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfdmFsaWRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcikpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0MS1cXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzNi1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzgtXFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTk0LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjUte1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MjYtXFx0cmV0dXJuIGt2bV9wbXVfY2FsbChtc3JfaWR4X3RvX3BtYykodmNwdSwgbXNyKSB8fFxcbmFyY2gveDg2L2t2bS9wbXUuYzo4Mjc6XFx0ICAgICAgIGt2bV9wbXVfY2FsbChpc192YWxpZF9tc3IpKHZjcHUsIG1zcik7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyOC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9MjY9c3RydWN0IGt2bV9wbXVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaC0zMC1cXHRpbnQgKCpjaGVja19yZHBtY19lYXJseSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6MzE6XFx0Ym9vbCAoKmlzX3ZhbGlkX21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtMzItXFx0aW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaD0yNzY9aW50IGt2bV9wbXVfY2hlY2tfcmRwbWNfZWFybHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaWR4KTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6Mjc3OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtMjc4LWludCBrdm1fcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9OTM9c3RhdGljIHN0cnVjdCBrdm1fcG1jICphbWRfbXNyX2lkeF90b19wbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDMtXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzoxMDQ6c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0xMDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTMwNy1cXHQuY2hlY2tfcmRwbWNfZWFybHkgPSBhbWRfY2hlY2tfcmRwbWNfZWFybHksXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMDg6XFx0LmlzX3ZhbGlkX21zciA9IGFtZF9pc192YWxpZF9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDktXFx0LmdldF9tc3IgPSBhbWRfcG11X2dldF9tc3IsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTE2NT1zdGF0aWMgYm9vbCBpbnRlbF9wbXVfaXNfdmFsaWRfbGJyX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTgyLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6MTgzOnN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy0xODQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04Mzc9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODM5LVxcdC5tc3JfaWR4X3RvX3BtYyA9IGludGVsX21zcl9pZHhfdG9fcG1jLFxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6ODQwOlxcdC5pc192YWxpZF9tc3IgPSBpbnRlbF9pc192YWxpZF9tc3IsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04NDEtXFx0LmdldF9tc3IgPSBpbnRlbF9wbXVfZ2V0X21zcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MTAuOTgxNDk1MDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzMDA2ODI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFBNVSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBQTVUgZW11bGF0aW9uIGxvZ2ljLCBmb2N1c2luZyBvbiB0aGUgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBhbmQgYGludGVsX2lzX3ZhbGlkX21zcmAgZnVuY3Rpb25zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGNhbiB0aGlzIGJlICpyZWFjaGVkKiBhbmQgKmZ1enplZCogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kIHN5emthbGxlciBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmU/XG5cbkkga25vdyBzeXprYWxsZXIgaGVhdmlseSB1dGlsaXplcyBgL2Rldi9rdm1gIGlvY3RscyBsaWtlIGBLVk1fU0VUX01TUlNgLCBgS1ZNX0dFVF9NU1JTYCwgYW5kIGBLVk1fUlVOYCAoYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi92Y3B1IE1TUiBhY2Nlc3MpIHRvIGhpdCBLVk0sIHNvIHRoZSBhbnN3ZXIgaXMgYSBjb25maWRlbnQgeWVzLCBpdCdzIGRlZmluaXRlbHkgYmVpbmcgaGl0LiBBbmQgdGhlIHByZXJlcXVpc2l0ZXMg4oCTIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgIG9uIGFtZDY0IOKAkyBhcmUsIG9mIGNvdXJzZSwgcHJlc2VudC4gSSBtZWFuLCB3ZSdkIGJlIGhhcmQtcHJlc3NlZCB0byAqbm90KiBoYXZlIHRob3NlIGVuYWJsZWQuXG5cblNvLCBpcyB0aGlzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IFllcywgb2J2aW91c2x5LCBiZWNhdXNlIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBOb3csIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBLVk0gb24geDg2IHRvIGNvbmZpcm0gYW55IGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNC4wMTE1NjYzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQzMTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNC4wNjQwMDQ0NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNTIzMjUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBNVSBjb2RlIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yayBmb3IgeDg2LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBkaXJlY3RvcnkuIEknbGwgbmVlZCB0byBvcGVuIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHRvIHNlZSBob3cgYm90aCBgcG11LmNgIOKAkyB3aGljaCBJIGFzc3VtZSBpcyB0aGUgZ2VuZXJpYyBQTVUgbGF5ZXIg4oCTIGFuZCB0aGUgSW50ZWwtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGB2bXgvcG11X2ludGVsLmNgLCBhcmUgYnVpbHQgYW5kIGxpbmtlZC4gSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYnVpbGQgZmxhZ3MgdXNlZCwgYW5kIGhvdyB0aGUgZGlmZmVyZW50IFBNVSBpbXBsZW1lbnRhdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgY29yZSBLVk0gYnVpbGQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBob3cgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBWTVggaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToxNS44OTkyMzk0MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjIzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjI4MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTY9aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cXHRcXHRcXHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0xNT1rdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNi1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTc6a3ZtLWludGVsLXlcXHRcXHQrPSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTgtXFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTI4LSNpbmNsdWRlIFxcXCJ0cmFjZS5oXFxcIlxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjI5OiNpbmNsdWRlIFxcXCJwbXUuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0zMC0jaW5jbHVkZSBcXFwieGVuLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYz0zNzY9dm9pZCBrdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUwLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjQ1MTpcXHRrdm1fcG11X3JlZnJlc2godmNwdSk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtNDUyLVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM9MTQzMj1zdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1MjQtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUyNTpcXHRcXHRpZiAoIWVuYWJsZV9wbXUgfHwgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkge1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE1MjYtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVheCA9IGVudHJ5LVxcdTAwM2VlYnggPSBlbnRyeS1cXHUwMDNlZWN4ID0gZW50cnktXFx1MDAzZWVkeCA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTI5LVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzA6XFx0XFx0ZWF4LnNwbGl0LnZlcnNpb25faWQgPSBrdm1fcG11X2NhcC52ZXJzaW9uO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzE6XFx0XFx0ZWF4LnNwbGl0Lm51bV9jb3VudGVycyA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncDtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxNTMyOlxcdFxcdGVheC5zcGxpdC5iaXRfd2lkdGggPSBrdm1fcG11X2NhcC5iaXRfd2lkdGhfZ3A7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzMzpcXHRcXHRlYXguc3BsaXQubWFza19sZW5ndGggPSBrdm1fcG11X2NhcC5ldmVudHNfbWFza19sZW47XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTUzNDpcXHRcXHRlZHguc3BsaXQubnVtX2NvdW50ZXJzX2ZpeGVkID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1MzU6XFx0XFx0ZWR4LnNwbGl0LmJpdF93aWR0aF9maXhlZCA9IGt2bV9wbXVfY2FwLmJpdF93aWR0aF9maXhlZDtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xNTM2LVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE1Mzc6XFx0XFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24pXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTUzOC1cXHRcXHRcXHRlZHguc3BsaXQuYW55dGhyZWFkX2RlcHJlY2F0ZWQgPSAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0MC1cXHRcXHRlbnRyeS1cXHUwMDNlZWF4ID0gZWF4LmZ1bGw7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTU0MTpcXHRcXHRlbnRyeS1cXHUwMDNlZWJ4ID0ga3ZtX3BtdV9jYXAuZXZlbnRzX21hc2s7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTU0Mi1cXHRcXHRlbnRyeS1cXHUwMDNlZWN4ID0gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTEtXFx0XFx0ZW50cnktXFx1MDAzZWVjeCA9IGVudHJ5LVxcdTAwM2VlZHggPSAwO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4OTI6XFx0XFx0aWYgKCFlbmFibGVfcG11IHx8ICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpIHtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODkzLVxcdFxcdFxcdGVudHJ5LVxcdTAwM2VlYXggPSBlbnRyeS1cXHUwMDNlZWJ4ID0gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTgtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTg5OTpcXHRcXHRlYnguc3BsaXQubnVtX2NvcmVfcG1jID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE5MDAtXFx0XFx0ZW50cnktXFx1MDAzZWVieCA9IGVieC5mdWxsO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNC0jaW5jbHVkZSBcXFwibW11LmhcXFwiXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNTojaW5jbHVkZSBcXFwicG11LmhcXFwiXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtOC0jaW5jbHVkZSBcXFwibXNycy5oXFxcIlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6OTojaW5jbHVkZSBcXFwicG11LmhcXFwiXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xMC0jaW5jbHVkZSBcXFwidHJhY2UuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTkxPXN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE3LVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjE4OnN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX3BtdVtdID0ge1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5LVxcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz0yNTA9c3RhdGljIHUzMiBtc3JzX3RvX3NhdmVbQVJSQVlfU0laRShtc3JzX3RvX3NhdmVfYmFzZSkgK1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjUxOlxcdFxcdFxcdEFSUkFZX1NJWkUobXNyc190b19zYXZlX3BtdSldO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjUyLXN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYz05MDY9c3RhdGljIGZhc3RwYXRoX3QgX19oYW5kbGVfZmFzdHBhdGhfd3Jtc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTkwNy17XFxuYXJjaC94ODYva3ZtL21zcnMuYzo5MDg6XFx0aWYgKCFrdm1fcG11X2lzX2Zhc3RwYXRoX2VtdWxhdGlvbl9hbGxvd2VkKHZjcHUpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtOTA5LVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5wZXJmX2NhcGFiaWxpdGllcyA9IGRhdGE7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxNDk0OlxcdFxcdGt2bV9wbXVfcmVmcmVzaCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE0OTUtXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ0FMQ19JTlRFUkNFUFRTLCB2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc1NC1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc1NTpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyKSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTY6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfc2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTg0MTpcXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE4NDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTE4OTk9aW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzYtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE5Mzc6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYzoxOTM4OlxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzOS1cXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYzoyMTk0OlxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjE5NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MjU2Mz1zdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxMy1cXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcXHUwMDNlPVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjYxNDpcXHRcXHQgICAga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYxNS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTI2MTktXFx0XFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwIFxcdTAwM2U9XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyNjIwOlxcdFxcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3ApXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjIxLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMjYyNS1cXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIFxcdTAwM2U9XFxuYXJjaC94ODYva3ZtL21zcnMuYzoyNjI2OlxcdFxcdCAgICBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjI3LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MjY3MD12b2lkIGt2bV9pbml0X21zcl9saXN0cyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc0LVxcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSAzLFxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY3NTpcXHRcXHRcXHQgXFxcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXFxcIik7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjgzLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NDpcXHRpZiAoZW5hYmxlX3BtdSkge1xcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtc3JzX3RvX3NhdmVfcG11KTsgaSsrKVxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MjY4NjpcXHRcXHRcXHRrdm1fcHJvYmVfbXNyX3RvX3NhdmUobXNyc190b19zYXZlX3BtdVtpXSk7XFxuYXJjaC94ODYva3ZtL21zcnMuYy0yNjg3LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yNC0jaW5jbHVkZSBcXFwibGFwaWMuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjU6I2luY2x1ZGUgXFxcInBtdS5oXFxcIlxcbmFyY2gveDg2L2t2bS9wbXUuYy0yNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMC0vKiBVbmFkdWx0ZXJlZCBQTVUgY2FwYWJpbGl0aWVzIG9mIHRoZSBob3N0LCBpLmUuIG9mIGhhcmR3YXJlLiAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzozMTpzdGF0aWMgc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSBfX3JlYWRfbW9zdGx5IGt2bV9ob3N0X3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzItXFxuYXJjaC94ODYva3ZtL3BtdS5jLTMzLS8qIEtWTSdzIFBNVSBjYXBhYmlsaXRpZXMsIGkuZS4gdGhlIGludGVyc2VjdGlvbiBvZiBLVk0gYW5kIGhhcmR3YXJlIHN1cHBvcnQuICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjM0OnN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgX19yZWFkX21vc3RseSBrdm1fcG11X2NhcDtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MzU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wbXVfY2FwKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzYtXFxuYXJjaC94ODYva3ZtL3BtdS5jLTM3LS8qIEVuYWJsZS9kaXNhYmxlIFBNVSB2aXJ0dWFsaXphdGlvbiAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzozODpib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX3BtdSA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjM5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDA6bW9kdWxlX3BhcmFtKGVuYWJsZV9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy00MS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfbWVkaWF0ZWRfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ2OnN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIge1xcbmFyY2gveDg2L2t2bS9wbXUuYy00Ny1cXHRfX3UzMiBhY3Rpb247XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTctXFxuYXJjaC94ODYva3ZtL3BtdS5jOjU4OnN0cnVjdCBrdm1fcG11X2VtdWxhdGVkX2V2ZW50X3NlbGVjdG9ycyB7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5LVxcdHU2NCBJTlNUUlVDVElPTlNfUkVUSVJFRDtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02MS19O1xcbmFyY2gveDg2L2t2bS9wbXUuYzo2MjpzdGF0aWMgc3RydWN0IGt2bV9wbXVfZW11bGF0ZWRfZXZlbnRfc2VsZWN0b3JzIF9fcmVhZF9tb3N0bHkga3ZtX3BtdV9ldmVudHNlbDtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIHZteF9wZWJzX3BkaXN0X2NwdVtdID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzLSAqICAgaW4gZml4ZWRfY291bnRlcnNbXSByZXNwZWN0aXZlbHkuIEJvdGggb2YgdGhlbSBhcmUgcGFydCBvZiBcXFwic3RydWN0XFxuYXJjaC94ODYva3ZtL3BtdS5jOjg0OiAqICAga3ZtX3BtdVxcXCI7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjg1OiAqIC0gcG11LmMgdW5kZXJzdGFuZHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBncCBjb3VudGVycyBhbmQgZml4ZWQgY291bnRlcnMuXFxuYXJjaC94ODYva3ZtL3BtdS5jLTg2LSAqICAgSG93ZXZlciBBTUQgZG9lc24ndCBzdXBwb3J0IGZpeGVkLWNvdW50ZXJzO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEwNi1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTA3OnN0YXRpYyBzdHJ1Y3Qga3ZtX3BtdV9vcHMga3ZtX3BtdV9vcHMgX19yZWFkX21vc3RseTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTA4LVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMDktI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKVxcdFxcdFxcdFxcdFxcdCAgICAgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTA6XFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9wbXVfIyNmdW5jLFxcdFxcdFxcdCAgICAgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTE6XFx0XFx0XFx0XFx0KigoKHN0cnVjdCBrdm1fcG11X29wcyAqKTApLVxcdTAwM2VmdW5jKSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMIEtWTV9YODZfUE1VX09QXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMy0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9QTVVfT1BcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTE0OiNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLXg4Ni1wbXUtb3BzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNTpFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfcG11X3BtY19pc19kaXNhYmxlZF9pbl9jdXJyZW50X21vZGUpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExNzp2b2lkIGt2bV9wbXVfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExOC17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjExOTpcXHRtZW1jcHkoXFx1MDAyNmt2bV9wbXVfb3BzLCBwbXVfb3BzLCBzaXplb2Yoa3ZtX3BtdV9vcHMpKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTIwLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjEtI2RlZmluZSBfX0tWTV9YODZfUE1VX09QKGZ1bmMpIFxcXFxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTIyOlxcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X3BtdV8jI2Z1bmMsIGt2bV9wbXVfb3BzLmZ1bmMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjMtI2RlZmluZSBLVk1fWDg2X1BNVV9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3BtdS5jOjEyNDpcXHRXQVJOX09OKCFrdm1fcG11X29wcy5mdW5jKTsgX19LVk1fWDg2X1BNVV9PUChmdW5jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMjUtI2RlZmluZSBLVk1fWDg2X1BNVV9PUF9PUFRJT05BTCBfX0tWTV9YODZfUE1VX09QXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyNi0jZGVmaW5lIEtWTV9YODZfUE1VX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjc6XFx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfcG11XyMjZnVuYywgKHZvaWQgKilrdm1fcG11X29wcy5mdW5jID8gOiBcXFxcXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEyOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxMjk6I2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LXBtdS1vcHMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMwLSN1bmRlZiBfX0tWTV9YODZfUE1VX09QXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTMyLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzM6dm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNC17XFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNS1cXHRib29sIGlzX2ludGVsID0gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUw7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjEzNjpcXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVxcdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTEzNy1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDQtXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSFlCUklEX0NQVSkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ1OlxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ2OlxcdFxcdG1lbXNldChcXHUwMDI2a3ZtX2hvc3RfcG11LCAwLCBzaXplb2Yoa3ZtX2hvc3RfcG11KSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE0Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxNDg6XFx0XFx0cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KFxcdTAwMjZrdm1faG9zdF9wbXUpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDktXFx0fVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTAtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1MTpcXHRpZiAoZW5hYmxlX3BtdSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTItXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTctXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1ODpcXHRcXHRpZiAoIWt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZ3AgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5OlxcdFxcdCAgICBXQVJOX09OX09OQ0Uoa3ZtX2hvc3RfcG11Lm51bV9jb3VudGVyc19ncCBcXHUwMDNjIG1pbl9ucl9ncF9jdHJzKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYwOlxcdFxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYxOlxcdFxcdGVsc2UgaWYgKGlzX2ludGVsIFxcdTAwMjZcXHUwMDI2ICFrdm1faG9zdF9wbXUudmVyc2lvbilcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTYyOlxcdFxcdFxcdGVuYWJsZV9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYzLVxcdH1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY0LVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNjU6XFx0aWYgKCFlbmFibGVfcG11IHx8ICFlbmFibGVfbWVkaWF0ZWRfcG11IHx8ICFrdm1faG9zdF9wbXUubWVkaWF0ZWQgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY2OlxcdCAgICAhcG11X29wcy1cXHUwMDNlaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZChcXHUwMDI2a3ZtX2hvc3RfcG11KSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTY3OlxcdFxcdGVuYWJsZV9tZWRpYXRlZF9wbXUgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTY4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNjk6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxNzA6XFx0XFx0cG11X29wcy1cXHUwMDNld3JpdGVfZ2xvYmFsX2N0cmwgPSBOVUxMO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNzEtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE3MjpcXHRpZiAoIWVuYWJsZV9wbXUpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTczOlxcdFxcdG1lbXNldChcXHUwMDI2a3ZtX3BtdV9jYXAsIDAsIHNpemVvZihrdm1fcG11X2NhcCkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xNzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE3Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc3OlxcdG1lbWNweShcXHUwMDI2a3ZtX3BtdV9jYXAsIFxcdTAwMjZrdm1faG9zdF9wbXUsIHNpemVvZihrdm1faG9zdF9wbXUpKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTc4OlxcdGt2bV9wbXVfY2FwLnZlcnNpb24gPSBtaW4oa3ZtX3BtdV9jYXAudmVyc2lvbiwgMik7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjE3OTpcXHRrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3AgPSBtaW4oa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwLFxcbmFyY2gveDg2L2t2bS9wbXUuYzoxODA6XFx0XFx0XFx0XFx0XFx0ICBwbXVfb3BzLVxcdTAwM2VNQVhfTlJfR1BfQ09VTlRFUlMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYzoxODE6XFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTgyLVxcdFxcdFxcdFxcdFxcdCAgICAgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE4My1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg0OlxcdGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xODUtXFx0XFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTg2OlxcdGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTg3LVxcdFxcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTE5MD12b2lkIGt2bV9oYW5kbGVfZ3Vlc3RfbWVkaWF0ZWRfcG1pKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTkzLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxOTQ6XFx0aWYgKFdBUk5fT05fT05DRSghdmNwdSB8fCAha3ZtX3ZjcHVfaGFzX21lZGlhdGVkX3BtdSh2Y3B1KSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE5NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9wZXJmX292ZXJmbG93KHN0cnVjdCBrdm1fcG1jICpwbWMsIGJvb2wgaW5fcG1pKVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMDEte1xcbmFyY2gveDg2L2t2bS9wbXUuYzoyMDI6XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjAzLVxcdGJvb2wgc2tpcF9wbWkgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMTYtXFx0XFx0XFx0c2tpcF9wbWkgPSBfX3Rlc3RfYW5kX3NldF9iaXQoR0xPQkFMX1NUQVRVU19CVUZGRVJfT1ZGX0JJVCxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnBtdS1cXHUwMDNlZ2xvYmFsX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTIxOC1cXHRcXHR9XFxuYXJjaC94ODYva3ZtL3BtdS5jLTIxOS1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9wbXUuYzoyMjA6XFx0XFx0X19zZXRfYml0KHBtYy1cXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0yMjEtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTIyNz1zdGF0aWMgdm9pZCBrdm1fcGVyZl9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0yMzctXFx0ICovXFxuYXJjaC94ODYva3ZtL3BtdS5jOjIzODpcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChwbWMtXFx1MDAzZWlkeCwgcG1jX3RvX3BtdShwbWMpLVxcdTAwM2VyZXByb2dyYW1fcG1pKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjM5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0yNzc9c3RhdGljIGludCBwbWNfcmVwcm9ncmFtX2NvdW50ZXIoc3RydWN0IGt2bV9wbWMgKnBtYywgdTMyIHR5cGUsIHU2NCBjb25maWcsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjgwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MjgxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSBwbWNfdG9fcG11KHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTI4Mi1cXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMjkyLVxcdH07XFxuYXJjaC94ODYva3ZtL3BtdS5jOjI5MzpcXHRib29sIHBlYnMgPSB0ZXN0X2JpdChwbWMtXFx1MDAzZWlkeCwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cG11LVxcdTAwM2VwZWJzX2VuYWJsZSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMTgtXFx0aWYgKElTX0VSUihldmVudCkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MzE5OlxcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCJrdm1fcG11OiBldmVudCBjcmVhdGlvbiBmYWlsZWQgJWxkIGZvciBwbWMtXFx1MDAzZWlkeCA9ICVkXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9wbXUuYy0zMjAtXFx0XFx0XFx0ICAgIFBUUl9FUlIoZXZlbnQpLCBwbWMtXFx1MDAzZWlkeCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzI0LVxcdHBtYy1cXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xcbmFyY2gveDg2L2t2bS9wbXUuYzozMjU6XFx0cG1jX3RvX3BtdShwbWMpLVxcdTAwM2VldmVudF9jb3VudCsrO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0zMjYtXFx0cG1jLVxcdTAwM2Vpc19wYXVzZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0zNTc9c3RhdGljIGJvb2wgcG1jX3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzY3LVxcbmFyY2gveDg2L2t2bS9wbXUuYzozNjg6XFx0aWYgKHRlc3RfYml0KHBtYy1cXHUwMDNlaWR4LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwbWNfdG9fcG11KHBtYyktXFx1MDAzZXBlYnNfZW5hYmxlKSAhPVxcbmFyY2gveDg2L2t2bS9wbXUuYy0zNjktXFx0ICAgICghIXBtYy1cXHUwMDNlcGVyZl9ldmVudC1cXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz0zNzk9c3RhdGljIHZvaWQgcG1jX3JlbGVhc2VfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTM4NC1cXHRcXHRwbWMtXFx1MDAzZWN1cnJlbnRfY29uZmlnID0gMDtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Mzg1OlxcdFxcdHBtY190b19wbXUocG1jKS1cXHUwMDNlZXZlbnRfY291bnQtLTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMzg2LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz00MDc9dm9pZCBwbWNfd3JpdGVfY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jLCB1NjQgdmFsKVxcbmFyY2gveDg2L2t2bS9wbXUuYy00MDgte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo0MDk6XFx0aWYgKGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUocG1jLVxcdTAwM2V2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy00MTAtXFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyID0gdmFsIFxcdTAwMjYgcG1jX2JpdG1hc2socG1jKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz00NzY9c3RhdGljIGJvb2wgZmlsdGVyX2NvbnRhaW5zX21hdGNoKHU2NCAqZXZlbnRzLCB1NjQgbmV2ZW50cywgdTY0IGV2ZW50c2VsKVxcbmFyY2gveDg2L2t2bS9wbXUuYy00Nzcte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo0Nzg6XFx0dTY0IGV2ZW50X3NlbGVjdCA9IGV2ZW50c2VsIFxcdTAwMjYga3ZtX3BtdV9vcHMuRVZFTlRTRUxfRVZFTlQ7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTQ3OS1cXHR1NjQgdW1hc2sgPSBldmVudHNlbCBcXHUwMDI2IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VTUFTSztcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy01MDgtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjUwOTpzdGF0aWMgYm9vbCBpc19ncF9ldmVudF9hbGxvd2VkKHN0cnVjdCBrdm1feDg2X3BtdV9ldmVudF9maWx0ZXIgKmYsXFxuYXJjaC94ODYva3ZtL3BtdS5jLTUxMC1cXHRcXHRcXHRcXHR1NjQgZXZlbnRzZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTE4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1MTk6c3RhdGljIGJvb2wgaXNfZml4ZWRfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZXZlbnRfZmlsdGVyICpmaWx0ZXIsXFxuYXJjaC94ODYva3ZtL3BtdS5jLTUyMC1cXHRcXHRcXHRcXHQgICBpbnQgaWR4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTUzND1zdGF0aWMgYm9vbCBwbWNfaXNfZXZlbnRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01MzUte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo1MzY6XFx0c3RydWN0IGt2bV94ODZfcG11X2V2ZW50X2ZpbHRlciAqZmlsdGVyO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01MzctXFx0c3RydWN0IGt2bSAqa3ZtID0gcG1jLVxcdTAwM2V2Y3B1LVxcdTAwM2Vrdm07XFxuYXJjaC94ODYva3ZtL3BtdS5jLTUzOC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTM5OlxcdGZpbHRlciA9IHNyY3VfZGVyZWZlcmVuY2Uoa3ZtLVxcdTAwM2VhcmNoLnBtdV9ldmVudF9maWx0ZXIsIFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NDAtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTQ4LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NDk6c3RhdGljIHZvaWQga3ZtX21lZGlhdGVkX3BtdV9yZWZyZXNoX2V2ZW50X2ZpbHRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01NTAte1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NTEtXFx0Ym9vbCBhbGxvd2VkID0gcG1jX2lzX2xvY2FsbHlfZW5hYmxlZChwbWMpIFxcdTAwMjZcXHUwMDI2IHBtY19pc19ldmVudF9hbGxvd2VkKHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjU1MjpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gcG1jX3RvX3BtdShwbWMpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01NTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYxLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjI6XFx0XFx0cG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybF9odyBcXHUwMDI2PSB+bWFzaztcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTYzLVxcdFxcdGlmIChhbGxvd2VkKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NjQ6XFx0XFx0XFx0cG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybF9odyB8PSBwbXUtXFx1MDAzZWZpeGVkX2N0cl9jdHJsIFxcdTAwMjYgbWFzaztcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTY1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz01Njg9c3RhdGljIGludCByZXByb2dyYW1fY291bnRlcihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYy01Njkte1xcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzA6XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHBtY190b19wbXUocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTcxLVxcdHU2NCBldmVudHNlbCA9IHBtYy1cXHUwMDNlZXZlbnRzZWw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc1LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo1NzY6XFx0aWYgKGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUocG11X3RvX3ZjcHUocG11KSkpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTc3OlxcdFxcdGt2bV9tZWRpYXRlZF9wbXVfcmVmcmVzaF9ldmVudF9maWx0ZXIocG1jKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNTc4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5MC1cXHRpZiAoZXZlbnRzZWwgXFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfUElOX0NPTlRST0wpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjU5MTpcXHRcXHRwcmludGtfb25jZShcXFwia3ZtIHBtdTogcGluIGNvbnRyb2wgYml0IGlzIGlnbm9yZWRcXFxcblxcXCIpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy01OTItXFxuYXJjaC94ODYva3ZtL3BtdS5jLTU5My1cXHRpZiAocG1jX2lzX2ZpeGVkKHBtYykpIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NTk0OlxcdFxcdGZpeGVkX2N0cl9jdHJsID0gZml4ZWRfY3RybF9maWVsZChwbXUtXFx1MDAzZWZpeGVkX2N0cl9jdHJsLFxcbmFyY2gveDg2L2t2bS9wbXUuYy01OTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBwbWMtXFx1MDAzZWlkeCAtIEtWTV9GSVhFRF9QTUNfQkFTRV9JRFgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxMi1cXHRyZXR1cm4gcG1jX3JlcHJvZ3JhbV9jb3VudGVyKHBtYywgUEVSRl9UWVBFX1JBVyxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjEzOlxcdFxcdFxcdFxcdCAgICAgKGV2ZW50c2VsIFxcdTAwMjYgcG11LVxcdTAwM2VyYXdfZXZlbnRfbWFzayksXFxuYXJjaC94ODYva3ZtL3BtdS5jLTYxNC1cXHRcXHRcXHRcXHQgICAgICEoZXZlbnRzZWwgXFx1MDAyNiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSxcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYz02MTk9c3RhdGljIGJvb2wgcG1jX2lzX2V2ZW50X21hdGNoKHN0cnVjdCBrdm1fcG1jICpwbWMsIHU2NCBldmVudHNlbClcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02MzctXFxuYXJjaC94ODYva3ZtL3BtdS5jOjYzODp2b2lkIGt2bV9wbXVfcmVjYWxjX3BtY19lbXVsYXRpb24oc3RydWN0IGt2bV9wbXUgKnBtdSwgc3RydWN0IGt2bV9wbWMgKnBtYylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjM5LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQwOlxcdGJpdG1hcF9jbGVhcihwbXUtXFx1MDAzZXBtY19jb3VudGluZ19pbnN0cnVjdGlvbnMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjQxOlxcdGJpdG1hcF9jbGVhcihwbXUtXFx1MDAzZXBtY19jb3VudGluZ19icmFuY2hlcywgcG1jLVxcdTAwM2VpZHgsIDEpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjUxLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTI6XFx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQpKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTM6XFx0XFx0Yml0bWFwX3NldChwbXUtXFx1MDAzZXBtY19jb3VudGluZ19pbnN0cnVjdGlvbnMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU0LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NTU6XFx0aWYgKHBtY19pc19ldmVudF9tYXRjaChwbWMsIGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEKSlcXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2OlxcdFxcdGJpdG1hcF9zZXQocG11LVxcdTAwM2VwbWNfY291bnRpbmdfYnJhbmNoZXMsIHBtYy1cXHUwMDNlaWR4LCAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU3LX1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcG11X3JlY2FsY19wbWNfZW11bGF0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU5LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2NjA6dm9pZCBrdm1fcG11X2hhbmRsZV9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2MS17XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2Mi1cXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIFg4Nl9QTUNfSURYX01BWCk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjY2MzpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2NC1cXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY2Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjY3OlxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVxcdTAwM2VyZXByb2dyYW1fcG1pLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NjgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjc0LVxcdEJVSUxEX0JVR19PTihzaXplb2YoYml0bWFwKSAhPSBzaXplb2YoYXRvbWljNjRfdCkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYzo2NzU6XFx0YXRvbWljNjRfYW5kbm90KCooczY0ICopYml0bWFwLCBcXHUwMDI2cG11LVxcdTAwM2VfX3JlcHJvZ3JhbV9wbWkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NzYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY3NzpcXHRrdm1fZm9yX2VhY2hfcG1jKHBtdSwgcG1jLCBiaXQsIGJpdG1hcCkge1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NzgtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy02ODQtXFx0XFx0aWYgKHJlcHJvZ3JhbV9jb3VudGVyKHBtYykpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY4NTpcXHRcXHRcXHRzZXRfYml0KHBtYy1cXHUwMDNlaWR4LCBwbXUtXFx1MDAzZXJlcHJvZ3JhbV9wbWkpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02ODYtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5Mi1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjkzOlxcdGlmICh1bmxpa2VseShwbXUtXFx1MDAzZW5lZWRfY2xlYW51cCkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjY5NDpcXHRcXHRrdm1fcG11X2NsZWFudXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5NS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6Njk2OlxcdGt2bV9mb3JfZWFjaF9wbWMocG11LCBwbWMsIGJpdCwgYml0bWFwKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo2OTc6XFx0XFx0a3ZtX3BtdV9yZWNhbGNfcG1jX2VtdWxhdGlvbihwbXUsIHBtYyk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTY5OC19XFxuYXJjaC94ODYva3ZtL3BtdS5jOjY5OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3BtdV9oYW5kbGVfZXZlbnQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MDAtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjcwMTppbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTcwMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzo3MTE6XFx0aWYgKCFrdm1fcG11X29wcy5jaGVja19yZHBtY19lYXJseSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzEyLVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MTMtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjcxNDpcXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKGNoZWNrX3JkcG1jX2Vhcmx5KSh2Y3B1LCBpZHgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03MTUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTcxNz1ib29sIGlzX3Ztd2FyZV9iYWNrZG9vcl9wbWModTMyIHBtY19pZHgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzI3LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3Mjg6c3RhdGljIGludCBrdm1fcG11X3JkcG1jX3Ztd2FyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGlkeCwgdTY0ICpkYXRhKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1MC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzUxOmludCBrdm1fcG11X3JkcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaWR4LCB1NjQgKmRhdGEpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1Mi17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjc1MzpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1NC1cXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc1Ni1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NzU3OlxcdGlmICghcG11LVxcdTAwM2V2ZXJzaW9uKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03NTgtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYwLVxcdGlmIChpc192bXdhcmVfYmFja2Rvb3JfcG1jKGlkeCkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjc2MTpcXHRcXHRyZXR1cm4ga3ZtX3BtdV9yZHBtY192bXdhcmUodmNwdSwgaWR4LCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzYyLVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3NjM6XFx0cG1jID0ga3ZtX3BtdV9jYWxsKHJkcG1jX2VjeF90b19wbWMpKHZjcHUsIGlkeCwgXFx1MDAyNm1hc2spO1xcbmFyY2gveDg2L2t2bS9wbXUuYy03NjQtXFx0aWYgKCFwbWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzc2PXN0YXRpYyBib29sIGt2bV9uZWVkX2FueV9wbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzc3LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzc4OlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzc5LVxcbmFyY2gveDg2L2t2bS9wbXUuYzo3ODA6XFx0aWYgKCFrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9wbXUuYy03ODEtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNzg3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9wbXUuYzo3ODg6XFx0cmV0dXJuIHBtdS1cXHUwMDNlbnJfYXJjaF9ncF9jb3VudGVycyAhPSBrdm1faG9zdF9wbXUubnVtX2NvdW50ZXJzX2dwIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jOjc4OTpcXHQgICAgICAgcG11LVxcdTAwM2Vucl9hcmNoX2ZpeGVkX2NvdW50ZXJzICE9IGt2bV9ob3N0X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NzkyPWJvb2wga3ZtX25lZWRfcGVyZl9nbG9iYWxfY3RybF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5NC1cXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6Nzk1OlxcdCAgICAgICAha3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybCh2Y3B1X3RvX3BtdSh2Y3B1KSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTc5Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9Nzk5PWJvb2wga3ZtX25lZWRfcmRwbWNfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODAxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODAyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgxMC1cXHRyZXR1cm4ga3ZtX25lZWRfYW55X3BtY19pbnRlcmNlcHQodmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODExOlxcdCAgICAgICBwbXUtXFx1MDAzZWNvdW50ZXJfYml0bWFza1tLVk1fUE1DX0dQXSAhPSAoQklUX1VMTChrdm1faG9zdF9wbXUuYml0X3dpZHRoX2dwKSAtIDEpIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgxMjpcXHQgICAgICAgcG11LVxcdTAwM2Vjb3VudGVyX2JpdG1hc2tbS1ZNX1BNQ19GSVhFRF0gIT0gKEJJVF9VTEwoa3ZtX2hvc3RfcG11LmJpdF93aWR0aF9maXhlZCkgLSAxKTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODEzLX1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9ODE0PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbmVlZF9yZHBtY19pbnRlcmNlcHQpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MTUtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgxNjp2b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MTcte1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MTgtXFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9wbXUuYzo4MTk6XFx0XFx0a3ZtX3BtdV9jYWxsKGRlbGl2ZXJfcG1pKSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODIwLVxcdFxcdGt2bV9hcGljX2xvY2FsX2RlbGl2ZXIodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0xWVFBDKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjMtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgyNDpib29sIGt2bV9wbXVfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODI1LXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI2OlxcdHJldHVybiBrdm1fcG11X2NhbGwobXNyX2lkeF90b19wbWMpKHZjcHUsIG1zcikgfHxcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI3OlxcdCAgICAgICBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MjgtfVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjktXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMDpzdGF0aWMgdm9pZCBrdm1fcG11X21hcmtfcG1jX2luX3VzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzMS17XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMjpcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzMzpcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jID0ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MzQtXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgzNS1cXHRpZiAocG1jKVxcbmFyY2gveDg2L2t2bS9wbXUuYzo4MzY6XFx0XFx0X19zZXRfYml0KHBtYy1cXHUwMDNlaWR4LCBwbXUtXFx1MDAzZXBtY19pbl91c2UpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04MzctfVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MzgtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjgzOTppbnQga3ZtX3BtdV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQwLXtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODQxOlxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQyLVxcdHUzMiBtc3IgPSBtc3JfaW5mby1cXHUwMDNlaW5kZXg7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtODQ2LVxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTOlxcbmFyY2gveDg2L2t2bS9wbXUuYzo4NDc6XFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXM7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTg0OC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy04NTAtXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxcbmFyY2gveDg2L2t2bS9wbXUuYzo4NTE6XFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZWdsb2JhbF9jdHJsO1xcbmFyY2gveDg2L2t2bS9wbXUuYy04NTItXFx0XFx0YnJlYWs7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjE1Ljk1Mzg2NjQ2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODI2NTYwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNU1IgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBNU1IgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGUgY3VycmVudCB2ZW5kb3ItYWdub3N0aWMgZnVuY3Rpb24sIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIGlzIHRoZSB0YXJnZXQgZm9yIG1vdmluZyB0aGUgdmFsaWRhdGlvbiBvZiB0aGVzZSBwYXJ0aWN1bGFyIE1TUnMuIEluc3RlYWQsIHRoaXMgcGF0Y2ggcHJvcG9zZXMgdG8gc2hpZnQgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpbiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyY2hpdGVjdHVyYWwgc2VwYXJhdGlvbi4gR2l2ZW4gdGhlIGhpc3RvcnksIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsIHdoYXQgaXMgdGhlIGltcGFjdD8gVGhlIGNoYW5nZSBjbGVhcmx5IGFpbXMgZm9yIGEgbW9yZSBncmFudWxhciwgdmVuZG9yLXNwZWNpZmljIGFwcHJvYWNoIHRvIHZhbGlkYXRpb24uIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIG51YW5jZWQgYmVoYXZpb3Igb3IgcmVxdWlyZW1lbnRzIHdpdGhpbiBJbnRlbCdzIFBNVSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzbid0IGVhc2lseSByZXByZXNlbnRlZCBpbiBhIGdlbmVyaWMgbWFubmVyLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSBob3cgQU1EIGhhbmRsZXMgdGhlc2UgTVNScyAob3IgaWYgdGhleSBhcmUgZXZlbiByZWxldmFudCB0byB0aGVpciBQTVUpLiBJJ2xsIGp1bXAgb3ZlciB0byBgcG11X2FtZC5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFwcHJvYWNoIHRoaXMgdmFsaWRhdGlvbi4gVGhhdCBzaG91bGQgcXVpY2tseSBjb250ZXh0dWFsaXplIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBzaGlmdCBpbiByZXNwb25zaWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgbG9va2luZyBhdCBib3RoIHNpZGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjc3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjIyLjc4MDQyOTgxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHJldHVybiBwbWM7XFxuIDEwMjpcXHR9XFxuIDEwMzpcXHRcXG4gMTA0OlxcdHN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbiAxMDU6XFx0e1xcbiAxMDY6XFx0XFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxMDk6XFx0XFx0Y2FzZSBNU1JfSzdfRVZOVFNFTDAgLi4uIE1TUl9LN19QRVJGQ1RSMzpcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBwbXUtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSAwO1xcbiAxMTE6XFx0XFx0Y2FzZSBNU1JfRjE1SF9QRVJGX0NUTDAgLi4uIE1TUl9GMTVIX1BFUkZfQ1RSNTpcXG4gMTEyOlxcdFxcdFxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpO1xcbiAxMTM6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVM6XFxuIDExNDpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX0NUTDpcXG4gMTE1OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTX0NMUjpcXG4gMTE2OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfU1RBVFVTX1NFVDpcXG4gMTE3OlxcdFxcdFxcdHJldHVybiBwbXUtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSAxO1xcbiAxMTg6XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdGlmIChtc3IgXFx1MDAzZSBNU1JfRjE1SF9QRVJGX0NUUjUgXFx1MDAyNlxcdTAwMjZcXG4gMTIwOlxcdFxcdFxcdCAgICBtc3IgXFx1MDAzYyBNU1JfRjE1SF9QRVJGX0NUTDAgKyAyICogcG11LVxcdTAwM2Vucl9hcmNoX2dwX2NvdW50ZXJzKVxcbiAxMjE6XFx0XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDE7XFxuIDEyMjpcXHRcXHRcXHRicmVhaztcXG4gMTIzOlxcdFxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0cmV0dXJuIGFtZF9tc3JfaWR4X3RvX3BtYyh2Y3B1LCBtc3IpO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRzdGF0aWMgaW50IGFtZF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDEzMTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbiAxMzI6XFx0XFx0dTMyIG1zciA9IG1zcl9pbmZvLVxcdTAwM2VpbmRleDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0LyogTVNSX1BFUkZDVFJuICovXFxuIDEzNTpcXHRcXHRwbWMgPSBnZXRfZ3BfcG1jX2FtZChwbXUsIG1zciwgUE1VX1RZUEVfQ09VTlRFUik7XFxuIDEzNjpcXHRcXHRpZiAocG1jKSB7XFxuIDEzNzpcXHRcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IHBtY19yZWFkX2NvdW50ZXIocG1jKTtcXG4gMTM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMzk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOToyMi43ODA1MDI0NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwNzE4NDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEtWTSdzIE1TUiBWYWxpZGF0aW9uOiBBIFByb21pc2luZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIEtWTSdzIE1TUiBoYW5kbGluZyB0aGF0IHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIGZ1enppbmcgdGFyZ2V0LiBUaGUgcGF0aCBzdGFydHMgd2l0aCBgaW50ZWxfaXNfdmFsaWRfbXNyYCBhbmQgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCwgYW5kIGxvb2tzIGxpa2UgaXQncyByZWFjaGFibGUgd2hlbiBhIGd1ZXN0IG9yIHVzZXJzcGFjZSBpcyBtZXNzaW5nIHdpdGggdGhvc2UgY3J1Y2lhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnM6IGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgLiBUaGVzZSBNU1JzIGFyZSBhY2Nlc3NlZCB2aWEgYHJkbXNyYCAvIGB3cm1zcmAgaW5zdHJ1Y3Rpb25zIG9yIHRocm91Z2ggYC9kZXYva3ZtYCB1c2luZyBgS1ZNX1NFVF9NU1JTYCAvIGBLVk1fR0VUX01TUlNgLCB3aGljaCwgaW4gdHVybiwgZ29lcyB0aHJvdWdoIGBrdm1fZ2V0X21zcl9jb21tb25gIC8gYGt2bV9zZXRfbXNyX2NvbW1vbmAgYW5kIGZpbmFsbHkgY2FsbHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgLlxuXG5QcmV2aW91c2x5LCBJIHRoaW5rLCBvbiBBTUQgc3lzdGVtcyAoU1ZNKSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyKClgIGNoZWNrZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKClgIGZ1bmN0aW9uLCBsaWtlbHkgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyBpZiBhbiBJbnRlbCBNU1Igd2FzIGFjY2Vzc2VkLiBOb3csIHRoYXQgbG9naWMgaGFzIGJlZW4gZ2VuZXJhbGl6ZWQgdmlhIGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKWAuIE9uIEFNRCwgYGFtZF9pc192YWxpZF9tc3JgIHdvdWxkIHJlamVjdCB0aG9zZSBJbnRlbCBNU1JzLCB3aGlsZSBvbiBJbnRlbCwgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGBpbnRlbF9pc192YWxpZF9tc3JgLCBpcyBnb2luZyB0byBjaGVjayBga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpYC5cblxuVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSB0aGlzIHRvdWNoIGlzIGxvY2F0ZWQgaW4gdGhlIGB2aXJ0L2t2bS9hcmNoL3g4NmAgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGtlcm5lbCBjb2RlIHRoYXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz9cblxuTGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZTogS1ZNJ3MgeDg2IGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBRRU1VIGFuZCBzeXprYWxsZXIsIHNvIGNoZWNrISBDb3JlIFN1YnN5c3RlbXMgb3IgS1ZNOiBZZXMsIHRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBLVk0sIHNvIGNoZWNrISBUaGF0IG1lYW5zIFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5vdywgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZD8gV2UnbGwgbmVlZCBgS1ZNYCBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBgS1ZNX0lOVEVMYC4gVGhlIGNvZGUsIGluIGBwbXVfaW50ZWwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIHRoaXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyB0aGF0IEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjM5OjI3LjQ4NzY4OTg5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzM3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6MjcuNzM0MDMyNjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTEwODIzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcHRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgc3Vycm91bmRpbmcgYGNvbmZpZyBLVk1fSU5URUxgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgd2ViIG9mIGRlcGVuZGVuY2llcyBhcm91bmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbG9uZ3NpZGUgYEtWTV9JTlRFTGAsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGVwZW5kIG9uIGl0LiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiBob3cgdGhpcyBmZWF0dXJlIGludGVncmF0ZXMgd2l0aCB0aGUgd2lkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NDMuODQ0ODU4ODQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTA1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuIDEwODpcXHQgICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbiAxMDk6XFx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NDMuODQ0OTI0MzY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MjkxMTI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIFBNVSBNU1IgVmFsaWRhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDogYEtWTWAgYW5kIGBLVk1fSU5URUxgIChvciBgS1ZNX0FNRGAsIG9mIGNvdXJzZSwgdGhvdWdoIEknbSBndWVzc2luZyB0aGlzIHNwZWNpZmljIHBhdGNoIGxlYW5zIHRvd2FyZHMgSW50ZWwpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEZyb20gdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0OiBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCBgaW50ZWxfaXNfdmFsaWRfbXNyYC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGVudHJ5IHBvaW50cyB0aGF0IGFyZW4ndCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGU6IEkgbmVlZCB0byBjb25zaWRlciBga3ZtX3BtdV9nZXRfbXNyYCwgYGt2bV9wbXVfc2V0X21zcmAsIGBrdm1fc2V0X21zcl9jb21tb25gLCBhbmQgYGt2bV9nZXRfbXNyX2NvbW1vbmAuIFRoZXNlICpjb3VsZCogYmUgYWZmZWN0ZWQsIHRob3VnaCBwZXJoYXBzIGluZGlyZWN0bHkuXG5cbmBrdm1fcG11X2lzX3ZhbGlkX21zcmAgYW5kIGBpbnRlbF9pc192YWxpZF9tc3JgIGFyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbi4gTGV0IG1lIGNoZWNrIGlmIGBpbnRlbF9pc192YWxpZF9tc3JgIGlzIHN0YXRpYyBvciBub3QuIExvb2tpbmcgaW4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zciguLi4pYC4gQWhhISBJdCdzICpzdGF0aWMqIHdpdGhpbiB0aGF0IGZpbGUsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgYXNzaWduZWQgdG8gYC5pc192YWxpZF9tc3JgIHdpdGhpbiB0aGUgYGludGVsX3BtdV9vcHNgIHN0cnVjdHVyZS4gVGhpcyBtYWtlcyBpdCBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gYHZtbGludXhgIG9yIGBrdm0taW50ZWwua29gIHdoaWNoIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGZvciBsYXRlci4gIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhIG5vbi1zdGF0aWMgc3ltYm9sLCBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vcG11LmNgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIG9yIHJlbGF0ZWQgdG8gb3RoZXIgZnVuY3Rpb25zLiBJJ2xsIGNoZWNrIGNhbGxlcnMgYW5kIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHBtdS5jYCBhbmQgYHBtdV9pbnRlbC5jYC4gIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBjYWxsZWQgdmlhIGEgYHN0YXRpY19jYWxsYCBvciBmdW5jdGlvbiBwb2ludGVyLCBhbmQgdGhlIGNvZGUgc2hvd3MgaXQgaXMgY2FsbGVkIGJ5IGBrdm1fcG11X2NhbGwoaXNfdmFsaWRfbXNyKSh2Y3B1LCBtc3IpYCBpbiBga3ZtX3BtdV9pc192YWxpZF9tc3JgLlxuXG5TbywgbGV0J3MgdmVyaWZ5IG15IGtleSBmb2N1cy4gIE15IHByaW1hcnkgc3ltYm9scyBhcmU6IGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgYW5kIGBpbnRlbF9pc192YWxpZF9tc3JgLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGdpdCBkaWZmIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEFoLCBsb29rcyBsaWtlIHRoZSBwYXRjaCAqb25seSogdG91Y2hlczogMS4gYGFyY2gveDg2L2t2bS9wbXUuY2A6ICBga3ZtX3BtdV9pc192YWxpZF9tc3JgIGFuZCAyLiBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2A6IGBpbnRlbF9pc192YWxpZF9tc3JgLlxuXG5UaGVzZSBhcmUgYm90aCBub24tdWJpcXVpdG91cyBzeW1ib2xzLCBzcGVjaWZpYyB0byBLVk0gUE1VIE1TUiBoYW5kbGluZywgd2hpY2ggbWFrZXMgdGhlbSB2ZXJ5IGludGVyZXN0aW5nLlxuXG5Pa2F5LCBxdWljayBmaW5hbCBjaGVjazpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIHZlcnkgbXVjaCB3b3J0aCBmdXJ0aGVyIGluc3BlY3Rpb24uXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJLVk1cIiwgXCJLVk1fSU5URUxcIl1gIC0gQ29ycmVjdCwgdGhlc2UgYXJlIHRoZSByZWxldmFudCBjb25maWdzLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJrdm1fcG11X2lzX3ZhbGlkX21zclwiLCBcImludGVsX2lzX3ZhbGlkX21zclwiXWAgLSBBYnNvbHV0ZWx5LlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogcmVmYWN0b3JpbmcgUE1VIE1TUiB2YWxpZGF0aW9uIGZyb20gdGhlIGNvbW1vbiB4ODYgS1ZNIFBNVSBjb2RlIHRvIEludGVsLXNwZWNpZmljIFBNVSBjb2RlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTQsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NTAuMjc0MDM5MzI2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMzI3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3BtdV9pc192YWxpZF9tc3JcIixcbiAgICBcImludGVsX2lzX3ZhbGlkX21zclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3BtdV9pc192YWxpZF9tc3JcIixcbiAgICBcImludGVsX2lzX3ZhbGlkX21zclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1TUiB2YWxpZGF0aW9uIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gY29tbW9uIHg4NiBLVk0gUE1VIGxvZ2ljIChrdm1fcG11X2lzX3ZhbGlkX21zcikgdG8gSW50ZWwtc3BlY2lmaWMgUE1VIGxvZ2ljIChpbnRlbF9pc192YWxpZF9tc3IpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaGFuZGxpbmcgdkNQVSBNU1IgcmVhZHMvd3JpdGVzIGFuZCBpb2N0bHMgaW4gS1ZNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1MC4zNTMxODAyMjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTA0MzYyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6Mzk6NTAuMzUzNjQyOTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUxMDM4OTY1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZvciBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIE1TUnMgKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgYW5kIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMKSBmcm9tIHRoZSBnZW5lcmljIGt2bV9wbXVfaXNfdmFsaWRfbXNyKCkgZnVuY3Rpb24gaW50byBpbnRlbF9pc192YWxpZF9tc3IoKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByZWZhY3RvcmluZy9jb3JyZWN0bmVzcyBmaXggZm9yIE1TUiB2YWxpZGF0aW9uIGFjcm9zcyBDUFUgdmVuZG9yIGJhY2tlbmRzIChJbnRlbCB2cyBBTUQpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIG1hbmlwdWxhdGUgZGF0YSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA4NjA1NjlmZWY3NDUzN2U0YmRmNDhhMmVkYzVlMTY4NmI3Njk3ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjM4OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXG5pbmRleCBhN2Q2MGM4Nzg1Y2Q0Li5kMmZkNDdlZTVlYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC04MjMsMTQgKzgyMyw2IEBAIHZvaWQga3ZtX3BtdV9kZWxpdmVyX3BtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gYm9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4ge1xuLVx0c3dpdGNoIChtc3IpIHtcbi1cdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuLVx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxuLVx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcbi1cdFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwodmNwdV90b19wbXUodmNwdSkpO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4tXHR9XG4gXHRyZXR1cm4ga3ZtX3BtdV9jYWxsKG1zcl9pZHhfdG9fcG1jKSh2Y3B1LCBtc3IpIHx8XG4gXHQgICAgICAga3ZtX3BtdV9jYWxsKGlzX3ZhbGlkX21zcikodmNwdSwgbXNyKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbmluZGV4IGJmYTg2MTJmYjQ1MDguLjcwYThjNDgxNjEzNTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXG5AQCAtMTg3LDYgKzE4Nyw5IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXG4gXHRpbnQgcmV0O1xuIFxuIFx0c3dpdGNoIChtc3IpIHtcbitcdGNhc2UgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTOlxuK1x0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMOlxuK1x0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDpcbiBcdGNhc2UgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTDpcbiBcdFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1MC4zNTM2NDM5NzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwMDI3OTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBNU1IgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzaGlmdGluZyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIHZhbGlkYXRpbmcgc29tZSBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpIOKAkyBzcGVjaWZpY2FsbHksIGBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVNgLCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTGAsIGFuZCBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxgIOKAkyBmcm9tIHRoZSBnZW5lcmljIGBrdm1fcG11X2lzX3ZhbGlkX21zcmAgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgaW4gYGFyY2gveDg2L2t2bS9wbXUuY2AsIHRvIGEgbW9yZSBJbnRlbC1zcGVjaWZpYyBmdW5jdGlvbiwgYGludGVsX2lzX3ZhbGlkX21zcmAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNgLiBTbywgaXQncyBhIGNvZGUgcmVvcmdhbml6YXRpb24sIGxpa2VseSB0byBjb25zb2xpZGF0ZSBJbnRlbC1zcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGxvZ2ljLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCBpcyBoYXBwZW5pbmcuIElzIGl0IGZvciBwZXJmb3JtYW5jZT8gSXMgaXQgdG8gYWxsb3cgZm9yIG1vcmUgZ3JhbnVsYXIgSW50ZWwtc3BlY2lmaWMgY2hlY2tzPyBBcmUgdGhlcmUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBpbiB0aGUgVk1YIGltcGxlbWVudGF0aW9uIHRoYXQgbmVjZXNzaXRhdGUgdGhpcz8gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgZGlmZiBvciBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciByZWxhdGVkIGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBNU1JzIGFyZSBiZWluZyB1c2VkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZSwgYW5kIHdoYXQgZHJvdmUgdGhlIGRldmVsb3BlcnMgdG8gbWFrZSB0aGlzIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgcmVmYWN0b3JpbmcgZm9yIGNsYXJpdHksIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCByZWFzb24gYmVoaW5kIHRoaXMgbW92ZT8gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTQsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjozOTo1OS45NTM5MjYwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3Mzg1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9wbXVfaXNfdmFsaWRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3NTQtXFx0Y2FzZSBNU1JfUDZfRVZOVFNFTDAgLi4uIE1TUl9QNl9FVk5UU0VMMTpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE3NTU6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcikpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xNzU2LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X3NldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy0xODM5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxODQwOlxcdFxcdGlmIChrdm1fcG11X2lzX3ZhbGlkX21zcih2Y3B1LCBtc3IpKVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTg0MS1cXHRcXHRcXHRyZXR1cm4ga3ZtX3BtdV9zZXRfbXNyKHZjcHUsIG1zcl9pbmZvKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTg5OT1pbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTkzNi1cXHRjYXNlIE1TUl9QNl9FVk5UU0VMMCAuLi4gTVNSX1A2X0VWTlRTRUwxOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTkzNzpcXHRcXHRpZiAoa3ZtX3BtdV9pc192YWxpZF9tc3IodmNwdSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE5MzgtXFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfZ2V0X21zcih2Y3B1LCBtc3JfaW5mbyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTIxOTItXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjIxOTM6XFx0XFx0aWYgKGt2bV9wbXVfaXNfdmFsaWRfbXNyKHZjcHUsIG1zcl9pbmZvLVxcdTAwM2VpbmRleCkpXFxuYXJjaC94ODYva3ZtL21zcnMuYy0yMTk0LVxcdFxcdFxcdHJldHVybiBrdm1fcG11X2dldF9tc3IodmNwdSwgbXNyX2luZm8pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTgxNj12b2lkIGt2bV9wbXVfZGVsaXZlcl9wbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTgyMy1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6ODI0OmJvb2wga3ZtX3BtdV9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9wbXUuYy04MjUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5oPTI3Nj1pbnQga3ZtX3BtdV9jaGVja19yZHBtY19lYXJseShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpZHgpO1xcbmFyY2gveDg2L2t2bS9wbXUuaDoyNzc6Ym9vbCBrdm1fcG11X2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpO1xcbmFyY2gveDg2L2t2bS9wbXUuaC0yNzgtaW50IGt2bV9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjo0MDowMC4xNzEzMzQ0NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludGVsX2lzX3ZhbGlkX21zclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0xNjU9c3RhdGljIGJvb2wgaW50ZWxfcG11X2lzX3ZhbGlkX2xicl9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjE4MzpzdGF0aWMgYm9vbCBpbnRlbF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtMTg0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODM3PXN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgzOS1cXHQubXNyX2lkeF90b19wbWMgPSBpbnRlbF9tc3JfaWR4X3RvX3BtYyxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjg0MDpcXHQuaXNfdmFsaWRfbXNyID0gaW50ZWxfaXNfdmFsaWRfbXNyLFxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODQxLVxcdC5nZXRfbXNyID0gaW50ZWxfcG11X2dldF9tc3IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjAwLjIxNjY4MzY5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwMDM4MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIEFNRCdzIFBNVSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgYW5kIHRoZSBjdXJyZW50IGNvZGUgYmFzZSBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggdGhlIGludHJpY2FjaWVzIG9mIGl0LiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODYgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGdsYW5jZSBhdCBgYXJjaC94ODYva3ZtL3N2bS9wbXUuY2AuIFRoaXMgaXMgd2hlcmUgQU1EJ3MgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBpbXBsZW1lbnRhdGlvbiB1c3VhbGx5IGhhbmRsZXMgaXRzIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBTUQncyBwcm9jZXNzb3JzIGRlYWwgd2l0aCB0aGlzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBLVk0gY29udGV4dC4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSBpZiBBTUQgaGFzIGFueSBkaXN0aW5jdCBsb2dpYyBvciBoYW5kbGluZyBmb3IgdGhlIFBNVSB0aGF0IGRpdmVyZ2VzIGZyb20gdGhlIG1vcmUgZ2VuZXJhbCB4ODYgaW1wbGVtZW50YXRpb24uIEFyZSB0aGVyZSBhbnkgdW5pcXVlIGhvb2tzLCByZWdpc3RlcnMsIG9yIGNvbnRyb2wgZmxvd3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uc3RyYWludHMgb24gaG93IEFNRCdzIFBNVSB3b3JrcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGF0IHRoZSBnZW5lcmljIGNvZGUgbWF5IG5vdCBhY2NvdW50IGZvcj8gRXNzZW50aWFsbHksIEkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgQU1ELXNwZWNpZmljIGNvZGUsIGxvb2tpbmcgZm9yIGVpdGhlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IHBpdGZhbGxzLiBHcmFiYmluZyB0aGlzIGNvZGUgYW5kIHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDQuMTE2NzI0NTk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY4NDgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc192YWxpZF9tc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jPTkzPXN0YXRpYyBzdHJ1Y3Qga3ZtX3BtYyAqYW1kX21zcl9pZHhfdG9fcG1jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTAzLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MTA0OnN0YXRpYyBib29sIGFtZF9pc192YWxpZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyKVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMTA1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMDctXFx0LmNoZWNrX3JkcG1jX2Vhcmx5ID0gYW1kX2NoZWNrX3JkcG1jX2Vhcmx5LFxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MzA4OlxcdC5pc192YWxpZF9tc3IgPSBhbWRfaXNfdmFsaWRfbXNyLFxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmMtMzA5LVxcdC5nZXRfbXNyID0gYW1kX3BtdV9nZXRfbXNyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjo0MDowNC4xNTk0MTMwMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyOTc5NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEludGVsIFBNVSBNU1IgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW50ZWxfaXNfdmFsaWRfbXNyYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEtWTS9WTVggY29udGV4dC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTgwLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgb3IgYXQgbGVhc3QgYSByZWxldmFudCBkYXRhIHN0cnVjdHVyZSBvciBjb25zdGFudCBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHRoZSB2YWxpZGl0eSBvZiBhIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVyIChNU1IpLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCwgYW5kIGEgZmVlbCBmb3IgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLiBJIHdpbGwgbGlrZWx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBNU1IsIHN1Y2ggYXMgdGhlIGFyY2hpdGVjdHVyZSB0eXBlLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGxvb2sgdXAgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTU4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDYuMzg5MjEwNTY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MTpcXHR9XFxuIDE4MjpcXHRcXG4gMTgzOlxcdHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDE4NjpcXHRcXHR1NjQgcGVyZl9jYXBhYmlsaXRpZXM7XFxuIDE4NzpcXHRcXHRpbnQgcmV0O1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRzd2l0Y2ggKG1zcikge1xcbiAxOTA6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVM6XFxuIDE5MTpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkw6XFxuIDE5MjpcXHRcXHRjYXNlIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMOlxcbiAxOTM6XFx0XFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KTtcXG4gMTk1OlxcdFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIDE5NjpcXHRcXHRcXHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUO1xcbiAxOTc6XFx0XFx0XFx0YnJlYWs7XFxuIDE5ODpcXHRcXHRjYXNlIE1TUl9JQTMyX0RTX0FSRUE6XFxuIDE5OTpcXHRcXHRcXHRyZXQgPSBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9EUyk7XFxuIDIwMDpcXHRcXHRcXHRicmVhaztcXG4gMjAxOlxcdFxcdGNhc2UgTVNSX1BFQlNfREFUQV9DRkc6XFxuIDIwMjpcXHRcXHRcXHRwZXJmX2NhcGFiaWxpdGllcyA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpO1xcbiAyMDM6XFx0XFx0XFx0cmV0ID0gKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkgXFx1MDAyNlxcdTAwMjZcXG4gMjA0OlxcdFxcdFxcdFxcdCgocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkgXFx1MDAzZSAzKTtcXG4gMjA1OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMjA3OlxcdFxcdFxcdHJldCA9IGdldF9ncF9wbWMocG11LCBtc3IsIE1TUl9JQTMyX1BFUkZDVFIwKSB8fFxcbiAyMDg6XFx0XFx0XFx0XFx0Z2V0X2dwX3BtYyhwbXUsIG1zciwgTVNSX1A2X0VWTlRTRUwwKSB8fFxcbiAyMDk6XFx0XFx0XFx0XFx0Z2V0X2ZpeGVkX3BtYyhwbXUsIG1zcikgfHwgZ2V0X2Z3X2dwX3BtYyhwbXUsIG1zcikgfHxcXG4gMjEwOlxcdFxcdFxcdFxcdGludGVsX3BtdV9pc192YWxpZF9sYnJfbXNyKHZjcHUsIG1zcik7XFxuIDIxMTpcXHRcXHRcXHRicmVhaztcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIHN0cnVjdCBrdm1fcG1jICppbnRlbF9tc3JfaWR4X3RvX3BtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjA2LjM4OTMwMzgyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYwMTcxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBBTUQgTVNSIFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IE1TUiB2YWxpZGF0aW9uIGluIHRoZSBLVk0vU1ZNIGNvbnRleHQuIEl0J3MgdGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGFtZF9pc192YWxpZF9tc3JgIGZ1bmN0aW9uLiBUaGlzIGZlZWxzIGxpa2UgYSBnb29kIHNwb3QgdG8gY2hlY2sgdGhlIGxvZ2ljLCBjb25zaWRlcmluZyB3ZSdyZSBkZWFsaW5nIHdpdGggQU1ELXNwZWNpZmljIGJlaGF2aW9yLCBhbmQgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZnRlbiBpbnRlcmFjdHMgd2l0aCBNU1JzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyBLVk0gZGV0ZXJtaW5lcyB3aGljaCBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgYXJlIGFjY2VwdGFibGUgZm9yIGd1ZXN0IGFjY2VzcywgcGFydGljdWxhcmx5IG9uIGFuIEFNRCBzeXN0ZW0uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YWxpZGF0aW9uIGNyaXRlcmlhLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcz8gQXJlIHRoZXJlIHNwZWNpZmljIHJhbmdlcyBvciBiaXRmaWVsZCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzY3J1dGluaXplZD8gSXMgdGhlcmUgYW55IGludGVyYWN0aW9uIHdpdGggb3RoZXIgQU1ELXNwZWNpZmljIGZlYXR1cmVzIG9yIGVycmF0YSBpbiB0aGUgY29kZT8gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6NDA6MDkuMzQ5NDc3MTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vcG11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0cmV0dXJuIHBtYztcXG4gMTAyOlxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGJvb2wgYW1kX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpXFxuIDEwNTpcXHR7XFxuIDEwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdHN3aXRjaCAobXNyKSB7XFxuIDEwOTpcXHRcXHRjYXNlIE1TUl9LN19FVk5UU0VMMCAuLi4gTVNSX0s3X1BFUkZDVFIzOlxcbiAxMTA6XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDA7XFxuIDExMTpcXHRcXHRjYXNlIE1TUl9GMTVIX1BFUkZfQ1RMMCAuLi4gTVNSX0YxNUhfUEVSRl9DVFI1OlxcbiAxMTI6XFx0XFx0XFx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX1BFUkZDVFJfQ09SRSk7XFxuIDExMzpcXHRcXHRjYXNlIE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMX1NUQVRVUzpcXG4gMTE0OlxcdFxcdGNhc2UgTVNSX0FNRDY0X1BFUkZfQ05UUl9HTE9CQUxfQ1RMOlxcbiAxMTU6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVNfQ0xSOlxcbiAxMTY6XFx0XFx0Y2FzZSBNU1JfQU1ENjRfUEVSRl9DTlRSX0dMT0JBTF9TVEFUVVNfU0VUOlxcbiAxMTc6XFx0XFx0XFx0cmV0dXJuIHBtdS1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDE7XFxuIDExODpcXHRcXHRkZWZhdWx0OlxcbiAxMTk6XFx0XFx0XFx0aWYgKG1zciBcXHUwMDNlIE1TUl9GMTVIX1BFUkZfQ1RSNSBcXHUwMDI2XFx1MDAyNlxcbiAxMjA6XFx0XFx0XFx0ICAgIG1zciBcXHUwMDNjIE1TUl9GMTVIX1BFUkZfQ1RMMCArIDIgKiBwbXUtXFx1MDAzZW5yX2FyY2hfZ3BfY291bnRlcnMpXFxuIDEyMTpcXHRcXHRcXHRcXHRyZXR1cm4gcG11LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMTtcXG4gMTIyOlxcdFxcdFxcdGJyZWFrO1xcbiAxMjM6XFx0XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRyZXR1cm4gYW1kX21zcl9pZHhfdG9fcG1jKHZjcHUsIG1zcik7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdHN0YXRpYyBpbnQgYW1kX3BtdV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4gMTI5OlxcdHtcXG4gMTMwOlxcdFxcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG4gMTMxOlxcdFxcdHN0cnVjdCBrdm1fcG1jICpwbWM7XFxuIDEzMjpcXHRcXHR1MzIgbXNyID0gbXNyX2luZm8tXFx1MDAzZWluZGV4O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBNU1JfUEVSRkNUUm4gKi9cXG4gMTM1OlxcdFxcdHBtYyA9IGdldF9ncF9wbWNfYW1kKHBtdSwgbXNyLCBQTVVfVFlQRV9DT1VOVEVSKTtcXG4gMTM2OlxcdFxcdGlmIChwbWMpIHtcXG4gMTM3OlxcdFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG1jX3JlYWRfY291bnRlcihwbWMpO1xcbiAxMzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjA5LjM0OTU0MjEwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTA3OTc4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUE1VIE1TUiBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIE1TUiAoTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXIpIHZhbGlkYXRpb24gd2l0aGluIHRoZSBLVk0gUE1VIChQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEludGVsIGFuZCBBTUQgcGxhdGZvcm1zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgcmVsb2NhdGluZyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIEludGVsLXNwZWNpZmljIENvcmUgUE1VIE1TUnMsIHNwZWNpZmljYWxseSBgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTYCwgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkxgLCBhbmQgYE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMYC4gUHJldmlvdXNseSwgYGt2bV9wbXVfaXNfdmFsaWRfbXNyYCBoYW5kbGVkIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IGNhbGxlZCBpbnRvIHZlbmRvci1zcGVjaWZpYyBjYWxsYmFja3MgdmlhIGBrdm1fcG11X2NhbGxgLCBhbmQgdGhlc2UgTVNScyBhcmUgKm9ubHkqIHZhbGlkIG9uIEludGVsLiBPbiBBTUQsIHRoZXNlIE1TUnMgYXJlIG1lYW5pbmdsZXNzOyB0aGV5IGhhdmUgdGhlaXIgb3duIHNldCAoYE1TUl9BTUQ2NF9QRVJGX0NOVFJfR0xPQkFMXypgKS4gQnkgbW92aW5nIHRoZXNlIGNoZWNrcyBpbnRvIGBpbnRlbF9pc192YWxpZF9tc3JgLCB3ZSdyZSBwcmV2ZW50aW5nIEFNRCBndWVzdHMgZnJvbSBpbmNvcnJlY3RseSBpZGVudGlmeWluZyB0aGVzZSBJbnRlbC1zcGVjaWZpYyBNU1JzIGFzIHZhbGlkIGFuZCBhdHRlbXB0aW5nIHRvIHVzZSB0aGVtLCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cblxuTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggbXkgc3RhbmRhcmQgY2hlY2tsaXN0IHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpbiByZWdhcmRzIHRvIEtBU0FOL0tNU0FOLlxuXG4qICAgKipLZXJuZWwgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIFRoaXMgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0J3MgZ29vZC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgVXNhZ2U6KiogVGhlcmUncyBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbiB0aGUgY29yZSBsb2dpYy4gVGhlIHBhdGNoIG9wZXJhdGVzIG9uIHRoZSBgbXNyYCB3aGljaCBpcyBwYXNzZWQgYnkgdmFsdWUgKGFuZCB0aGVyZWZvcmUgbXVzdCBiZSB2YWxpZCkuXG4qICAgKipEYXRhIFN0cnVjdHVyZSBBbGxvY2F0aW9uOioqIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IG1pZ2h0IGJlIHN1c2NlcHRpYmxlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuKiAgICoqQnVmZmVyIE92ZXJmbG93L01lbW9yeSBSZWFkczoqKiBJIHNlZSBubyBpbnZvbHZlbWVudCB3aXRoIGJ1ZmZlcnMgb3IgZGlyZWN0IG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggcmVvcmdhbml6aW5nIE1TUiBkaXNwYXRjaC5cblxuR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCBJJ20gY29uZmlkZW50IGluIGFzc2Vzc2luZyB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLlxuXG4qICAgKipLQVNBTjoqKiBUaGlzIGNoYW5nZSBhbHRlcnMgTVNSIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1heSBhZmZlY3QgaG93IEtBU0FOIGRldGVjdHMvZG9lcyBub3QgZGV0ZWN0IGFuIGVycm9yLCBidXQgZG9lcyBub3QgaW50cm9kdWNlIG9uZSBpdHNlbGYuXG4qICAgKipLTVNBTjoqKiBJIGRvbid0IHNlZSBhbnkgcmlzayBvZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBgZmFsc2VgIGhlcmUuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIHRhcmdldGVkIGZpeCB0aGF0IHNob3VsZCBpbXByb3ZlIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBLVk0gUE1VIG9uIEFNRCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQwLCJPdXRwdXRUb2tlbnMiOjE4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjQwOjE1LjQ1NzUyMzE0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2sgZm9yIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgTVNScyAoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBhbmQgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gdGhlIGdlbmVyaWMga3ZtX3BtdV9pc192YWxpZF9tc3IoKSBmdW5jdGlvbiBpbnRvIGludGVsX2lzX3ZhbGlkX21zcigpLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2sgZm9yIEludGVsLXNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgTVNScyAoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBhbmQgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwpIGZyb20gdGhlIGdlbmVyaWMga3ZtX3BtdV9pc192YWxpZF9tc3IoKSBmdW5jdGlvbiBpbnRvIGludGVsX2lzX3ZhbGlkX21zcigpLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nL2NvcnJlY3RuZXNzIGZpeCBmb3IgTVNSIHZhbGlkYXRpb24gYWNyb3NzIENQVSB2ZW5kb3IgYmFja2VuZHMgKEludGVsIHZzIEFNRCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgbWFuaXB1bGF0ZSBkYXRhIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcmVhZCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsshnz[1] Phase: Succeeded StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 16:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 16:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2] Phase: Succeeded StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 16:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 16:40:26 +0000 UTC FinishedAt: 2026-09-03 16:40:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowsshnz/series-workflowsshnz-convert-artifact-3013089219/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 16:40:37 +0000 UTC FinishedAt: 2026-09-03 17:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 16:40:37 +0000 UTC FinishedAt: 2026-09-03 17:00:44 +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:*56a5008a-8b2a-4856-908d-608188808319,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-workflowsshnz/series-workflowsshnz-convert-artifact-3013089219/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": "db9bf6f0-fdd5-4bf3-9126-ce8cab3a40d4", "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-workflowsshnz/series-workflowsshnz-build-action-3773534769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 16:40:37 +0000 UTC FinishedAt: 2026-09-03 17:00:34 +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:*56a5008a-8b2a-4856-908d-608188808319,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-workflowsshnz/series-workflowsshnz-convert-artifact-3013089219/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": "db9bf6f0-fdd5-4bf3-9126-ce8cab3a40d4", "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-workflowsshnz/series-workflowsshnz-build-action-3773534769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 17:00:44 +0000 UTC FinishedAt: 2026-09-03 17:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 17:00:44 +0000 UTC FinishedAt: 2026-09-03 17:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 17:00:44 +0000 UTC FinishedAt: 2026-09-03 17:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 17:00:44 +0000 UTC FinishedAt: 2026-09-03 17:00:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowsshnz/series-workflowsshnz-convert-artifact-2122406778/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 17:00:54 +0000 UTC FinishedAt: 2026-09-03 17:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 17:00:54 +0000 UTC FinishedAt: 2026-09-03 17:02:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*db9bf6f0-fdd5-4bf3-9126-ce8cab3a40d4,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-workflowsshnz/series-workflowsshnz-build-action-3773534769/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-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 17:02:51 +0000 UTC FinishedAt: 2026-09-03 17:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 17:02:51 +0000 UTC FinishedAt: 2026-09-03 17:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 17:02:51 +0000 UTC FinishedAt: 2026-09-03 17:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 17:02:51 +0000 UTC FinishedAt: 2026-09-03 17:19:18 +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:*56a5008a-8b2a-4856-908d-608188808319,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-workflowsshnz/series-workflowsshnz-convert-artifact-2122406778/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": "6bfa94a1-d57b-411b-9a8e-2d9f11c22d45", "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-workflowsshnz/series-workflowsshnz-build-action-1088158430/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 17:02:51 +0000 UTC FinishedAt: 2026-09-03 17:19:08 +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:*56a5008a-8b2a-4856-908d-608188808319,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-workflowsshnz/series-workflowsshnz-convert-artifact-2122406778/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": "6bfa94a1-d57b-411b-9a8e-2d9f11c22d45", "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-workflowsshnz/series-workflowsshnz-build-action-1088158430/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 17:19:18 +0000 UTC FinishedAt: 2026-09-03 17:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 17:19:18 +0000 UTC FinishedAt: 2026-09-03 17:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 17:19:18 +0000 UTC FinishedAt: 2026-09-03 17:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 17:19:18 +0000 UTC FinishedAt: 2026-09-03 17:21:00 +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:*6bfa94a1-d57b-411b-9a8e-2d9f11c22d45,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-workflowsshnz/series-workflowsshnz-build-action-1088158430/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-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"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:*db9bf6f0-fdd5-4bf3-9126-ce8cab3a40d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6bfa94a1-d57b-411b-9a8e-2d9f11c22d45,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-workflowsshnz/series-workflowsshnz-build-action-3773534769/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-workflowsshnz/series-workflowsshnz-build-action-1088158430/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 17:21:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 17:21:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"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-workflowsshnz/series-workflowsshnz-convert-artifact-1295525551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 17:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 17:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 17:21:10 +0000 UTC FinishedAt: 2026-09-03 17:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 17:21:20 +0000 UTC FinishedAt: 2026-09-03 20:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsshnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_is_valid_msr","intel_is_valid_msr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b1b8ca04-d945-48c9-a072-06000cd40904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 17:21:20 +0000 UTC FinishedAt: 2026-09-03 20:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*db9bf6f0-fdd5-4bf3-9126-ce8cab3a40d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6bfa94a1-d57b-411b-9a8e-2d9f11c22d45,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-workflowsshnz/series-workflowsshnz-build-action-3773534769/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-workflowsshnz/series-workflowsshnz-build-action-1088158430/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-workflowsshnz/series-workflowsshnz-convert-artifact-1295525551/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,}