Name: series-workflowmd4sv Phase: Succeeded StartedAt: 2026-08-31 18:05:29 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[0] Phase: Succeeded StartedAt: 2026-08-31 18:05:29 +0000 UTC FinishedAt: 2026-08-31 18:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 18:05:29 +0000 UTC FinishedAt: 2026-08-31 18:49:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "f9fc9487-e36e-49ff-8d15-3fce4a3704e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_ibss_leave", "ieee80211_ibss_join", "ieee80211_leave_ibss" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2lic3Nfam9pbiYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbGVhdmVfaWJzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5pbmRleCA2ZTM2YjA5ZmU5N2Y4Li42Y2EyZmYzNTRlNzY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lic3MuY1xuQEAgLTY3NSw3ICYjNDM7Njc1LDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcbiBcdGlmaWJzcy1cdTAwM2VzdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIO1xuIFxuLVx0c3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTtcbiYjNDM7XHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSlcbiYjNDM7XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuQEAgLTY4OSw4ICYjNDM7NjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbi1cbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xuQEAgLTcxNyw3ICYjNDM7NzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gXG4gXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cbkBAIC0xODIzLDggJiM0MzsxODIyLDYgQEAgaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVx1MDAzZWh0X2NhcGEpKTtcbiBcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaykpO1xuIFxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4tXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbiBcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcy50aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfaWJzc19sZWF2ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaWJzc19qb2luJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9sZWF2ZV9pYnNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggNmUzNmIwOWZlOTdmOC4uNmNhMmZmMzU0ZTc2OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC02NzUsNyAmIzQzOzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAKIAlpZmlic3MtJmd0O3N0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CiAKLQlzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKQomIzQzOwkJc3luY2hyb25pemVfbmV0KCk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtpZmlic3MtJmd0O2luY29tcGxldGVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7aWZpYnNzLSZndDtpbmNvbXBsZXRlX3N0YXRpb25zKSkgewpAQCAtNjg5LDggJiM0Mzs2OTEsNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO2lmaWJzcy0mZ3Q7aW5jb21wbGV0ZV9sb2NrKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLSZndDtkZXYpOwotCiAJc2RhdGEtJmd0O3ZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTsKIAlzZGF0YS0mZ3Q7dmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTsKIAlzZGF0YS0mZ3Q7dmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKQEAgLTcxNyw3ICYjNDM7NzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTsKIAogCWllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc2RhdGEpOwotCXN5bmNocm9uaXplX3JjdSgpOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUpOwogCiAJLyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovCkBAIC0xODIzLDggJiM0MzsxODIyLDYgQEAgaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCW1lbXNldCgmYW1wO2lmaWJzcy0mZ3Q7aHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy0mZ3Q7aHRfY2FwYSkpOwogCW1lbXNldCgmYW1wO2lmaWJzcy0mZ3Q7aHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLSZndDtodF9jYXBhX21hc2spKTsKIAotCXN5bmNocm9uaXplX3JjdSgpOwotCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7c2RhdGEtJmd0O3NrYl9xdWV1ZSk7CiAKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3NkYXRhLSZndDt1Lmlic3MudGltZXIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElCU1MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIGFuZCB0aGUgYWNjb21wYW55aW5nIHRvb2xzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZGlmZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gRGlzY29ubmVjdGlvbnMsIENTQSAoQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50KSBoYW5kbGluZywgYW5kIGxlYXZpbmcgSUJTUyBuZXR3b3JrcyBhcmUgdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQgaGVyZS4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGluIHBsYXkuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGFsc28gYmUgdXNpbmcgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgaW1wb3J0YW50IGtleXdvcmRzIGFuZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUgYXMgbmVjZXNzYXJ5IHRvIHNwZWVkIHVwIG15IGFuYWx5c2lzLiBBbmQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgIHRvIHNlZSB3aGF0IGNvbXBpbGUtdGltZSBvcHRpb25zIGFmZmVjdCB0aGVzZSBJQlNTIGZ1bmN0aW9uYWxpdGllcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlYnNzaWQsIGlmaWJzcy1cdTAwM2Vzc2lkLFxuIDY2NjpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4sXG4gNjY3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxuIDY2ODpcdFx0XHRcdFx0XHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXHUwMDNlcHJpdmFjeSkpO1xuIDY2OTpcdFxuIDY3MDpcdFx0XHRpZiAoY2Jzcykge1xuIDY3MTpcdFx0XHRcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MjpcdFx0XHRcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MzpcdFx0XHR9XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiA2Nzc6XHRcbiA2Nzg6XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4gNjc5Olx0XHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXG4gNjgwOlx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDY4MTpcdFxuIDY4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY4MzpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuIDY4NDpcdFx0XHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zLFxuIDY4NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7XG4gNjg2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnN0YS1cdTAwM2VsaXN0KTtcbiA2ODc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIHN0YSk7XG4gNjkwOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiA2OTE6XHRcdH1cbiA2OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY5MzpcdFxuIDY5NDpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xuIDY5NTpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTtcbiA2OTY6XHRcdHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XG4gNjk3Olx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcbiA2OTg6XHRcbiA2OTk6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbiA3MDA6XHRcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVx1MDAzZXByZXNwLCBzZGF0YSk7XG4gNzAxOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVx1MDAzZXUuaWJzcy5wcmVzcCwgTlVMTCk7XG4gNzAyOlx0XHRpZiAocHJlc3ApXG4gNzAzOlx0XHRcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0Y2xlYXJfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUxfQkVBQ09OX1NUT1BQRUQsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKTtcbiA3MDY6XHRcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XG4gNzA3Olx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfSUJTUyk7XG4gNzA4Olx0XHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xuIDcwOTpcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDcxMDpcdH1cbiA3MTE6XHRcbiA3MTI6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gNzEzOlx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiA3MTQ6XHR7XG4gNzE1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG4gNzE2Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxuIDcxNzpcdFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gNzE4Olx0XG4gNzE5Olx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbiA3MjA6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIDcyMTpcdFxuIDcyMjpcdFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXG4gNzIzOlx0XHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gNzI3Olx0e1xuIDcyODpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4gNzI5Olx0XHRpbnQgZXJyO1xuIDczMDpcdFxuIDczMTpcdFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXG4gNzMyOlx0XHQgKiB1bmF2YWlsYWJsZS5cbiA3MzM6XHRcdCAqL1xuIDczNDpcdFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWJzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcztcbjE4MTE6XHRcbjE4MTI6XHRcdGlmaWJzcy1cdTAwM2Vzc2lkX2xlbiA9IDA7XG4xODEzOlx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbjE4MTQ6XHRcdGV0aF96ZXJvX2FkZHIoaWZpYnNzLVx1MDAzZWJzc2lkKTtcbjE4MTU6XHRcbjE4MTY6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbjE4MTc6XHRcdGtmcmVlKHNkYXRhLVx1MDAzZXUuaWJzcy5pZSk7XG4xODE4Olx0XHRzZGF0YS1cdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xuMTgxOTpcdFx0c2RhdGEtXHUwMDNldS5pYnNzLmllX2xlbiA9IDA7XG4xODIwOlx0XG4xODIxOlx0XHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cbjE4MjI6XHRcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhKSk7XG4xODIzOlx0XHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2spKTtcbjE4MjQ6XHRcbjE4MjU6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuMTgyNjpcdFxuMTgyNzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5pYnNzLnRpbWVyKTtcbjE4Mjg6XHRcbjE4Mjk6XHRcdHJldHVybiAwO1xuMTgzMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg2CgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNQUM4MDIxMSBhbmQgaXRzIENsZWFudXAgUm91dGluZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgYXJlIGN1cnJlbnRseSBjb25maWd1cmVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBsaW5rZWQuCgpOZXh0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGNsZWFudXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYSBzdGF0aW9uIGlzIGJlaW5nIGZsdXNoZWQgb3Igd2hlbiBhbiBJQlNTIGlzIGxlYXZpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYWN0aW9ucyBhcmUgdHJpZ2dlcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGBncmVwYCBmb3IgYHN0YV9pbmZvX2ZsdXNoYCBhbmQgdGhlbiB0cmFjayBkb3duIGFsbCBvZiBpdHMgY2FsbGVycy4gU2ltaWxhcmx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIGNhbGxzIGFyZSBtYWRlIHRvIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgb3IgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgbGFzdGx5IEkmIzM5O2xsIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCBiZWNhdXNlLCB3ZWxsLCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIHNpbXVsYXRpb24gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgY2xlYW51cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUgYXJlIHVzZWQsIGFuZCBob3cgdGhleSByZWxhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTMxMDQ9c3RhdGljIGludCBpZWVlODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L21hYzgwMjExL2NmZy5jLTMxMDUte1xubmV0L21hYzgwMjExL2NmZy5jOjMxMDY6XHRyZXR1cm4gaWVlZTgwMjExX2lic3NfbGVhdmUoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMzEwNy19XG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xNzA3PWludCBpZWVlODAyMTFfaWJzc19qb2luKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTgwNy1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTgwODppbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDkte1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE5ODA9aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xOTgxLVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE5ODI6aW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE5ODMtdm9pZCBpZWVlODAyMTFfaWJzc193b3JrKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBtYWM4MDIxMSBJQlNTIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYCByZWxhdGVkIHRvIElCU1MgY29ubmVjdGlvbnMuIFNwZWNpZmljYWxseSwgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3QoKWAgaGFzIGhhZCBgbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtJmd0O2RldilgIG1vdmVkLCBhIGNvbmRpdGlvbmFsIGBzeW5jaHJvbml6ZV9uZXQoKWAgYWRkZWQsIGFuZCBgc3RhX2luZm9fZmx1c2goKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgdmFsdWUuIEFsc28sIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2FzIHJlbW92ZWQgZnJvbSBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yaygpYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlKClgLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIG5sODAyMTEgSUJTUyBjb21tYW5kcywgYW5kIHRoZSB1c2Ugb2YgbWFjODAyMTFfaHdzaW0gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIFRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgYWZmZWN0aW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbmV0d29yayBkZXZpY2Ugc3RhdGUgd2l0aGluIElCU1MsIHdoaWNoIGlzIGEga25vd24gaG90YmVkIGZvciB0cmlja3kgcmFjZSBjb25kaXRpb25zLCBVQUZzLCBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gR2V0dGluZyBgbmV0aWZfY2Fycmllcl9vZmZgIGNhbGxlZCBlYXJsaWVyIGFuZCB0aGUgY29uZGl0aW9uYWwgYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGxpa2VseSBhcm91bmQgaG93IHRoaW5ncyBhcmUgdG9ybiBkb3duLiBUaGUgcmVtb3ZhbCBvZiBgc3luY2hyb25pemVfcmN1KClgIGlzIGFsc28gaW50ZXJlc3RpbmcsIGFuZCBpcyBsaWtlbHkgYSBnb29kIHBsYWNlIHRvIGxvb2sgYXQgcG90ZW50aWFsIHJhY2VzLgoKTm93LCBsZXQmIzM5O3MgcGluIGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uLiBXZSBoYXZlIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgIChpbiBjZmcuYykgd2hpY2ggY2FsbHMgYGllZWU4MDIxMV9pYnNzX2xlYXZlYC4gQWxzbywgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGZyb20gb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgTUFDODAyMTFgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgYSBjcnVjaWFsIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0NNQUNcbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUFDODAyMTFfSEFTX1JDXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG4gIDI1Olx0XHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuICAyNjpcdFx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xuICAyNzpcdFx0ZGVmYXVsdCB5XG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlICYjMzk7bWluc3RyZWwmIzM5OyBUWCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBDRkc4MDIxMSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHRpZWQgdG8gYENGRzgwMjExYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSB3aXJlbGVzcyBkcml2ZXIgYW5kIGZlYXR1cmUgY29uZmlndXJhdGlvbiBsaXZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYnVuY2ggb2YgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgcG9pbnRpbmcgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBgQ0ZHODAyMTFgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgbGFuZHNjYXBlIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoYXQgY29yZSB3aXJlbGVzcyBjb21wb25lbnQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGRlcGVuZGVuY2llcywgYnV0IEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTUFDODAyMTEgSFdTSU0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgYE1BQzgwMjExX0hXU0lNYCBmZWF0dXJlLiBNeSB1c3VhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHNob3VsZCBiZSBkZWZpbmVkLCBpbmNsdWRpbmcsIGNyaXRpY2FsbHksIHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBgTUFDODAyMTFfSFdTSU1gIG9wdGlvbiB3aWxsIGxpdmUgYW5kIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBiZWRyb2NrIGJlZm9yZSBJIGNhbiB0aGluayBhYm91dCB1c2luZywgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGlic3MuY2AgQ29tcGlsYXRpb24gaW4gYG5ldC9tYWM4MDIxMS9NYWtlZmlsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWJzcy5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5IGlzIGJlaW5nIGNvbXBpbGVkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiBhbmQgdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIHJ1bGVzLCBmbGFncywgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBpYnNzLmNgLiBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG9iamVjdCBmaWxlLCBvciBjb21waWxlZCBkaXJlY3RseT8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhdCBwbGF5IGhlcmUgYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBvdGhlciB2YXJpYWJsZXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29tbWFuZHMgYXJlIHJ1biB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGUgKGUuZy4sIGAub2ApIGFuZCBob3cgdGhhdCBvYmplY3QgaXMgdGhlbiBsaW5rZWQgaW50byB0aGUgYnJvYWRlciBgbWFjODAyMTFgIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGJ1aWxkIHN0cnVjdHVyZSBhbmQgcG90ZW50aWFsbHkgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgY29tcGlsYXRpb24gaXNzdWVzIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG4gICAzOlx0XG4gICA0Olx0IyBtYWM4MDIxMSBvYmplY3RzXG4gICA1Olx0bWFjODAyMTEteSA6PSBcXFxuICAgNjpcdFx0bWFpbi5vIHN0YXR1cy5vIFxcXG4gICA3Olx0XHRkcml2ZXItb3BzLm8gXFxcbiAgIDg6XHRcdHN0YV9pbmZvLm8gXFxcbiAgIDk6XHRcdHdlcC5vIFxcXG4gIDEwOlx0XHRhZWFkX2FwaS5vIFxcXG4gIDExOlx0XHR3cGEubyBcXFxuICAxMjpcdFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxuICAxMzpcdFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxuICAxNDpcdFx0dmh0Lm8gXFxcbiAgMTU6XHRcdGhlLm8gXFxcbiAgMTY6XHRcdHMxZy5vIFxcXG4gIDE3Olx0XHRpYnNzLm8gXFxcbiAgMTg6XHRcdGlmYWNlLm8gXFxcbiAgMTk6XHRcdGxpbmsubyBcXFxuICAyMDpcdFx0cmF0ZS5vIFxcXG4gIDIxOlx0XHRtaWNoYWVsLm8gXFxcbiAgMjI6XHRcdHRraXAubyBcXFxuICAyMzpcdFx0YWVzX2NtYWMubyBcXFxuICAyNDpcdFx0YWVzX2dtYWMubyBcXFxuICAyNTpcdFx0Zmlsc19hZWFkLm8gXFxcbiAgMjY6XHRcdGNmZy5vIFxcXG4gIDI3Olx0XHRldGh0b29sLm8gXFxcbiAgMjg6XHRcdHJ4Lm8gXFxcbiAgMjk6XHRcdHNwZWN0bWdtdC5vIFxcXG4gIDMwOlx0XHR0eC5vIFxcXG4gIDMxOlx0XHRrZXkubyBcXFxuICAzMjpcdFx0dXRpbC5vIHBhcnNlLm8gXFxcbiAgMzM6XHRcdHdtZS5vIFxcXG4gIDM0Olx0XHRjaGFuLm8gXFxcbiAgMzU6XHRcdHRyYWNlLm8gbWxtZS5vIFxcXG4gIDM2Olx0XHR0ZGxzLm8gXFxcbiAgMzc6XHRcdG9jYi5vIFxcXG4gIDM4Olx0XHRhaXJ0aW1lLm8gXFxcbiAgMzk6XHRcdGVodC5vXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzMxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElCU1MgaW4gbWFjODAyMTEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJQlNTIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCB3aXRoaW4gYG1hYzgwMjExYC4gVGhlIGZpcnN0IHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgYGlic3Mub2AgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHRoZSBtb2R1bGUuIEFuZCwgb2YgY291cnNlLCBgbWFjODAyMTFgIHJlbGllcyBvbiBgQ0ZHODAyMTFgIHdoaWNoIGlzIHRoZSBzdGFuZGFyZC4gSWYgSSYjMzk7bSB0ZXN0aW5nIGhhcmR3YXJlIGVtdWxhdGlvbiBJJiMzOTtkIGJlIHVzaW5nIGBNQUM4MDIxMV9IV1NJTWAsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiBzb21lIGtleSBzeW1ib2xzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlc2U6IGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgYW5kIGBpZWVlODAyMTFfaWJzc19qb2luYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBjb3JlIElCU1Mgam9pbiBhbmQgbGVhdmUgb3BlcmF0aW9ucy4KCk5vdyBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdGhpbmcgZWxzZSBvZiBpbXBvcnRhbmNlIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBzbyBJJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoYXQgZmlsZSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IC4qXFwoLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWJzcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmM9Mzg9aWVlZTgwMjExX2lic3NfYnVpbGRfcHJlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0yMTAtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjIxMTpzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lic3MuYy0yMTItXHRcdFx0XHQgICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IGludCBiZWFjb25faW50LFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgxLVxubmV0L21hYzgwMjExL2lic3MuYzozODI6c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTM4My1cdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKVxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNDU5LVxubmV0L21hYzgwMjExL2lic3MuYzo0NjA6aW50IGllZWU4MDIxMV9pYnNzX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTQ2MS1cdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY3NhX3NldHRpbmdzICpjc2Ffc2V0dGluZ3MsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy01MDctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjUwODppbnQgaWVlZTgwMjExX2lic3NfZmluaXNoX2NzYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTY0ICpjaGFuZ2VkKVxubmV0L21hYzgwMjExL2lic3MuYy01MDkte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTM5LVxubmV0L21hYzgwMjExL2lic3MuYzo1NDA6dm9pZCBpZWVlODAyMTFfaWJzc19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy01NDEte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTQ3LVxubmV0L21hYzgwMjExL2lic3MuYzo1NDg6c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTQ5LVx0X19hY3F1aXJlcyhSQ1UpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz01NzQ9aWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmJzc2lkLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjI2LVxubmV0L21hYzgwMjExL2lic3MuYzo2Mjc6c3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy02Mjgte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjUyLVxubmV0L21hYzgwMjExL2lic3MuYzo2NTM6c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjU0LXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcxMS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6NzEyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzEzLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy03MjUtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjcyNjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzI3LXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTg4NT1pZWVlODAyMTFfcnhfbWdtdF9zcGVjdHJ1bV9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTA4LVxubmV0L21hYzgwMjExL2lic3MuYzo5MDk6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkxMC1cdFx0XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy05MjItXG5uZXQvbWFjODAyMTEvaWJzcy5jOjkyMzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkyNC1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTUzLVxubmV0L21hYzgwMjExL2lic3MuYzo5NTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTU1LVx0XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTA3My1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTA3NDpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzUtXHRcdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjExNjg6dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjktXHRcdFx0ICAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyMTgtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjEyMTk6c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3Nfc3RhX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTIyMC17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMjU3LVxubmV0L21hYzgwMjExL2lic3MuYzoxMjU4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTI1OS17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMjg1LVxubmV0L21hYzgwMjExL2lic3MuYzoxMjg2OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyODcte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMxOS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTMyMDpzdGF0aWMgdW5zaWduZWQgaW50IGlic3Nfc2V0dXBfY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMyMS1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoqY2hhbm5lbHMsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xMzUyPWllZWU4MDIxMV9pYnNzX3NldHVwX3NjYW5fY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTMtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjEzOTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTUte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTQ4Mi1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTQ4MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODQtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpyZXEpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xNTQ5PXN0YXRpY1xubmV0L21hYzgwMjExL2lic3MuYzoxNTUwOnZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lic3MuYy0xNTUxLVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE1NzYtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE1Nzc6dm9pZCBpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTU3OC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjMyLVxubmV0L21hYzgwMjExL2lic3MuYzoxNjMzOnZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTYzNC17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjcxLVxubmV0L21hYzgwMjExL2lic3MuYzoxNjcyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L21hYzgwMjExL2lic3MuYy0xNjczLXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzktXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2ODA6dm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTY4MS17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjkxLS8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2OTI6dm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2OTMte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwNi1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTcwNzppbnQgaWVlZTgwMjExX2lic3Nfam9pbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwOC1cdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcylcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE4MDg6aW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy0xODA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzYKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElCU1MgRGlzY29ubmVjdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gSUJTUyBtb2RlIGRpc2Nvbm5lY3Rpb24gYW5kIGNhcnJpZXIgaGFuZGxpbmcuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBjb25maWd1cmF0aW9uczogYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYW5kLCBjcml0aWNhbGx5LCBgTUFDODAyMTFfSFdTSU1gLiBJZiB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIGFzIEkgZ28gdGhyb3VnaCB0aGlzOiBgaWVlZTgwMjExX2lic3NfbGVhdmVgLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgLiBUaG9zZSBmdW5jdGlvbnMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCk5vdywgdGhlIG1haW4gcXVlc3Rpb246IHNob3VsZCBgV29ydGhGdXp6aW5nYCBiZSBlbmFibGVkIGhlcmU/IFdlbGwsIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGRpc2Nvbm5lY3Rpb24gaW4gSUJTUyBtb2RlIGFuZCB0aGUgdW5kZXJseWluZyBjYXJyaWVyIGhhbmRsaW5nIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIGFsd2F5cyBjb21wbGV4LiBUaGUgcmVhbGx5IGdvb2QgbmV3cyBpcyB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGFuZCBgbmV0bGluayBubDgwMjExYCwgc28gdGhhdCYjMzk7cyBhIGh1Z2UgcGx1cy4gV2UgYWxzbyBoYXZlIHdlbGwtZGVmaW5lZCBmb2N1cyBzeW1ib2xzIGFuZCB0aG9zZSBjcnVjaWFsIGNvbmZpZ3MgYXJlIHZlcmlmaWVkLCBzbyBJIGNhbiBzZWUgd2hlcmUgdGhpcyBjb3VsZCBiZSBiZW5lZmljaWFsLgoKTG9va3MgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O2xsIGZsYWcgdGhpcyB0byBiZSBzZXQgYXMgYSBmdXp6aW5nIGNhbmRpZGF0ZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9pYnNzX2xlYXZlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9pYnNzX2pvaW4mIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2xlYXZlX2lic3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2FycmllciBvZmYgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkdXJpbmcgSUJTUyBkaXNjb25uZWN0aW9uIGFuZCB0ZWFyZG93biBpbiBtYWM4MDIxMSwgd2hpY2ggYWZmZWN0cyBzdGF0aW9uIGZsdXNoIHN5bmNocm9uaXphdGlvbiBhbmQgUkNVIGJlaGF2aW9yIGluIElCU1MgbmV0d29ya3MuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBubDgwMjExIHVzZXItc3BhY2UgY29tbWFuZHMgdXNpbmcgc2ltdWxhdGVkIHJhZGlvcyAobWFjODAyMTFfaHdzaW0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2lic3Nfam9pbiYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbGVhdmVfaWJzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhYjUwY2NlYmU3MTllZGNiNjYyYTNmYTA3NTZkNThlNDRjNmM1NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNjc1LDcgJiM0Mzs2NzUsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCiAJaWZpYnNzLSZndDtzdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOwogCi0Jc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtJmd0O2Rldik7CiYjNDM7CWlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSkKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7aWZpYnNzLSZndDtpbmNvbXBsZXRlX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2lmaWJzcy0mZ3Q7aW5jb21wbGV0ZV9zdGF0aW9ucykpIHsKQEAgLTY4OSw4ICYjNDM7NjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtpZmlic3MtJmd0O2luY29tcGxldGVfbG9jayk7CiAKLQluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0mZ3Q7ZGV2KTsKLQogCXNkYXRhLSZndDt2aWYuY2ZnLmlic3Nfam9pbmVkID0gZmFsc2U7CiAJc2RhdGEtJmd0O3ZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7CiAJc2RhdGEtJmd0O3ZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7CkBAIC03MTcsNyAmIzQzOzcxNyw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCSAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7CiAKIAlpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFtcDtzZGF0YS0mZ3Q7c2tiX3F1ZXVlKTsKIAogCS8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqLwpAQCAtMTgyMyw4ICYjNDM7MTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAltZW1zZXQoJmFtcDtpZmlic3MtJmd0O2h0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtJmd0O2h0X2NhcGEpKTsKIAltZW1zZXQoJmFtcDtpZmlic3MtJmd0O2h0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy0mZ3Q7aHRfY2FwYV9tYXNrKSk7CiAKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUpOwogCiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtzZGF0YS0mZ3Q7dS5pYnNzLnRpbWVyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpYnNzLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBgbmV0L21hYzgwMjExL2lic3MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyBzb21lIGZvY3VzZWQgY2hhbmdlcywgcHJpbWFyaWx5IHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgYnJlYWsgdGhlbSBkb3duLgoKRmlyc3QsIHdpdGhpbiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIHRoZSBtb3N0IHNpZ25pZmljYW50IHNoaWZ0IGludm9sdmVzIHRoZSBvcmRlcmluZyBvZiBuZXR3b3JrIGludGVyZmFjZSBhbmQgc3RhdGlvbiBmbHVzaCBvcGVyYXRpb25zLiBNb3ZpbmcgYG5ldGlmX2NhcnJpZXJfb2ZmYCBiZWZvcmUgYHN0YV9pbmZvX2ZsdXNoYCByYWlzZXMgYSByZWQgZmxhZzsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIGZsaXBwaW5nIHRoZSBvcmRlci4gVGhlIGNoYW5nZSBmcm9tIGFuIHVuY29uZGl0aW9uYWwgYHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSlgIHRvIGEgY29uZGl0aW9uYWwgb25lIHdpdGggYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgc3VnZ2VzdGluZyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCB0byBlbnN1cmUgYSBuZXR3b3JrIG9wZXJhdGlvbiBpcyBzeW5jaHJvbml6ZWQgYWZ0ZXIgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGR1cGxpY2F0ZSBgbmV0aWZfY2Fycmllcl9vZmZgIGxhdGVyIGluIHRoZSBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGNsZWFudXAgaXMgZ29vZC4KClRoZSBzZWNvbmQgYXJlYSBpbnZvbHZlcyBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29ya2AuIFJlbW92aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgaGVyZSBtYWtlcyBtZSBxdWVzdGlvbiB3aGV0aGVyIHRoZSBvcmlnaW5hbCBhc3N1bXB0aW9uIG9uIHRoZSBuZWVkIGZvciB0aGF0IHN5bmNocm9uaXphdGlvbiB3YXMgaW5jb3JyZWN0LCBvciBpZiB0aGUgbG9naWMgaGFzIGNoYW5nZWQsIGFuZCBpdCBpcyBoYW5kbGVkIGVsc2V3aGVyZS4KCkZpbmFsbHksIHRoZSBzYW1lIHJlbW92YWwgb2YgYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgaWVlZTgwMjExX2lic3NfbGVhdmVgIHJlaW5mb3JjZXMgdGhlIGlkZWEgb2YgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBwYXR0ZXJuIGFkanVzdG1lbnQgYWNyb3NzIHRoZXNlIGZ1bmN0aW9ucy4gUGVyaGFwcyB0aGUgb3JpZ2luYWwgZGV2ZWxvcGVyIG92ZXJjb21wZW5zYXRlZCwgYW5kIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcgaGVyZS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGlic3MuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgZmxvdyBvZiBJQlNTIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgZGlzY29ubmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBjYXJyaWVyIHN0YXRlLCBzdGF0aW9uIHN0YXRlLCBhbmQgdGhlIHRpbWluZyBvZiB0aGVzZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlYnNzaWQsIGlmaWJzcy1cdTAwM2Vzc2lkLFxuIDY2NjpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4sXG4gNjY3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxuIDY2ODpcdFx0XHRcdFx0XHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXHUwMDNlcHJpdmFjeSkpO1xuIDY2OTpcdFxuIDY3MDpcdFx0XHRpZiAoY2Jzcykge1xuIDY3MTpcdFx0XHRcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MjpcdFx0XHRcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MzpcdFx0XHR9XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiA2Nzc6XHRcbiA2Nzg6XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4gNjc5Olx0XHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXG4gNjgwOlx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDY4MTpcdFxuIDY4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY4MzpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuIDY4NDpcdFx0XHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zLFxuIDY4NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7XG4gNjg2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnN0YS1cdTAwM2VsaXN0KTtcbiA2ODc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIHN0YSk7XG4gNjkwOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiA2OTE6XHRcdH1cbiA2OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY5MzpcdFxuIDY5NDpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xuIDY5NTpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTtcbiA2OTY6XHRcdHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XG4gNjk3Olx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcbiA2OTg6XHRcbiA2OTk6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbiA3MDA6XHRcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVx1MDAzZXByZXNwLCBzZGF0YSk7XG4gNzAxOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVx1MDAzZXUuaWJzcy5wcmVzcCwgTlVMTCk7XG4gNzAyOlx0XHRpZiAocHJlc3ApXG4gNzAzOlx0XHRcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0Y2xlYXJfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUxfQkVBQ09OX1NUT1BQRUQsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKTtcbiA3MDY6XHRcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XG4gNzA3Olx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfSUJTUyk7XG4gNzA4Olx0XHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xuIDcwOTpcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDcxMDpcdH1cbiA3MTE6XHRcbiA3MTI6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gNzEzOlx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiA3MTQ6XHR7XG4gNzE1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG4gNzE2Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxuIDcxNzpcdFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gNzE4Olx0XG4gNzE5Olx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbiA3MjA6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIDcyMTpcdFxuIDcyMjpcdFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXG4gNzIzOlx0XHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gNzI3Olx0e1xuIDcyODpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4gNzI5Olx0XHRpbnQgZXJyO1xuIDczMDpcdFxuIDczMTpcdFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXG4gNzMyOlx0XHQgKiB1bmF2YWlsYWJsZS5cbiA3MzM6XHRcdCAqL1xuIDczNDpcdFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHBvc2l0aW9uIG9mIHRoaW5raW5nIHRocm91Z2ggdGhlbToKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgYW5kIGBzdGFfaW5mb19mbHVzaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdoZW4gd2UmIzM5O3JlIGxlYXZpbmcgYW4gSUJTUyAoSW5kZXBlbmRlbnQgQmFzaWMgU2VydmljZSBTZXQpIG5ldHdvcmsgYW5kIGhvdyB3ZSYjMzk7cmUgY2xlYW5pbmcgdXAgc3RhbGUgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhpbmtpbmcgYWJvdXQgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBmaXJzdC4uLiBpdCYjMzk7cyB0aGUgZXhpdCBwb2ludCwgdGhlIGZ1bmN0aW9uIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBncmFjZWZ1bCAob3Igbm90LXNvLWdyYWNlZnVsLCBkZXBlbmRpbmcgb24gY2lyY3Vtc3RhbmNlcykgZGVwYXJ0dXJlLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGRlYXV0aGVudGljYXRpbmcgc3RhdGlvbnMsIHBvc3NpYmx5IHNlbmRpbmcgZGlzYXNzb2NpYXRpb24gZnJhbWVzLCBhbmQgZ2VuZXJhbGx5IG1ha2luZyBzdXJlIHdlJiMzOTtyZSBubyBsb25nZXIgcGFydCBvZiB0aGF0IHNwZWNpZmljIElCU1MgQlNTSUQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyBvdXIgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgbmV0d29yayBjaGFuZ2Ug4oCTIHBlcmhhcHMgY2xlYXJpbmcgb3VyIElCU1MtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgYW55IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyBJQlNTIHNjZW5hcmlvcyBjYW4gYmUgdHJpY2t5IHdpdGggbXVsdGlwbGUgc3RhdGlvbnMgY29uY3VycmVudGx5IHZ5aW5nIGZvciBuZXR3b3JrIGFjY2Vzcy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBzdGFfaW5mb19mbHVzaGAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhYm91dCBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGVudHJpZXMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYWdpbmcgbWVjaGFuaXNtcywgbGlrZSB0aW1lb3V0cy4gSG93IG9mdGVuIGRvZXMgaXQgcnVuPyBEb2VzIGl0IGNoZWNrIGZvciBhY3RpdmUgZGF0YSB0cmFuc21pc3Npb24gb3IganVzdCBhIHNpbXBsZSB0aW1lcj8gQXJlIHRoZXJlIGFueSBoZXVyaXN0aWNzIGludm9sdmVkIHRvIHByZXZlbnQgcHJlbWF0dXJlbHkgZmx1c2hpbmcgYWN0aXZlIHN0YXRpb25zLCBwZXJoYXBzIGR1ZSB0byB0ZW1wb3JhcnkgbmV0d29yayBnbGl0Y2hlcz8gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyBhIGxhcmdlIG51bWJlciBvZiBzdGF0aW9ucywgYW5kIHdoZXRoZXIgaXQgdXNlcyBhbnkgc21hcnQgaW5kZXhpbmcgb3IgbG9va3VwIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQuIE1vcmVvdmVyLCBJIHdvbmRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVycyBvZiB0aGUgc3RhY2sgLS0gaG93IGRvZXMgaXQgZW5zdXJlIHRoZSByZWxldmFudCBoYXJkd2FyZSBpcyBpbmZvcm1lZCBvZiB0aGUgc3RhdGlvbiYjMzk7cyByZW1vdmFsPyBJcyBpdCB0aWVkIGludG8gdGhlIGJlYWNvbmluZyBwcm9jZXNzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW55IHBvdGVudGlhbCBmdXR1cmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2FtZSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lic3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4xODExOlx0XG4xODEyOlx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4gPSAwO1xuMTgxMzpcdFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XG4xODE0Olx0XHRldGhfemVyb19hZGRyKGlmaWJzcy1cdTAwM2Vic3NpZCk7XG4xODE1Olx0XG4xODE2Olx0XHQvKiByZW1vdmUgYmVhY29uICovXG4xODE3Olx0XHRrZnJlZShzZGF0YS1cdTAwM2V1Lmlic3MuaWUpO1xuMTgxODpcdFx0c2RhdGEtXHUwMDNldS5pYnNzLmllID0gTlVMTDtcbjE4MTk6XHRcdHNkYXRhLVx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xuMTgyMDpcdFxuMTgyMTpcdFx0Lyogb24gdGhlIG5leHQgam9pbiwgcmUtcHJvZ3JhbSBIVCBwYXJhbWV0ZXJzICovXG4xODIyOlx0XHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYSkpO1xuMTgyMzpcdFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2ssIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrKSk7XG4xODI0Olx0XG4xODI1Olx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbjE4MjY6XHRcbjE4Mjc6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcy50aW1lcik7XG4xODI4Olx0XG4xODI5Olx0XHRyZXR1cm4gMDtcbjE4MzA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb246IGBzdGFfaW5mb19mbHVzaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzdGFfaW5mb19mbHVzaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb25hbCBjb250ZXh0LiBQcmVzdW1hYmx5LCB0aGlzIGlzIHJlbGF0ZWQgdG8gc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlbHkgdGllZCB0byBhbiA4MDIuMTEgaW1wbGVtZW50YXRpb24sIGdpdmVuIHRoZSAmIzM0O3N0YSYjMzQ7IHByZWZpeC4gVGhlICYjMzQ7Zmx1c2gmIzM0OyBwYXJ0IHN1Z2dlc3RzIGEgY2xlYXJpbmcsIGludmFsaWRhdGlvbiwgb3IgcmVtb3ZhbCBhY3Rpb24sIGFsbW9zdCBjZXJ0YWlubHkgZGVhbGluZyB3aXRoIGNhY2hlZCBvciBzdG9yZWQgZGF0YSBhYm91dCBzcGVjaWZpYyBzdGF0aW9ucy4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6ICpXaGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmbHVzaGVkPyAqV2h5KiBpcyBpdCBiZWluZyBmbHVzaGVkICh3aGF0IHRyaWdnZXJzIHRoZSBvcGVyYXRpb24pPyBBbmQgKndoZW4qIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbiBtYW5hZ2VtZW50IHRvIGdldCBhIGNvbXBsZXRlIGdyYXNwIG9mIGl0cyBpbXBhY3QuIEkgYmV0IHRoaXMgaXMgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50aW5nIHN0YWxlIG9yIG91dGRhdGVkIHN0YXRpb24gZW50cmllcyBmcm9tIGd1bW1pbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseS11dGlsaXplZCB3aXJlbGVzcyBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzdGFfaW5mb19mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NTQ9aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTY2LSAqL1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTY3OnN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTY4LVx0XHRcdFx0IGludCBsaW5rX2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzdGFfaW5mby5oYCBmb3Igc29tZSA4MDIuMTEgRGV0YWlscyoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgYXQgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5oYCwgYW5kIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIHJvdWdobHkgYmV0d2VlbiA5NTAgYW5kIDk4MC4gVGhhdCByZWdpb24gdXN1YWxseSBob2xkcyBzb21lIGludGVyZXN0aW5nIGRldGFpbHMsIHByb2JhYmx5IHNvbWUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHN0YXRpb24gc3RhdGUsIHJhdGUgY29udHJvbCBvciBzb21ldGhpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZmxhZ3MgdXNlZCB0aGVyZSwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCB0aGF0IHBhcnQgb2YgdGhlIGZpbGUgdG8gYmUgc3VyZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUgd2l0aG91dCB0b28gbXVjaCBkaWdnaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHQgKlx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcbiA5NTE6XHQgKlx0ICAgICByZW1vdmVkLlxuIDk1MjpcdCAqIEBkb19ub3RfZmx1c2hfc3RhOiBhIHN0YXRpb24gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGZsdXNoZWQuXG4gOTUzOlx0ICovXG4gOTU0Olx0aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXG4gOTU1Olx0XHRcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSk7XG4gOTU2Olx0XG4gOTU3Olx0LyoqXG4gOTU4Olx0ICogc3RhX2luZm9fZmx1c2ggLSBmbHVzaCBtYXRjaGluZyBTVEEgZW50cmllcyBmcm9tIHRoZSBTVEEgdGFibGVcbiA5NTk6XHQgKlxuIDk2MDpcdCAqIFJldHVybjogdGhlIG51bWJlciBvZiByZW1vdmVkIFNUQSBlbnRyaWVzLlxuIDk2MTpcdCAqXG4gOTYyOlx0ICogQHNkYXRhOiBzZGF0YSB0byByZW1vdmUgYWxsIHN0YXRpb25zIGZyb21cbiA5NjM6XHQgKiBAbGlua19pZDogaWYgZ2l2ZW4gKFx1MDAzZT0wKSwgYWxsIHRob3NlIFNUQSBlbnRyaWVzIHVzaW5nIEBsaW5rX2lkIG9ubHlcbiA5NjQ6XHQgKlx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcbiA5NjU6XHQgKlx0ICAgICByZW1vdmVkLlxuIDk2NjpcdCAqL1xuIDk2NzpcdHN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIDk2ODpcdFx0XHRcdFx0IGludCBsaW5rX2lkKVxuIDk2OTpcdHtcbiA5NzA6XHRcdHJldHVybiBfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgbGlua19pZCwgTlVMTCk7XG4gOTcxOlx0fVxuIDk3MjpcdFxuIDk3MzpcdHZvaWQgc3RhX3NldF9yYXRlX2luZm9fdHgoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gOTc0Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUsXG4gOTc1Olx0XHRcdFx0ICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaW5mbyk7XG4gOTc2Olx0dm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbiA5Nzc6XHRcdFx0ICAgYm9vbCB0aWRzdGF0cyk7XG4gOTc4Olx0XG4gOTc5Olx0dm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gOTgwOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pO1xuIDk4MTpcdFxuIDk4MjpcdHUzMiBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIDk4MzpcdFxuIDk4NDpcdHZvaWQgaWVlZTgwMjExX3N0YV9leHBpcmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgX19zdGFfaW5mb19mbHVzaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBfX3N0YV9pbmZvX2ZsdXNoYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGltcGFjdC4gR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Zmx1c2gmIzM0OyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW9uIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhdGlvbiAoU1RBKSBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGtpbmQgb2Ygc3RhdGlvbiBpbmZvLCAqd2hlcmUqIGl0JiMzOTtzIHN0b3JlZCwgYW5kICp3aHkqIGl0IG5lZWRzIGZsdXNoaW5nLgoKTXkgYnJhaW4mIzM5O3MgaW1tZWRpYXRlbHkgc3RhcnRpbmcgdG8gcnVuIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9uczogSXMgdGhpcyBhIGNhY2hlPyBBIGxvb2t1cCB0YWJsZT8gRGF0YSBzdG9yZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24gb3IgZGV2aWNlPyBJcyB0aGlzIGEgY2xlYW51cCBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgYSBzdGF0aW9uIGRpc2Nvbm5lY3RzLCBvciBtYXliZSBkdXJpbmcgYSBjaGFubmVsIHN3aXRjaCBvciBvdGhlciBkaXNydXB0aXZlIGV2ZW50PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGludHJvZHVjZWQgd2l0aCB0aGUgZnVuY3Rpb24/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgcmVzb3VyY2VzPyBJZiBzbywgd2hhdCBraW5kPyBJZiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiwgaG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgd29yaz8KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXRleGVzLCBzcGlubG9ja3MsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkPyBBIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBhbmQgc2FmZXR5LCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zdGFfaW5mb19mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9MTcwND1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wX2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTE3NzUtXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTc3NjpcdF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIHRydWUsIGxpbmtfaWQsIE5VTEwpO1xubmV0L21hYzgwMjExL2NmZy5jLTE3NzctXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz00MDEwPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy00MTIzLVx0LyogUmVtb3ZlIFRETFMgcGVlcnMgKi9cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NDEyNDpcdF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCAtMSwgYXBfc3RhKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNDEyNS1cbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xNjM2PXZvaWQgc3RhX2luZm9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNjQzLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTY0NDppbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE2NDUtXHRcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NDA9dm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NDItLyoqXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5NDM6ICogX19zdGFfaW5mb19mbHVzaCAtIGZsdXNoIG1hdGNoaW5nIFNUQSBlbnRyaWVzIGZyb20gdGhlIFNUQSB0YWJsZVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTQ0LSAqXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTUzLSAqL1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTU0OmludCBfX3N0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIHZsYW5zLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTU1LVx0XHQgICAgIGludCBsaW5rX2lkLCBzdHJ1Y3Qgc3RhX2luZm8gKmRvX25vdF9mbHVzaF9zdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTk2Nz1zdGF0aWMgaW5saW5lIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05Njkte1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTcwOlx0cmV0dXJuIF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCBsaW5rX2lkLCBOVUxMKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0YV9pbmZvLmNgIC0gTGluZSAxNjQ0KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE2NDQgaW4gYHN0YV9pbmZvLmNgLiBCYXNlZCBvbiBjb250ZXh0LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZSBzdGF0aW9uIGluZm9ybWF0aW9uIGhhbmRsaW5nLiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzdGF0aW9uIGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiByZWdhcmRpbmcgYSBwYXJ0aWN1bGFyIHN0YXRpb24uIExpbmUgMTY0NCBpcyBhIG1hcmtlcjsgaXTigJlzIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29kZSB3aGVyZSBJ4oCZbSBnb2luZyB0byBzdGFydCBteSBleGFtaW5hdGlvbi4gRnJvbSBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgYmVpbmcgbWFkZSwgdGhlIHZhcmlhYmxlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzLCBzcGVjaWZpY2FsbHkgd2hhdCBmdW5jdGlvbiBjYWxscyBhcmUgbWFkZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbGluZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIFRoZSBzcGVjaWZpYyBnb2FsIHdpbGwgYmUgYmFzZWQgb24gdGhlIHByb2plY3QgSeKAmW0gY3VycmVudGx5IG9uLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGVjaXBoZXIgd2hhdCB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NDQ6XHRpbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcbjE2NDU6XHRcdFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKVxuMTY0NjpcdHtcbjE2NDc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xNjQ4Olx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDtcbjE2NDk6XHRcdExJU1RfSEVBRChmcmVlX2xpc3QpO1xuMTY1MDpcdFx0aW50IHJldCA9IDA7XG4xNjUxOlx0XG4xNjUyOlx0XHRtaWdodF9zbGVlcCgpO1xuMTY1MzpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMTY1NDpcdFxuMTY1NTpcdFx0V0FSTl9PTih2bGFucyBcdTAwMjZcdTAwMjYgc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApO1xuMTY1NjpcdFx0V0FSTl9PTih2bGFucyBcdTAwMjZcdTAwMjYgIXNkYXRhLVx1MDAzZWJzcyk7XG4xNjU3Olx0XG4xNjU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhLCB0bXAsIFx1MDAyNmxvY2FsLVx1MDAzZXN0YV9saXN0LCBsaXN0KSB7XG4xNjU5Olx0XHRcdGlmIChzZGF0YSAhPSBzdGEtXHUwMDNlc2RhdGEgXHUwMDI2XHUwMDI2XG4xNjYwOlx0XHRcdCAgICAoIXZsYW5zIHx8IHNkYXRhLVx1MDAzZWJzcyAhPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlYnNzKSlcbjE2NjE6XHRcdFx0XHRjb250aW51ZTtcbjE2NjI6XHRcbjE2NjM6XHRcdFx0aWYgKHN0YSA9PSBkb19ub3RfZmx1c2hfc3RhKVxuMTY2NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTY2NTpcdFxuMTY2NjpcdFx0XHRpZiAobGlua19pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2XHUwMDI2XG4xNjY3Olx0XHRcdCAgICAhKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpXG4xNjY4Olx0XHRcdFx0Y29udGludWU7XG4xNjY5Olx0XG4xNjcwOlx0XHRcdGlmICghV0FSTl9PTihfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RhKSkpXG4xNjcxOlx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2c3RhLVx1MDAzZWZyZWVfbGlzdCwgXHUwMDI2ZnJlZV9saXN0KTtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0cmV0JiM0MzsmIzQzOztcbjE2NzQ6XHRcdH1cbjE2NzU6XHRcbjE2NzY6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZmcmVlX2xpc3QpKSB7XG4xNjc3Olx0XHRcdGJvb2wgc3VwcG9ydF9wMnBfcHMgPSB0cnVlO1xuMTY3ODpcdFxuMTY3OTpcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbjE2ODA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCBcdTAwMjZmcmVlX2xpc3QsIGZyZWVfbGlzdCkge1xuMTY4MTpcdFx0XHRcdGlmICghc3RhLVx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcbjE2ODI6XHRcdFx0XHRcdHN1cHBvcnRfcDJwX3BzID0gZmFsc2U7XG4xNjgzOlx0XHRcdFx0X19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0YSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY5CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSUJTUyBEaXNjb25uZWN0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IHN5bmNocm9uaXphdGlvbiBpc3N1ZSByZWxhdGVkIHRvIHRlYXJpbmcgZG93biBJQlNTIGludGVyZmFjZXMgYW5kIHN0YXRpb24gaW5mb3JtYXRpb24gZmx1c2hpbmcuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBob3cgYHN0YV9pbmZvX2ZsdXNoKClgIGFuZCBgbmV0aWZfY2Fycmllcl9vZmYoKWAgYXJlIG9yZGVyZWQgd2hlbiBhbiBJQlNTIGRpc2Nvbm5lY3QgaGFwcGVucy4KCkhlcmUmIzM5O3Mgd2hhdCBJIHNlZTogYHN0YV9pbmZvX2ZsdXNoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBmbHVzaGVkIHN0YXRpb25zIChgcmV0YCkuIFdoZW4gc3RhdGlvbnMgKmFyZSogZmx1c2hlZCAoYHJldCAmZ3Q7IDBgIHdoaWNoIG1lYW5zIGAhbGlzdF9lbXB0eSgmYW1wO2ZyZWVfbGlzdClgKSwgYHN5bmNocm9uaXplX25ldCgpYCBnZXRzIGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC4gQ3J1Y2lhbGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkLCBzbyBgcmV0YCBpcyAwKSwgdGhlbiBgc3luY2hyb25pemVfbmV0KClgICp3YXNuJiMzOTt0KiBjYWxsZWQgZnJvbSB3aXRoaW4gYF9fc3RhX2luZm9fZmx1c2goKWAuCgpUaGUgb3JpZ2luYWwgY29kZSBkaWQgYG5ldGlmX2NhcnJpZXJfb2ZmKClgICphZnRlciogZmx1c2hpbmcgc3RhdGlvbnMgYW5kIGhhbmRsaW5nIGluY29tcGxldGUgc3RhdGlvbnMuIFRoZW4sIGVpdGhlciBgY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCBvciBgaWVlZTgwMjExX2lic3NfbGVhdmVgIHdvdWxkIGNhbGwgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhlIHBhdGNoIHNoaWZ0cyB0aGluZ3MgYXJvdW5kOiBgbmV0aWZfY2Fycmllcl9vZmYoKWAgbm93IGhhcHBlbnMgKmJlZm9yZSogc3RhdGlvbiBmbHVzaGluZy4gSW1wb3J0YW50bHksIGlmIGBzdGFfaW5mb19mbHVzaCgpYCByZXR1cm5zIDAgKG5vIHN0YXRpb25zIGZsdXNoZWQpLCB0aGUgcGF0Y2ggKmV4cGxpY2l0bHkqIGNhbGxzIGBzeW5jaHJvbml6ZV9uZXQoKWAgaW4gYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3QoKWAuIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGNhbGxzIGluIGBjc2FfY29ubmVjdGlvbl9kcm9wX3dvcmtgIGFuZCBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGhhdmUgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgbm93IGd1YXJhbnRlZWQgdG8gaGFwcGVuIGFmdGVyIHRoZSBjYXJyaWVyIGlzIG9mZi4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbSwgbGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL1JDVSBpc3N1ZSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3Mgb2YgSUJTUyBpbnRlcmZhY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN0YXRpb25zLiBUaGUgY2hhbmdlIGluIG9yZGVyaW5nIGVuc3VyZXMgdGhhdCB0aGUgbmV0d29yayBzdGFjayBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYmVmb3JlIHN0YXRpb24gaW5mb3JtYXRpb24gaXMgY2xlYXJlZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIHBhdGNoOgoKMS4gIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBwYXNzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZS4KMi4gIFRoZXJlJiMzOTtzIG5vIGJyYW5jaGluZyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBzdGFfaW5mb19mbHVzaCgpYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgYSB3ZWxsIGRlZmluZWQgaW50ICgwIG9yIGEgcG9zaXRpdmUgbnVtYmVyKS4KMy4gIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuCjQuICBUaGVyZSBhcmVuJiMzOTt0IGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo1LiAgVGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbi1mb2N1c2VkIGNoYW5nZTsgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlIGhlcmUuCgpDb25zaWRlcmluZyB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIGNhcnJpZXIgc3RhdGUsIHRoZSByZWxldmFudCB0b29scyBmb3IgZmluZGluZyBidWdzIGhlcmUgd291bGQgYmUgS0FTQU4sIExPQ0tERVAsIGFuZCBSQ1UgZGVidWdnaW5nLCB3aGljaCBhcmUgY29uY2VybmVkIHdpdGggcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuCgpMb29rcyBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRqdXN0cyB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBjYXJyaWVyIHN0YXRlIHRlYXJkb3duIG9yZGVyaW5nIGluIG1hYzgwMjExIElCU1MgbW9kZSAobW92aW5nIG5ldGlmX2NhcnJpZXJfb2ZmKCkgYmVmb3JlIHN0YV9pbmZvX2ZsdXNoKCkgYW5kIGNhbGxpbmcgc3luY2hyb25pemVfbmV0KCkgaWYgbm8gc3RhdGlvbnMgd2VyZSBmbHVzaGVkLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgc3luY2hyb25pemVfcmN1KCkgY2FsbHMgaW4gY2FsbGVycykuIFRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBuZXR3b3JrIHN5bmNocm9uaXphdGlvbiwgUkNVIGdyYWNlIHBlcmlvZHMsIGFuZCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzdWJzeXN0ZW0gYm91bmRhcmllcywgYW5kIG5vIG9wZXJhdGlvbnMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBidWdzIChlLmcuIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6MjkuODk0ODA4NTI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDI3NzkxMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2FycmllciBvZmYgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkdXJpbmcgSUJTUyBkaXNjb25uZWN0aW9uIGFuZCB0ZWFyZG93biBpbiBtYWM4MDIxMSwgd2hpY2ggYWZmZWN0cyBzdGF0aW9uIGZsdXNoIHN5bmNocm9uaXphdGlvbiBhbmQgUkNVIGJlaGF2aW9yIGluIElCU1MgbmV0d29ya3MuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBubDgwMjExIHVzZXItc3BhY2UgY29tbWFuZHMgdXNpbmcgc2ltdWxhdGVkIHJhZGlvcyAobWFjODAyMTFfaHdzaW0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ2OjI5Ljg5NDgxMzc5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MjA1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuY1xcbmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmNcXG5AQCAtNjc1LDcgKzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcbiBcXHRpZmlic3MtXFx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XFxuIFxcbi1cXHRzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxcbitcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiBcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcXG5AQCAtNjg5LDggKzY5MSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gXFxuLVxcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVxcdTAwM2VkZXYpO1xcbi1cXG4gXFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcXG4gXFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XFxuIFxcdHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xcbkBAIC03MTcsNyArNzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHQgICAgIHUuaWJzcy5jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmspO1xcbiBcXG4gXFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuLVxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpO1xcbiBcXG4gXFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXFxuQEAgLTE4MjMsOCArMTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gXFx0bWVtc2V0KFxcdTAwMjZpZmlic3MtXFx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXFx1MDAzZWh0X2NhcGEpKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZpZmlic3MtXFx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrKSk7XFxuIFxcbi1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4tXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSk7XFxuIFxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2RhdGEtXFx1MDAzZXUuaWJzcy50aW1lcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ2OjMwLjM5MzY2ODQwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA2OTgzOTM0NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmNcbmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5AQCAtNjc1LDcgKzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXG4gXHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiBcbi1cdHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSk7XG4rXHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cdTAwM2VkZXYpO1xuK1x0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxuK1x0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiBcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcbkBAIC02ODksOCArNjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbi1cbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xuQEAgLTcxNyw3ICs3MTcsNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0ICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTtcbiBcbiBcdGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc2RhdGEpO1xuLVx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbiBcbiBcdC8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqL1xuQEAgLTE4MjMsOCArMTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhKSk7XG4gXHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2spKTtcbiBcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuLVxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3MudGltZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6MzAuMzkzNjY5ODA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4NjUyNjMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJQlNTIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCBhbmQgdGhlIGFjY29tcGFueWluZyB0b29scywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGUgZGlmZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gRGlzY29ubmVjdGlvbnMsIENTQSAoQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50KSBoYW5kbGluZywgYW5kIGxlYXZpbmcgSUJTUyBuZXR3b3JrcyBhcmUgdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQgaGVyZS5cblxuTm93LCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGhpbiBgbmV0L21hYzgwMjExL2lic3MuY2AgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5LiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUuIEknbGwgYWxzbyBiZSB1c2luZyBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBpbXBvcnRhbnQga2V5d29yZHMgYW5kIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgY29kZSBhcyBuZWNlc3NhcnkgdG8gc3BlZWQgdXAgbXkgYW5hbHlzaXMuIEFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBzZWUgd2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhZmZlY3QgdGhlc2UgSUJTUyBmdW5jdGlvbmFsaXRpZXMuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NywiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0Njo1Ni4yNTg5MzUxNDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0XFx0XFx0XFx0XFx0XFx0aWZpYnNzLVxcdTAwM2Vic3NpZCwgaWZpYnNzLVxcdTAwM2Vzc2lkLFxcbiA2NjY6XFx0XFx0XFx0XFx0XFx0XFx0aWZpYnNzLVxcdTAwM2Vzc2lkX2xlbixcXG4gNjY3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxcbiA2Njg6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1BSSVZBQ1koaWZpYnNzLVxcdTAwM2Vwcml2YWN5KSk7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdFxcdGlmIChjYnNzKSB7XFxuIDY3MTpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgY2Jzcyk7XFxuIDY3MjpcXHRcXHRcXHRcXHRjZmc4MDIxMV9wdXRfYnNzKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksIGNic3MpO1xcbiA2NzM6XFx0XFx0XFx0fVxcbiA2NzQ6XFx0XFx0fVxcbiA2NzU6XFx0XFxuIDY3NjpcXHRcXHRpZmlic3MtXFx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVxcdTAwM2VkZXYpO1xcbiA2Nzk6XFx0XFx0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxcbiA2ODA6XFx0XFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2ODM6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMpKSB7XFxuIDY4NDpcXHRcXHRcXHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMsXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0YV9pbmZvLCBsaXN0KTtcXG4gNjg2OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzdGEtXFx1MDAzZWxpc3QpO1xcbiA2ODc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0XFx0c3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTtcXG4gNjkwOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2OTE6XFx0XFx0fVxcbiA2OTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcXG4gNjk1OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuY2ZnLmlic3NfY3JlYXRvciA9IGZhbHNlO1xcbiA2OTY6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XFxuIDY5NzpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNmZy5zc2lkX2xlbiA9IDA7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdC8qIHJlbW92ZSBiZWFjb24gKi9cXG4gNzAwOlxcdFxcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVxcdTAwM2VwcmVzcCwgc2RhdGEpO1xcbiA3MDE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cXHUwMDNldS5pYnNzLnByZXNwLCBOVUxMKTtcXG4gNzAyOlxcdFxcdGlmIChwcmVzcClcXG4gNzAzOlxcdFxcdFxcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRjbGVhcl9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTF9CRUFDT05fU1RPUFBFRCwgXFx1MDAyNnNkYXRhLVxcdTAwM2VzdGF0ZSk7XFxuIDcwNjpcXHRcXHRpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfFxcbiA3MDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0QlNTX0NIQU5HRURfSUJTUyk7XFxuIDcwODpcXHRcXHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xcbiA3MDk6XFx0XFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDcxMDpcXHR9XFxuIDcxMTpcXHRcXG4gNzEyOlxcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gNzEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID1cXG4gNzE2OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxcbiA3MTc6XFx0XFx0XFx0XFx0ICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTtcXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuIDcyMDpcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cXG4gNzIzOlxcdFxcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2V3b3JrKTtcXG4gNzI0OlxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIDcyNzpcXHR7XFxuIDcyODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldS5pYnNzO1xcbiA3Mjk6XFx0XFx0aW50IGVycjtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXFxuIDczMjpcXHRcXHQgKiB1bmF2YWlsYWJsZS5cXG4gNzMzOlxcdFxcdCAqL1xcbiA3MzQ6XFx0XFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6NTYuMjU5MDUxODc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuMTgxMTpcXHRcXG4xODEyOlxcdFxcdGlmaWJzcy1cXHUwMDNlc3NpZF9sZW4gPSAwO1xcbjE4MTM6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuMTgxNDpcXHRcXHRldGhfemVyb19hZGRyKGlmaWJzcy1cXHUwMDNlYnNzaWQpO1xcbjE4MTU6XFx0XFxuMTgxNjpcXHRcXHQvKiByZW1vdmUgYmVhY29uICovXFxuMTgxNzpcXHRcXHRrZnJlZShzZGF0YS1cXHUwMDNldS5pYnNzLmllKTtcXG4xODE4OlxcdFxcdHNkYXRhLVxcdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xcbjE4MTk6XFx0XFx0c2RhdGEtXFx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cXG4xODIyOlxcdFxcdG1lbXNldChcXHUwMDI2aWZpYnNzLVxcdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhKSk7XFxuMTgyMzpcXHRcXHRtZW1zZXQoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhX21hc2spKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzZGF0YS1cXHUwMDNlc2tiX3F1ZXVlKTtcXG4xODI2OlxcdFxcbjE4Mjc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3MudGltZXIpO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRyZXR1cm4gMDtcXG4xODMwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6NTYuMjU5MTIxMDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDI2Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0Njo1Ni4zMDg1NTI3MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDgwNzAxMzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIGFuZCBpdHMgQ2xlYW51cCBSb3V0aW5lcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGFyZSBjdXJyZW50bHkgY29uZmlndXJlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLlxuXG5OZXh0LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gY2xlYW51cCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHN0YXRpb24gaXMgYmVpbmcgZmx1c2hlZCBvciB3aGVuIGFuIElCU1MgaXMgbGVhdmluZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFjdGlvbnMgYXJlIHRyaWdnZXJlZC4gSSdsbCBuZWVkIHRvIGBncmVwYCBmb3IgYHN0YV9pbmZvX2ZsdXNoYCBhbmQgdGhlbiB0cmFjayBkb3duIGFsbCBvZiBpdHMgY2FsbGVycy4gU2ltaWxhcmx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIGNhbGxzIGFyZSBtYWRlIHRvIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgb3IgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgbGFzdGx5IEknbGwgbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgbWFjODAyMTFfaHdzaW1gIGJlY2F1c2UsIHdlbGwsIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgc2ltdWxhdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBjbGVhbnVwLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgdXNlZCwgYW5kIGhvdyB0aGV5IHJlbGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjExLjExNTU2ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA0MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9pYnNzX2xlYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MzEwND1zdGF0aWMgaW50IGllZWU4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L21hYzgwMjExL2NmZy5jLTMxMDUte1xcbm5ldC9tYWM4MDIxMS9jZmcuYzozMTA2OlxcdHJldHVybiBpZWVlODAyMTFfaWJzc19sZWF2ZShJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMzEwNy19XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTE3MDc9aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDctXFxubmV0L21hYzgwMjExL2lic3MuYzoxODA4OmludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDkte1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTk4MD1pbnQgaWVlZTgwMjExX2lic3Nfam9pbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xOTgxLVxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxOTgyOmludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTk4My12b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxMS4xNjI3NzY5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjU1MDQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxMi42MDUzMzE1MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY4NzYwOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxNC4xNTIyMjM4NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk3MTA3OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBtYWM4MDIxMSBJQlNTIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBgbmV0L21hYzgwMjExL2lic3MuY2AgcmVsYXRlZCB0byBJQlNTIGNvbm5lY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KClgIGhhcyBoYWQgYG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldilgIG1vdmVkLCBhIGNvbmRpdGlvbmFsIGBzeW5jaHJvbml6ZV9uZXQoKWAgYWRkZWQsIGFuZCBgc3RhX2luZm9fZmx1c2goKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgdmFsdWUuIEFsc28sIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2FzIHJlbW92ZWQgZnJvbSBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yaygpYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlKClgLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIG5sODAyMTEgSUJTUyBjb21tYW5kcywgYW5kIHRoZSB1c2Ugb2YgbWFjODAyMTFfaHdzaW0gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXMgaXMgd29ydGggYSBkZWVwZXIgbG9vay4gVGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBhZmZlY3Rpbmcgc3luY2hyb25pemF0aW9uIGFuZCBuZXR3b3JrIGRldmljZSBzdGF0ZSB3aXRoaW4gSUJTUywgd2hpY2ggaXMgYSBrbm93biBob3RiZWQgZm9yIHRyaWNreSByYWNlIGNvbmRpdGlvbnMsIFVBRnMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBHZXR0aW5nIGBuZXRpZl9jYXJyaWVyX29mZmAgY2FsbGVkIGVhcmxpZXIgYW5kIHRoZSBjb25kaXRpb25hbCBgc3luY2hyb25pemVfbmV0KClgIG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IGFyb3VuZCBob3cgdGhpbmdzIGFyZSB0b3JuIGRvd24uIFRoZSByZW1vdmFsIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAgaXMgYWxzbyBpbnRlcmVzdGluZywgYW5kIGlzIGxpa2VseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBhdCBwb3RlbnRpYWwgcmFjZXMuXG5cbk5vdywgbGV0J3MgcGluIGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uLiBXZSBoYXZlIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgIChpbiBjZmcuYykgd2hpY2ggY2FsbHMgYGllZWU4MDIxMV9pYnNzX2xlYXZlYC4gQWxzbywgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGZyb20gb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgYSBjcnVjaWFsIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyMy4xMjMzMDUzMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxMVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19DTUFDXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcXG4gIDE0OlxcdFxcdCAgbmV0d29ya2luZyBzdGFjay5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29tbWVudCBcXFwiQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExPW5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0aWYgTUFDODAyMTEgIT0gblxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTUFDODAyMTFfSEFTX1JDXFxuICAyMjpcXHRcXHRib29sXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbiAgMjY6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xcbiAgMjc6XFx0XFx0ZGVmYXVsdCB5XFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlICdtaW5zdHJlbCcgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjIzLjEyMzM3MjM5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxMTI2NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gQ0ZHODAyMTEgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgdGllZCB0byBgQ0ZHODAyMTFgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVyIGFuZCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgYnVuY2ggb2YgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgcG9pbnRpbmcgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBgQ0ZHODAyMTFgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgbGFuZHNjYXBlIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoYXQgY29yZSB3aXJlbGVzcyBjb21wb25lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgZGVwZW5kZW5jaWVzLCBidXQgSSdtIHJlYWR5IHRvIHBhcnNlIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyNS4yNjQ1MDIxNDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXSVJFTEVTU19FWFRcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFdFWFRfQ09SRVxcbiAgIDY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgV0VYVF9QUk9DXFxuICAxMDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gV0VYVF9DT1JFXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBXRVhUX1BSSVZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIENGRzgwMjExXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gIDIwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjI6XFx0XFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXFxuICAyMzpcXHRcXHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4ndFxcbiAgMjQ6XFx0XFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXFxuICAyODpcXHRcXHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cXG4gIDM1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyNS4yNjQ1NzQ1NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxMTc4NzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTUFDODAyMTEgSFdTSU0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgTUFDODAyMTFfSFdTSU1gIGZlYXR1cmUuIE15IHVzdWFsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlciBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBjcml0aWNhbGx5LCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYE1BQzgwMjExX0hXU0lNYCBvcHRpb24gd2lsbCBsaXZlIGFuZCB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBzdG9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBiZWRyb2NrIGJlZm9yZSBJIGNhbiB0aGluayBhYm91dCB1c2luZywgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDc6MzMuODc2MzY0OTMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzozMy44NzY0MzA1NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NTU4NjM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpYnNzLmNgIENvbXBpbGF0aW9uIGluIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWJzcy5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5IGlzIGJlaW5nIGNvbXBpbGVkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiBhbmQgdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcnVsZXMsIGZsYWdzLCBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYGlic3MuY2AuIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgb2JqZWN0IGZpbGUsIG9yIGNvbXBpbGVkIGRpcmVjdGx5PyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIGF0IHBsYXkgaGVyZSBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIG90aGVyIHZhcmlhYmxlcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcyBhcmUgcnVuIHRvIGdlbmVyYXRlIHRoZSBvYmplY3QgZmlsZSAoZS5nLiwgYC5vYCkgYW5kIGhvdyB0aGF0IG9iamVjdCBpcyB0aGVuIGxpbmtlZCBpbnRvIHRoZSBicm9hZGVyIGBtYWM4MDIxMWAgbW9kdWxlIG9yIHBvdGVudGlhbGx5IGV2ZW4gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSBmb3IgdHJvdWJsZXNob290aW5nIGFueSBjb21waWxhdGlvbiBpc3N1ZXMgb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjQwLjUzMjAyMDE4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfTUFDODAyMTEpICs9IG1hYzgwMjExLm9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0IyBtYWM4MDIxMSBvYmplY3RzXFxuICAgNTpcXHRtYWM4MDIxMS15IDo9IFxcXFxcXG4gICA2OlxcdFxcdG1haW4ubyBzdGF0dXMubyBcXFxcXFxuICAgNzpcXHRcXHRkcml2ZXItb3BzLm8gXFxcXFxcbiAgIDg6XFx0XFx0c3RhX2luZm8ubyBcXFxcXFxuICAgOTpcXHRcXHR3ZXAubyBcXFxcXFxuICAxMDpcXHRcXHRhZWFkX2FwaS5vIFxcXFxcXG4gIDExOlxcdFxcdHdwYS5vIFxcXFxcXG4gIDEyOlxcdFxcdHNjYW4ubyBvZmZjaGFubmVsLm8gXFxcXFxcbiAgMTM6XFx0XFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxcXFxuICAxNDpcXHRcXHR2aHQubyBcXFxcXFxuICAxNTpcXHRcXHRoZS5vIFxcXFxcXG4gIDE2OlxcdFxcdHMxZy5vIFxcXFxcXG4gIDE3OlxcdFxcdGlic3MubyBcXFxcXFxuICAxODpcXHRcXHRpZmFjZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGxpbmsubyBcXFxcXFxuICAyMDpcXHRcXHRyYXRlLm8gXFxcXFxcbiAgMjE6XFx0XFx0bWljaGFlbC5vIFxcXFxcXG4gIDIyOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMzpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDI0OlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjU6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjY6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjc6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjk6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMzA6XFx0XFx0dHgubyBcXFxcXFxuICAzMTpcXHRcXHRrZXkubyBcXFxcXFxuICAzMjpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMzpcXHRcXHR3bWUubyBcXFxcXFxuICAzNDpcXHRcXHRjaGFuLm8gXFxcXFxcbiAgMzU6XFx0XFx0dHJhY2UubyBtbG1lLm8gXFxcXFxcbiAgMzY6XFx0XFx0dGRscy5vIFxcXFxcXG4gIDM3OlxcdFxcdG9jYi5vIFxcXFxcXG4gIDM4OlxcdFxcdGFpcnRpbWUubyBcXFxcXFxuICAzOTpcXHRcXHRlaHQub1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjQwLjUzMjA5MTM4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU2MjgxNjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJQlNTIGluIG1hYzgwMjExKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IElCU1MgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIHdpdGhpbiBgbWFjODAyMTFgLiBUaGUgZmlyc3QgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCBgaWJzcy5vYCBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01BQzgwMjExYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgbW9kdWxlLiBBbmQsIG9mIGNvdXJzZSwgYG1hYzgwMjExYCByZWxpZXMgb24gYENGRzgwMjExYCB3aGljaCBpcyB0aGUgc3RhbmRhcmQuIElmIEknbSB0ZXN0aW5nIGhhcmR3YXJlIGVtdWxhdGlvbiBJJ2QgYmUgdXNpbmcgYE1BQzgwMjExX0hXU0lNYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSBuZWVkIHRvIGZvY3VzIG9uIHNvbWUga2V5IHN5bWJvbHMsIHNvIEkgbmVlZCB0byBjaGVjayB0aGVzZTogYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBhbmQgYGllZWU4MDIxMV9pYnNzX2pvaW5gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGNvcmUgSUJTUyBqb2luIGFuZCBsZWF2ZSBvcGVyYXRpb25zLlxuXG5Ob3cgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSdzIG5vdGhpbmcgZWxzZSBvZiBpbXBvcnRhbmNlIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBzbyBJJ2xsIGhhdmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhhdCBmaWxlIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjAwLjA5NDkxMDExNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MjY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgLipcXFxcKC4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9pYnNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2lic3MuYz0zOD1pZWVlODAyMTFfaWJzc19idWlsZF9wcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMjEwLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MjExOnN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0yMTItXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCBpbnQgYmVhY29uX2ludCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgxLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MzgyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgzLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy00NTktXFxubmV0L21hYzgwMjExL2lic3MuYzo0NjA6aW50IGllZWU4MDIxMV9pYnNzX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy00NjEtXFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2NzYV9zZXR0aW5ncyAqY3NhX3NldHRpbmdzLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy01MDctXFxubmV0L21hYzgwMjExL2lic3MuYzo1MDg6aW50IGllZWU4MDIxMV9pYnNzX2ZpbmlzaF9jc2Eoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU2NCAqY2hhbmdlZClcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTUwOS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTUzOS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjU0MDp2b2lkIGllZWU4MDIxMV9pYnNzX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL2lic3MuYy01NDEte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy01NDctXFxubmV0L21hYzgwMjExL2lic3MuYzo1NDg6c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU0OS1cXHRfX2FjcXVpcmVzKFJDVSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9NTc0PWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjI2LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6NjI3OnN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTYyOC17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTY1Mi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjY1MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjU0LXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzExLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6NzEyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcxMy1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcyNS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjcyNjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcyNy17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTg4NT1pZWVlODAyMTFfcnhfbWdtdF9zcGVjdHJ1bV9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy05MDgtXFxubmV0L21hYzgwMjExL2lic3MuYzo5MDk6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy05MTAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkyMi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjkyMzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy05MjQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy05NTMtXFxubmV0L21hYzgwMjExL2lic3MuYzo5NTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTk1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzMtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMDc0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjctXFxubmV0L21hYzgwMjExL2lic3MuYzoxMTY4OnZvaWQgaWVlZTgwMjExX2lic3Nfcnhfbm9fc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTE2OS1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xMjE4LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTIxOTpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19zdGFfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTIyMC17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyNTctXFxubmV0L21hYzgwMjExL2lic3MuYzoxMjU4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyNTkte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xMjg1LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTI4NjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTI4Ny17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzMTktXFxubmV0L21hYzgwMjExL2lic3MuYzoxMzIwOnN0YXRpYyB1bnNpZ25lZCBpbnQgaWJzc19zZXR1cF9jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMyMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKipjaGFubmVscyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTM1Mj1pZWVlODAyMTFfaWJzc19zZXR1cF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTMtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMzk0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTM5NS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODItXFxubmV0L21hYzgwMjExL2lic3MuYzoxNDgzOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlcSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTU0OT1zdGF0aWNcXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE1NTA6dm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNTUxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE1NzYtXFxubmV0L21hYzgwMjExL2lic3MuYzoxNTc3OnZvaWQgaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNTc4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2MzItXFxubmV0L21hYzgwMjExL2lic3MuYzoxNjMzOnZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2MzQte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjcxLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY3MjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc190aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzMte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjc5LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY4MDp2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTY4MS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2OTEtLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi9cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2OTI6dm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjkzLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwNi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE3MDc6aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNzA4LVxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xODA3LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTgwODppbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL2lic3MuYy0xODA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MDAuMTQyMzM5NTUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTY0NjY1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElCU1MgRGlzY29ubmVjdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIElCU1MgbW9kZSBkaXNjb25uZWN0aW9uIGFuZCBjYXJyaWVyIGhhbmRsaW5nLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZldyBrZXkgY29uZmlndXJhdGlvbnM6IGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCwgY3JpdGljYWxseSwgYE1BQzgwMjExX0hXU0lNYC4gSWYgdGhvc2UgYXJlIGFsbCBpbiBwbGFjZSwgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgYXMgSSBnbyB0aHJvdWdoIHRoaXM6IGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIGBpZWVlODAyMTFfaWJzc19qb2luYCwgYW5kIGBpZWVlODAyMTFfbGVhdmVfaWJzc2AuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ob3csIHRoZSBtYWluIHF1ZXN0aW9uOiBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgZW5hYmxlZCBoZXJlPyBXZWxsLCB0aGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBkaXNjb25uZWN0aW9uIGluIElCU1MgbW9kZSBhbmQgdGhlIHVuZGVybHlpbmcgY2FycmllciBoYW5kbGluZyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBpcyBhbHdheXMgY29tcGxleC4gVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGFuZCBgbmV0bGluayBubDgwMjExYCwgc28gdGhhdCdzIGEgaHVnZSBwbHVzLiBXZSBhbHNvIGhhdmUgd2VsbC1kZWZpbmVkIGZvY3VzIHN5bWJvbHMgYW5kIHRob3NlIGNydWNpYWwgY29uZmlncyBhcmUgdmVyaWZpZWQsIHNvIEkgY2FuIHNlZSB3aGVyZSB0aGlzIGNvdWxkIGJlIGJlbmVmaWNpYWwuXG5cbkxvb2tzIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ2xsIGZsYWcgdGhpcyB0byBiZSBzZXQgYXMgYSBmdXp6aW5nIGNhbmRpZGF0ZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzc2LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODoxNy4zMDcwMDczNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU5MTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9pYnNzX2xlYXZlXCIsXG4gICAgXCJpZWVlODAyMTFfaWJzc19qb2luXCIsXG4gICAgXCJpZWVlODAyMTFfbGVhdmVfaWJzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MTcuMzc3NjA3Nzg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk0NDk4MTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjE3LjM3ODAxMDQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwOTQ0NTczNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhYjUwY2NlYmU3MTllZGNiNjYyYTNmYTA3NTZkNThlNDRjNmM1NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5pbmRleCA2ZTM2YjA5ZmU5N2Y4Li42Y2EyZmYzNTRlNzY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xuKysrIGIvbmV0L21hYzgwMjExL2lic3MuY1xuQEAgLTY3NSw3ICs2NzUsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFxuIFx0aWZpYnNzLVx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XG4gXG4tXHRzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbitcdGlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSlcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMpKSB7XG5AQCAtNjg5LDggKzY5MSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiBcbi1cdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4tXG4gXHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmlic3Nfam9pbmVkID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmlic3NfY3JlYXRvciA9IGZhbHNlO1xuIFx0c2RhdGEtXHUwMDNldmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTtcbkBAIC03MTcsNyArNzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gXG4gXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cbkBAIC0xODIzLDggKzE4MjIsNiBAQCBpbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYSkpO1xuIFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2ssIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrKSk7XG4gXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIFxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5pYnNzLnRpbWVyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjE3LjM3ODAxMTIzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDE5MTUyNTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlic3MuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBgbmV0L21hYzgwMjExL2lic3MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyBzb21lIGZvY3VzZWQgY2hhbmdlcywgcHJpbWFyaWx5IHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSdsbCBicmVhayB0aGVtIGRvd24uXG5cbkZpcnN0LCB3aXRoaW4gYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLCB0aGUgbW9zdCBzaWduaWZpY2FudCBzaGlmdCBpbnZvbHZlcyB0aGUgb3JkZXJpbmcgb2YgbmV0d29yayBpbnRlcmZhY2UgYW5kIHN0YXRpb24gZmx1c2ggb3BlcmF0aW9ucy4gTW92aW5nIGBuZXRpZl9jYXJyaWVyX29mZmAgYmVmb3JlIGBzdGFfaW5mb19mbHVzaGAgcmFpc2VzIGEgcmVkIGZsYWc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5J3JlIGZsaXBwaW5nIHRoZSBvcmRlci4gVGhlIGNoYW5nZSBmcm9tIGFuIHVuY29uZGl0aW9uYWwgYHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSlgIHRvIGEgY29uZGl0aW9uYWwgb25lIHdpdGggYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgc3VnZ2VzdGluZyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCB0byBlbnN1cmUgYSBuZXR3b3JrIG9wZXJhdGlvbiBpcyBzeW5jaHJvbml6ZWQgYWZ0ZXIgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGR1cGxpY2F0ZSBgbmV0aWZfY2Fycmllcl9vZmZgIGxhdGVyIGluIHRoZSBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGNsZWFudXAgaXMgZ29vZC5cblxuVGhlIHNlY29uZCBhcmVhIGludm9sdmVzIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYC4gUmVtb3ZpbmcgYHN5bmNocm9uaXplX3JjdSgpYCBoZXJlIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdGhlIG9yaWdpbmFsIGFzc3VtcHRpb24gb24gdGhlIG5lZWQgZm9yIHRoYXQgc3luY2hyb25pemF0aW9uIHdhcyBpbmNvcnJlY3QsIG9yIGlmIHRoZSBsb2dpYyBoYXMgY2hhbmdlZCwgYW5kIGl0IGlzIGhhbmRsZWQgZWxzZXdoZXJlLlxuXG5GaW5hbGx5LCB0aGUgc2FtZSByZW1vdmFsIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGllZWU4MDIxMV9pYnNzX2xlYXZlYCByZWluZm9yY2VzIHRoZSBpZGVhIG9mIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gcGF0dGVybiBhZGp1c3RtZW50IGFjcm9zcyB0aGVzZSBmdW5jdGlvbnMuIFBlcmhhcHMgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBvdmVyY29tcGVuc2F0ZWQsIGFuZCB3ZSdyZSBzZWVpbmcgc29tZSBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcgaGVyZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBpYnNzLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgZmxvdyBvZiBJQlNTIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgZGlzY29ubmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBjYXJyaWVyIHN0YXRlLCBzdGF0aW9uIHN0YXRlLCBhbmQgdGhlIHRpbWluZyBvZiB0aGVzZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MzEuNTY5NTQwMDg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWJzcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NTpcXHRcXHRcXHRcXHRcXHRcXHRpZmlic3MtXFx1MDAzZWJzc2lkLCBpZmlic3MtXFx1MDAzZXNzaWQsXFxuIDY2NjpcXHRcXHRcXHRcXHRcXHRcXHRpZmlic3MtXFx1MDAzZXNzaWRfbGVuLFxcbiA2Njc6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0JTU19UWVBFX0lCU1MsXFxuIDY2ODpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXFx1MDAzZXByaXZhY3kpKTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0XFx0aWYgKGNic3MpIHtcXG4gNjcxOlxcdFxcdFxcdFxcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBjYnNzKTtcXG4gNjcyOlxcdFxcdFxcdFxcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgY2Jzcyk7XFxuIDY3MzpcXHRcXHRcXHR9XFxuIDY3NDpcXHRcXHR9XFxuIDY3NTpcXHRcXG4gNjc2OlxcdFxcdGlmaWJzcy1cXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXFx1MDAzZWRldik7XFxuIDY3OTpcXHRcXHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXFxuIDY4MDpcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfbG9jayk7XFxuIDY4MzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcXG4gNjg0OlxcdFxcdFxcdHN0YSA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucyxcXG4gNjg1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3RhX2luZm8sIGxpc3QpO1xcbiA2ODY6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnN0YS1cXHUwMDNlbGlzdCk7XFxuIDY4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRcXHRzdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpO1xcbiA2OTA6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfbG9jayk7XFxuIDY5MTpcXHRcXHR9XFxuIDY5MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xcbiA2OTU6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XFxuIDY5NjpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTtcXG4gNjk3OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0LyogcmVtb3ZlIGJlYWNvbiAqL1xcbiA3MDA6XFx0XFx0cHJlc3AgPSBzZGF0YV9kZXJlZmVyZW5jZShpZmlic3MtXFx1MDAzZXByZXNwLCBzZGF0YSk7XFxuIDcwMTpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVxcdTAwM2V1Lmlic3MucHJlc3AsIE5VTEwpO1xcbiA3MDI6XFx0XFx0aWYgKHByZXNwKVxcbiA3MDM6XFx0XFx0XFx0a2ZyZWVfcmN1KHByZXNwLCByY3VfaGVhZCk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGNsZWFyX2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMX0JFQUNPTl9TVE9QUEVELCBcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXRlKTtcXG4gNzA2OlxcdFxcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRCU1NfQ0hBTkdFRF9JQlNTKTtcXG4gNzA4OlxcdFxcdGRydl9sZWF2ZV9pYnNzKGxvY2FsLCBzZGF0YSk7XFxuIDcwOTpcXHRcXHRpZWVlODAyMTFfbGlua19yZWxlYXNlX2NoYW5uZWwoXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rKTtcXG4gNzEwOlxcdH1cXG4gNzExOlxcdFxcbiA3MTI6XFx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiA3MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbiA3MTQ6XFx0e1xcbiA3MTU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPVxcbiA3MTY6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsXFxuIDcxNzpcXHRcXHRcXHRcXHQgICAgIHUuaWJzcy5jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmspO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcXG4gNzIwOlxcdFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSk7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdC8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqL1xcbiA3MjM6XFx0XFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LCBcXHUwMDI2c2RhdGEtXFx1MDAzZXdvcmspO1xcbiA3MjQ6XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gNzI3OlxcdHtcXG4gNzI4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuIDcyOTpcXHRcXHRpbnQgZXJyO1xcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHQvKiBpZiB0aGUgY3VycmVudCBjaGFubmVsIGlzIGEgREZTIGNoYW5uZWwsIG1hcmsgdGhlIGNoYW5uZWwgYXNcXG4gNzMyOlxcdFxcdCAqIHVuYXZhaWxhYmxlLlxcbiA3MzM6XFx0XFx0ICovXFxuIDczNDpcXHRcXHRlcnIgPSBjZmc4MDIxMV9jaGFuZGVmX2Rmc19yZXF1aXJlZChzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODozMS41Njk2OTYyMDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMzQ1Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcG9zaXRpb24gb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGVtOlxuXG4qKkFuYWx5emluZyBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGFuZCBgc3RhX2luZm9fZmx1c2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIHdlJ3JlIGxlYXZpbmcgYW4gSUJTUyAoSW5kZXBlbmRlbnQgQmFzaWMgU2VydmljZSBTZXQpIG5ldHdvcmsgYW5kIGhvdyB3ZSdyZSBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGluZm9ybWF0aW9uLiBUaGlua2luZyBhYm91dCBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGZpcnN0Li4uIGl0J3MgdGhlIGV4aXQgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgZ3JhY2VmdWwgKG9yIG5vdC1zby1ncmFjZWZ1bCwgZGVwZW5kaW5nIG9uIGNpcmN1bXN0YW5jZXMpIGRlcGFydHVyZS4gSSdtIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGRlYXV0aGVudGljYXRpbmcgc3RhdGlvbnMsIHBvc3NpYmx5IHNlbmRpbmcgZGlzYXNzb2NpYXRpb24gZnJhbWVzLCBhbmQgZ2VuZXJhbGx5IG1ha2luZyBzdXJlIHdlJ3JlIG5vIGxvbmdlciBwYXJ0IG9mIHRoYXQgc3BlY2lmaWMgSUJTUyBCU1NJRC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdXBkYXRpbmcgb3VyIGludGVybmFsIHN0YXRlIHRvIHJlZmxlY3QgdGhlIG5ldHdvcmsgY2hhbmdlIOKAkyBwZXJoYXBzIGNsZWFyaW5nIG91ciBJQlNTLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgYW55IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyBJQlNTIHNjZW5hcmlvcyBjYW4gYmUgdHJpY2t5IHdpdGggbXVsdGlwbGUgc3RhdGlvbnMgY29uY3VycmVudGx5IHZ5aW5nIGZvciBuZXR3b3JrIGFjY2Vzcy5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgc3RhX2luZm9fZmx1c2hgLiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQncyBhYm91dCBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGVudHJpZXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBvZiBhZ2luZyBtZWNoYW5pc21zLCBsaWtlIHRpbWVvdXRzLiBIb3cgb2Z0ZW4gZG9lcyBpdCBydW4/IERvZXMgaXQgY2hlY2sgZm9yIGFjdGl2ZSBkYXRhIHRyYW5zbWlzc2lvbiBvciBqdXN0IGEgc2ltcGxlIHRpbWVyPyBBcmUgdGhlcmUgYW55IGhldXJpc3RpY3MgaW52b2x2ZWQgdG8gcHJldmVudCBwcmVtYXR1cmVseSBmbHVzaGluZyBhY3RpdmUgc3RhdGlvbnMsIHBlcmhhcHMgZHVlIHRvIHRlbXBvcmFyeSBuZXR3b3JrIGdsaXRjaGVzPyBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgYSBsYXJnZSBudW1iZXIgb2Ygc3RhdGlvbnMsIGFuZCB3aGV0aGVyIGl0IHVzZXMgYW55IHNtYXJ0IGluZGV4aW5nIG9yIGxvb2t1cCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIG92ZXJoZWFkLiBNb3Jlb3ZlciwgSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIHN0YWNrIC0tIGhvdyBkb2VzIGl0IGVuc3VyZSB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgaXMgaW5mb3JtZWQgb2YgdGhlIHN0YXRpb24ncyByZW1vdmFsPyBJcyBpdCB0aWVkIGludG8gdGhlIGJlYWNvbmluZyBwcm9jZXNzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW55IHBvdGVudGlhbCBmdXR1cmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2FtZSBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjM2LjQ4MzE1NTYyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuMTgxMTpcXHRcXG4xODEyOlxcdFxcdGlmaWJzcy1cXHUwMDNlc3NpZF9sZW4gPSAwO1xcbjE4MTM6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuMTgxNDpcXHRcXHRldGhfemVyb19hZGRyKGlmaWJzcy1cXHUwMDNlYnNzaWQpO1xcbjE4MTU6XFx0XFxuMTgxNjpcXHRcXHQvKiByZW1vdmUgYmVhY29uICovXFxuMTgxNzpcXHRcXHRrZnJlZShzZGF0YS1cXHUwMDNldS5pYnNzLmllKTtcXG4xODE4OlxcdFxcdHNkYXRhLVxcdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xcbjE4MTk6XFx0XFx0c2RhdGEtXFx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cXG4xODIyOlxcdFxcdG1lbXNldChcXHUwMDI2aWZpYnNzLVxcdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhKSk7XFxuMTgyMzpcXHRcXHRtZW1zZXQoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhX21hc2spKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzZGF0YS1cXHUwMDNlc2tiX3F1ZXVlKTtcXG4xODI2OlxcdFxcbjE4Mjc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3MudGltZXIpO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRyZXR1cm4gMDtcXG4xODMwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MzYuNDgzMzE5ODExWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODA0MTc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogYHN0YV9pbmZvX2ZsdXNoYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzdGFfaW5mb19mbHVzaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb25hbCBjb250ZXh0LiBQcmVzdW1hYmx5LCB0aGlzIGlzIHJlbGF0ZWQgdG8gc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlbHkgdGllZCB0byBhbiA4MDIuMTEgaW1wbGVtZW50YXRpb24sIGdpdmVuIHRoZSBcInN0YVwiIHByZWZpeC4gVGhlIFwiZmx1c2hcIiBwYXJ0IHN1Z2dlc3RzIGEgY2xlYXJpbmcsIGludmFsaWRhdGlvbiwgb3IgcmVtb3ZhbCBhY3Rpb24sIGFsbW9zdCBjZXJ0YWlubHkgZGVhbGluZyB3aXRoIGNhY2hlZCBvciBzdG9yZWQgZGF0YSBhYm91dCBzcGVjaWZpYyBzdGF0aW9ucy4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6ICpXaGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmbHVzaGVkPyAqV2h5KiBpcyBpdCBiZWluZyBmbHVzaGVkICh3aGF0IHRyaWdnZXJzIHRoZSBvcGVyYXRpb24pPyBBbmQgKndoZW4qIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBzdGF0aW9uIG1hbmFnZW1lbnQgdG8gZ2V0IGEgY29tcGxldGUgZ3Jhc3Agb2YgaXRzIGltcGFjdC4gSSBiZXQgdGhpcyBpcyBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgc3RhbGUgb3Igb3V0ZGF0ZWQgc3RhdGlvbiBlbnRyaWVzIGZyb20gZ3VtbWluZyB1cCB0aGUgd29ya3MsIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXV0aWxpemVkIHdpcmVsZXNzIGVudmlyb25tZW50LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQwLjY2Mzc0MDE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MzQ0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHN0YV9pbmZvX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NTQ9aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NjYtICovXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTY3OnN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk2OC1cXHRcXHRcXHRcXHQgaW50IGxpbmtfaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQwLjcxNTE5Mzg3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkwNzczMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0YV9pbmZvLmhgIGZvciBzb21lIDgwMi4xMSBEZXRhaWxzKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBhdCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmhgLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDk1MCBhbmQgOTgwLiBUaGF0IHJlZ2lvbiB1c3VhbGx5IGhvbGRzIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscywgcHJvYmFibHkgc29tZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gc3RhdGlvbiBzdGF0ZSwgcmF0ZSBjb250cm9sIG9yIHNvbWV0aGluZyBhYm91dCB0aGUgdmFyaW91cyBmbGFncyB1c2VkIHRoZXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoYXQgcGFydCBvZiB0aGUgZmlsZSB0byBiZSBzdXJlLiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUgd2l0aG91dCB0b28gbXVjaCBkaWdnaW5nLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODo0NC4xMDU5Njg2MjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3N0YV9pbmZvLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdCAqXFx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcXG4gOTUxOlxcdCAqXFx0ICAgICByZW1vdmVkLlxcbiA5NTI6XFx0ICogQGRvX25vdF9mbHVzaF9zdGE6IGEgc3RhdGlvbiB0aGF0IHNob3VsZG4ndCBiZSBmbHVzaGVkLlxcbiA5NTM6XFx0ICovXFxuIDk1NDpcXHRpbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcXG4gOTU1OlxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSk7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdC8qKlxcbiA5NTg6XFx0ICogc3RhX2luZm9fZmx1c2ggLSBmbHVzaCBtYXRjaGluZyBTVEEgZW50cmllcyBmcm9tIHRoZSBTVEEgdGFibGVcXG4gOTU5OlxcdCAqXFxuIDk2MDpcXHQgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcmVtb3ZlZCBTVEEgZW50cmllcy5cXG4gOTYxOlxcdCAqXFxuIDk2MjpcXHQgKiBAc2RhdGE6IHNkYXRhIHRvIHJlbW92ZSBhbGwgc3RhdGlvbnMgZnJvbVxcbiA5NjM6XFx0ICogQGxpbmtfaWQ6IGlmIGdpdmVuIChcXHUwMDNlPTApLCBhbGwgdGhvc2UgU1RBIGVudHJpZXMgdXNpbmcgQGxpbmtfaWQgb25seVxcbiA5NjQ6XFx0ICpcXHQgICAgIHdpbGwgYmUgcmVtb3ZlZC4gSWYgLTEgaXMgcGFzc2VkLCBhbGwgU1RBIGVudHJpZXMgd2lsbCBiZVxcbiA5NjU6XFx0ICpcXHQgICAgIHJlbW92ZWQuXFxuIDk2NjpcXHQgKi9cXG4gOTY3OlxcdHN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiA5Njg6XFx0XFx0XFx0XFx0XFx0IGludCBsaW5rX2lkKVxcbiA5Njk6XFx0e1xcbiA5NzA6XFx0XFx0cmV0dXJuIF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCBsaW5rX2lkLCBOVUxMKTtcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0dm9pZCBzdGFfc2V0X3JhdGVfaW5mb190eChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4gOTc0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLFxcbiA5NzU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaW5mbyk7XFxuIDk3NjpcXHR2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbiA5Nzc6XFx0XFx0XFx0ICAgYm9vbCB0aWRzdGF0cyk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdHZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyk7XFxuIDk4MTpcXHRcXG4gOTgyOlxcdHUzMiBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHR2b2lkIGllZWU4MDIxMV9zdGFfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODo0NC4xMDYwNTEyMjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Nzg0MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fc3RhX2luZm9fZmx1c2hgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYF9fc3RhX2luZm9fZmx1c2hgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSBhbmQgaW1wYWN0LiBHaXZlbiB0aGUgbmFtZSwgXCJmbHVzaFwiIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBjbGVhcmluZyBvciBpbnZhbGlkYXRpb24gb3BlcmF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBzdGF0aW9uIChTVEEpIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCoga2luZCBvZiBzdGF0aW9uIGluZm8sICp3aGVyZSogaXQncyBzdG9yZWQsIGFuZCAqd2h5KiBpdCBuZWVkcyBmbHVzaGluZy5cblxuTXkgYnJhaW4ncyBpbW1lZGlhdGVseSBzdGFydGluZyB0byBydW4gdGhyb3VnaCBwb3RlbnRpYWwgaW1wbGljYXRpb25zOiBJcyB0aGlzIGEgY2FjaGU/IEEgbG9va3VwIHRhYmxlPyBEYXRhIHN0b3JlZCBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBvciBkZXZpY2U/IElzIHRoaXMgYSBjbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBhIHN0YXRpb24gZGlzY29ubmVjdHMsIG9yIG1heWJlIGR1cmluZyBhIGNoYW5uZWwgc3dpdGNoIG9yIG90aGVyIGRpc3J1cHRpdmUgZXZlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCB3aXRoIHRoZSBmdW5jdGlvbj8gRG9lcyBpdCBpbnZvbHZlIHJlbGVhc2luZyByZXNvdXJjZXM/IElmIHNvLCB3aGF0IGtpbmQ/IElmIHRoZXJlJ3MgYW4gaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24sIGhvdyBkb2VzIHRoaXMgYWZmZWN0IG15IHdvcms/XG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQ/IEEgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuZCBzYWZldHksIHNvIGxldCdzIHN0YXJ0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQ4LjgwMzg5NDk2MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNzc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zdGFfaW5mb19mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTE3MDQ9c3RhdGljIGludCBpZWVlODAyMTFfc3RvcF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTE3NzUtXFxubmV0L21hYzgwMjExL2NmZy5jOjE3NzY6XFx0X19zdGFfaW5mb19mbHVzaChzZGF0YSwgdHJ1ZSwgbGlua19pZCwgTlVMTCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE3NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTQwMTA9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNDEyMy1cXHQvKiBSZW1vdmUgVERMUyBwZWVycyAqL1xcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NDEyNDpcXHRfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgLTEsIGFwX3N0YSk7XFxubmV0L21hYzgwMjExL21sbWUuYy00MTI1LVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTYzNj12b2lkIHN0YV9pbmZvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNjQzLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE2NDQ6aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTY0NS1cXHRcXHQgICAgIGludCBsaW5rX2lkLCBzdHJ1Y3Qgc3RhX2luZm8gKmRvX25vdF9mbHVzaF9zdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NDA9dm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk0Mi0vKipcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5NDM6ICogX19zdGFfaW5mb19mbHVzaCAtIGZsdXNoIG1hdGNoaW5nIFNUQSBlbnRyaWVzIGZyb20gdGhlIFNUQSB0YWJsZVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk0NC0gKlxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTUzLSAqL1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjk1NDppbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NTUtXFx0XFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTk2Nz1zdGF0aWMgaW5saW5lIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk2OS17XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTcwOlxcdHJldHVybiBfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgbGlua19pZCwgTlVMTCk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTcxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NDguODQ5MTc1NjE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjEwNDY5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AgLSBMaW5lIDE2NDQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE2NDQgaW4gYHN0YV9pbmZvLmNgLiBCYXNlZCBvbiBjb250ZXh0LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21lIHN0YXRpb24gaW5mb3JtYXRpb24gaGFuZGxpbmcuIEdpdmVuIHRoZSBmaWxlIG5hbWUsIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gcmVnYXJkaW5nIGEgcGFydGljdWxhciBzdGF0aW9uLiBMaW5lIDE2NDQgaXMgYSBtYXJrZXI7IGl04oCZcyB0aGUgbG9jYXRpb24gaW4gdGhlIGNvZGUgd2hlcmUgSeKAmW0gZ29pbmcgdG8gc3RhcnQgbXkgZXhhbWluYXRpb24uIEZyb20gaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIGJlaW5nIG1hZGUsIHRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzLCBzcGVjaWZpY2FsbHkgd2hhdCBmdW5jdGlvbiBjYWxscyBhcmUgbWFkZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbGluZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gVGhlIHNwZWNpZmljIGdvYWwgd2lsbCBiZSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJ4oCZbSBjdXJyZW50bHkgb24uIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHdoYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTIuNDEwMjI1MDAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjQ0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjQ0OlxcdGludCBfX3N0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIHZsYW5zLFxcbjE2NDU6XFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKVxcbjE2NDY6XFx0e1xcbjE2NDc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuMTY0ODpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDtcXG4xNjQ5OlxcdFxcdExJU1RfSEVBRChmcmVlX2xpc3QpO1xcbjE2NTA6XFx0XFx0aW50IHJldCA9IDA7XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMTY1MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRXQVJOX09OKHZsYW5zIFxcdTAwMjZcXHUwMDI2IHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCk7XFxuMTY1NjpcXHRcXHRXQVJOX09OKHZsYW5zIFxcdTAwMjZcXHUwMDI2ICFzZGF0YS1cXHUwMDNlYnNzKTtcXG4xNjU3OlxcdFxcbjE2NTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXN0YV9saXN0LCBsaXN0KSB7XFxuMTY1OTpcXHRcXHRcXHRpZiAoc2RhdGEgIT0gc3RhLVxcdTAwM2VzZGF0YSBcXHUwMDI2XFx1MDAyNlxcbjE2NjA6XFx0XFx0XFx0ICAgICghdmxhbnMgfHwgc2RhdGEtXFx1MDAzZWJzcyAhPSBzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MpKVxcbjE2NjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTY2MjpcXHRcXG4xNjYzOlxcdFxcdFxcdGlmIChzdGEgPT0gZG9fbm90X2ZsdXNoX3N0YSlcXG4xNjY0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRcXHRcXHRpZiAobGlua19pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzIFxcdTAwMjZcXHUwMDI2XFxuMTY2NzpcXHRcXHRcXHQgICAgIShzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpXFxuMTY2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNjY5OlxcdFxcbjE2NzA6XFx0XFx0XFx0aWYgKCFXQVJOX09OKF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MShzdGEpKSlcXG4xNjcxOlxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzdGEtXFx1MDAzZWZyZWVfbGlzdCwgXFx1MDAyNmZyZWVfbGlzdCk7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdHJldCsrO1xcbjE2NzQ6XFx0XFx0fVxcbjE2NzU6XFx0XFxuMTY3NjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmZyZWVfbGlzdCkpIHtcXG4xNjc3OlxcdFxcdFxcdGJvb2wgc3VwcG9ydF9wMnBfcHMgPSB0cnVlO1xcbjE2Nzg6XFx0XFxuMTY3OTpcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xNjgwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgXFx1MDAyNmZyZWVfbGlzdCwgZnJlZV9saXN0KSB7XFxuMTY4MTpcXHRcXHRcXHRcXHRpZiAoIXN0YS1cXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxcbjE2ODI6XFx0XFx0XFx0XFx0XFx0c3VwcG9ydF9wMnBfcHMgPSBmYWxzZTtcXG4xNjgzOlxcdFxcdFxcdFxcdF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MihzdGEsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTIuNDEwMzk0OTAyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MTIxNjQ5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElCU1MgRGlzY29ubmVjdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggYSB0cmlja3kgc3luY2hyb25pemF0aW9uIGlzc3VlIHJlbGF0ZWQgdG8gdGVhcmluZyBkb3duIElCU1MgaW50ZXJmYWNlcyBhbmQgc3RhdGlvbiBpbmZvcm1hdGlvbiBmbHVzaGluZy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgc3RhX2luZm9fZmx1c2goKWAgYW5kIGBuZXRpZl9jYXJyaWVyX29mZigpYCBhcmUgb3JkZXJlZCB3aGVuIGFuIElCU1MgZGlzY29ubmVjdCBoYXBwZW5zLlxuXG5IZXJlJ3Mgd2hhdCBJIHNlZTogYHN0YV9pbmZvX2ZsdXNoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBmbHVzaGVkIHN0YXRpb25zIChgcmV0YCkuIFdoZW4gc3RhdGlvbnMgKmFyZSogZmx1c2hlZCAoYHJldCBcdTAwM2UgMGAgd2hpY2ggbWVhbnMgYCFsaXN0X2VtcHR5KFx1MDAyNmZyZWVfbGlzdClgKSwgYHN5bmNocm9uaXplX25ldCgpYCBnZXRzIGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC4gQ3J1Y2lhbGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkLCBzbyBgcmV0YCBpcyAwKSwgdGhlbiBgc3luY2hyb25pemVfbmV0KClgICp3YXNuJ3QqIGNhbGxlZCBmcm9tIHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC5cblxuVGhlIG9yaWdpbmFsIGNvZGUgZGlkIGBuZXRpZl9jYXJyaWVyX29mZigpYCAqYWZ0ZXIqIGZsdXNoaW5nIHN0YXRpb25zIGFuZCBoYW5kbGluZyBpbmNvbXBsZXRlIHN0YXRpb25zLiBUaGVuLCBlaXRoZXIgYGNzYV9jb25uZWN0aW9uX2Ryb3Bfd29ya2Agb3IgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCB3b3VsZCBjYWxsIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBwYXRjaCBzaGlmdHMgdGhpbmdzIGFyb3VuZDogYG5ldGlmX2NhcnJpZXJfb2ZmKClgIG5vdyBoYXBwZW5zICpiZWZvcmUqIHN0YXRpb24gZmx1c2hpbmcuIEltcG9ydGFudGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkKSwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBjYWxscyBgc3luY2hyb25pemVfbmV0KClgIGluIGBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxscyBpbiBgY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBoYXZlIGJlZW4gcmVtb3ZlZCwgYmVjYXVzZSBgc3luY2hyb25pemVfbmV0KClgIGlzIG5vdyBndWFyYW50ZWVkIHRvIGhhcHBlbiBhZnRlciB0aGUgY2FycmllciBpcyBvZmYuXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbSwgbGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL1JDVSBpc3N1ZSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3Mgb2YgSUJTUyBpbnRlcmZhY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN0YXRpb25zLiBUaGUgY2hhbmdlIGluIG9yZGVyaW5nIGVuc3VyZXMgdGhhdCB0aGUgbmV0d29yayBzdGFjayBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYmVmb3JlIHN0YXRpb24gaW5mb3JtYXRpb24gaXMgY2xlYXJlZC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSd2ZSB3YWxrZWQgdGhyb3VnaCB0aGUgcGF0Y2g6XG5cbjEuICBJdCBkb2Vzbid0IGFwcGVhciB0byBwYXNzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZS5cbjIuICBUaGVyZSdzIG5vIGJyYW5jaGluZyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBzdGFfaW5mb19mbHVzaCgpYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgYSB3ZWxsIGRlZmluZWQgaW50ICgwIG9yIGEgcG9zaXRpdmUgbnVtYmVyKS5cbjMuICBUaGUgcGF0Y2ggZG9lc24ndCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgVGhlcmUgYXJlbid0IGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuNS4gIFRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24tZm9jdXNlZCBjaGFuZ2U7IHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlIGhlcmUuXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGZvY3VzIG9uIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBjYXJyaWVyIHN0YXRlLCB0aGUgcmVsZXZhbnQgdG9vbHMgZm9yIGZpbmRpbmcgYnVncyBoZXJlIHdvdWxkIGJlIEtBU0FOLCBMT0NLREVQLCBhbmQgUkNVIGRlYnVnZ2luZywgd2hpY2ggYXJlIGNvbmNlcm5lZCB3aXRoIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cbkxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTguMzIyNTYzNDIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmd4sv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 18:05:29 +0000 UTC FinishedAt: 2026-08-31 18:49:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "5ba54393dcd7adf75a9f39f5a933b1538349cad5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "f9fc9487-e36e-49ff-8d15-3fce4a3704e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_ibss_leave", "ieee80211_ibss_join", "ieee80211_leave_ibss" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2lic3Nfam9pbiYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbGVhdmVfaWJzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5pbmRleCA2ZTM2YjA5ZmU5N2Y4Li42Y2EyZmYzNTRlNzY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lic3MuY1xuQEAgLTY3NSw3ICYjNDM7Njc1LDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcbiBcdGlmaWJzcy1cdTAwM2VzdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIO1xuIFxuLVx0c3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTtcbiYjNDM7XHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSlcbiYjNDM7XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuQEAgLTY4OSw4ICYjNDM7NjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbi1cbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xuQEAgLTcxNyw3ICYjNDM7NzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gXG4gXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cbkBAIC0xODIzLDggJiM0MzsxODIyLDYgQEAgaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVx1MDAzZWh0X2NhcGEpKTtcbiBcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaykpO1xuIFxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4tXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbiBcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcy50aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfaWJzc19sZWF2ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaWJzc19qb2luJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9sZWF2ZV9pYnNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggNmUzNmIwOWZlOTdmOC4uNmNhMmZmMzU0ZTc2OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC02NzUsNyAmIzQzOzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiAKIAlpZmlic3MtJmd0O3N0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CiAKLQlzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKQomIzQzOwkJc3luY2hyb25pemVfbmV0KCk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtpZmlic3MtJmd0O2luY29tcGxldGVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbXA7aWZpYnNzLSZndDtpbmNvbXBsZXRlX3N0YXRpb25zKSkgewpAQCAtNjg5LDggJiM0Mzs2OTEsNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO2lmaWJzcy0mZ3Q7aW5jb21wbGV0ZV9sb2NrKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLSZndDtkZXYpOwotCiAJc2RhdGEtJmd0O3ZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTsKIAlzZGF0YS0mZ3Q7dmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTsKIAlzZGF0YS0mZ3Q7dmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKQEAgLTcxNyw3ICYjNDM7NzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTsKIAogCWllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc2RhdGEpOwotCXN5bmNocm9uaXplX3JjdSgpOwogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUpOwogCiAJLyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovCkBAIC0xODIzLDggJiM0MzsxODIyLDYgQEAgaW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCW1lbXNldCgmYW1wO2lmaWJzcy0mZ3Q7aHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy0mZ3Q7aHRfY2FwYSkpOwogCW1lbXNldCgmYW1wO2lmaWJzcy0mZ3Q7aHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLSZndDtodF9jYXBhX21hc2spKTsKIAotCXN5bmNocm9uaXplX3JjdSgpOwotCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7c2RhdGEtJmd0O3NrYl9xdWV1ZSk7CiAKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3NkYXRhLSZndDt1Lmlic3MudGltZXIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3CgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElCU1MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIGFuZCB0aGUgYWNjb21wYW55aW5nIHRvb2xzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgZGlmZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gRGlzY29ubmVjdGlvbnMsIENTQSAoQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50KSBoYW5kbGluZywgYW5kIGxlYXZpbmcgSUJTUyBuZXR3b3JrcyBhcmUgdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQgaGVyZS4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGluIHBsYXkuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGFsc28gYmUgdXNpbmcgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgaW1wb3J0YW50IGtleXdvcmRzIGFuZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUgYXMgbmVjZXNzYXJ5IHRvIHNwZWVkIHVwIG15IGFuYWx5c2lzLiBBbmQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgIHRvIHNlZSB3aGF0IGNvbXBpbGUtdGltZSBvcHRpb25zIGFmZmVjdCB0aGVzZSBJQlNTIGZ1bmN0aW9uYWxpdGllcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlYnNzaWQsIGlmaWJzcy1cdTAwM2Vzc2lkLFxuIDY2NjpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4sXG4gNjY3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxuIDY2ODpcdFx0XHRcdFx0XHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXHUwMDNlcHJpdmFjeSkpO1xuIDY2OTpcdFxuIDY3MDpcdFx0XHRpZiAoY2Jzcykge1xuIDY3MTpcdFx0XHRcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MjpcdFx0XHRcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MzpcdFx0XHR9XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiA2Nzc6XHRcbiA2Nzg6XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4gNjc5Olx0XHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXG4gNjgwOlx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDY4MTpcdFxuIDY4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY4MzpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuIDY4NDpcdFx0XHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zLFxuIDY4NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7XG4gNjg2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnN0YS1cdTAwM2VsaXN0KTtcbiA2ODc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIHN0YSk7XG4gNjkwOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiA2OTE6XHRcdH1cbiA2OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY5MzpcdFxuIDY5NDpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xuIDY5NTpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTtcbiA2OTY6XHRcdHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XG4gNjk3Olx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcbiA2OTg6XHRcbiA2OTk6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbiA3MDA6XHRcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVx1MDAzZXByZXNwLCBzZGF0YSk7XG4gNzAxOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVx1MDAzZXUuaWJzcy5wcmVzcCwgTlVMTCk7XG4gNzAyOlx0XHRpZiAocHJlc3ApXG4gNzAzOlx0XHRcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0Y2xlYXJfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUxfQkVBQ09OX1NUT1BQRUQsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKTtcbiA3MDY6XHRcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XG4gNzA3Olx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfSUJTUyk7XG4gNzA4Olx0XHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xuIDcwOTpcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDcxMDpcdH1cbiA3MTE6XHRcbiA3MTI6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gNzEzOlx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiA3MTQ6XHR7XG4gNzE1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG4gNzE2Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxuIDcxNzpcdFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gNzE4Olx0XG4gNzE5Olx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbiA3MjA6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIDcyMTpcdFxuIDcyMjpcdFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXG4gNzIzOlx0XHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gNzI3Olx0e1xuIDcyODpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4gNzI5Olx0XHRpbnQgZXJyO1xuIDczMDpcdFxuIDczMTpcdFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXG4gNzMyOlx0XHQgKiB1bmF2YWlsYWJsZS5cbiA3MzM6XHRcdCAqL1xuIDczNDpcdFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWJzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcztcbjE4MTE6XHRcbjE4MTI6XHRcdGlmaWJzcy1cdTAwM2Vzc2lkX2xlbiA9IDA7XG4xODEzOlx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbjE4MTQ6XHRcdGV0aF96ZXJvX2FkZHIoaWZpYnNzLVx1MDAzZWJzc2lkKTtcbjE4MTU6XHRcbjE4MTY6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbjE4MTc6XHRcdGtmcmVlKHNkYXRhLVx1MDAzZXUuaWJzcy5pZSk7XG4xODE4Olx0XHRzZGF0YS1cdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xuMTgxOTpcdFx0c2RhdGEtXHUwMDNldS5pYnNzLmllX2xlbiA9IDA7XG4xODIwOlx0XG4xODIxOlx0XHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cbjE4MjI6XHRcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhKSk7XG4xODIzOlx0XHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2spKTtcbjE4MjQ6XHRcbjE4MjU6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuMTgyNjpcdFxuMTgyNzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5pYnNzLnRpbWVyKTtcbjE4Mjg6XHRcbjE4Mjk6XHRcdHJldHVybiAwO1xuMTgzMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg2CgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNQUM4MDIxMSBhbmQgaXRzIENsZWFudXAgUm91dGluZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAgYXJlIGN1cnJlbnRseSBjb25maWd1cmVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBsaW5rZWQuCgpOZXh0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGNsZWFudXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYSBzdGF0aW9uIGlzIGJlaW5nIGZsdXNoZWQgb3Igd2hlbiBhbiBJQlNTIGlzIGxlYXZpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYWN0aW9ucyBhcmUgdHJpZ2dlcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGBncmVwYCBmb3IgYHN0YV9pbmZvX2ZsdXNoYCBhbmQgdGhlbiB0cmFjayBkb3duIGFsbCBvZiBpdHMgY2FsbGVycy4gU2ltaWxhcmx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIGNhbGxzIGFyZSBtYWRlIHRvIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgb3IgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgbGFzdGx5IEkmIzM5O2xsIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYG1hYzgwMjExX2h3c2ltYCBiZWNhdXNlLCB3ZWxsLCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIHNpbXVsYXRpb24gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSB0aGluZ3MsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgY2xlYW51cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgcGFydHMgb2YgdGhlIGNvZGUgYXJlIHVzZWQsIGFuZCBob3cgdGhleSByZWxhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTMxMDQ9c3RhdGljIGludCBpZWVlODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L21hYzgwMjExL2NmZy5jLTMxMDUte1xubmV0L21hYzgwMjExL2NmZy5jOjMxMDY6XHRyZXR1cm4gaWVlZTgwMjExX2lic3NfbGVhdmUoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMzEwNy19XG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xNzA3PWludCBpZWVlODAyMTFfaWJzc19qb2luKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTgwNy1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTgwODppbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDkte1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE5ODA9aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xOTgxLVx0XHRcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE5ODI6aW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE5ODMtdm9pZCBpZWVlODAyMTFfaWJzc193b3JrKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBtYWM4MDIxMSBJQlNTIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYCByZWxhdGVkIHRvIElCU1MgY29ubmVjdGlvbnMuIFNwZWNpZmljYWxseSwgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3QoKWAgaGFzIGhhZCBgbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtJmd0O2RldilgIG1vdmVkLCBhIGNvbmRpdGlvbmFsIGBzeW5jaHJvbml6ZV9uZXQoKWAgYWRkZWQsIGFuZCBgc3RhX2luZm9fZmx1c2goKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgdmFsdWUuIEFsc28sIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2FzIHJlbW92ZWQgZnJvbSBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yaygpYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlKClgLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIG5sODAyMTEgSUJTUyBjb21tYW5kcywgYW5kIHRoZSB1c2Ugb2YgbWFjODAyMTFfaHdzaW0gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzIGlzIHdvcnRoIGEgZGVlcGVyIGxvb2suIFRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgYWZmZWN0aW5nIHN5bmNocm9uaXphdGlvbiBhbmQgbmV0d29yayBkZXZpY2Ugc3RhdGUgd2l0aGluIElCU1MsIHdoaWNoIGlzIGEga25vd24gaG90YmVkIGZvciB0cmlja3kgcmFjZSBjb25kaXRpb25zLCBVQUZzLCBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gR2V0dGluZyBgbmV0aWZfY2Fycmllcl9vZmZgIGNhbGxlZCBlYXJsaWVyIGFuZCB0aGUgY29uZGl0aW9uYWwgYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGxpa2VseSBhcm91bmQgaG93IHRoaW5ncyBhcmUgdG9ybiBkb3duLiBUaGUgcmVtb3ZhbCBvZiBgc3luY2hyb25pemVfcmN1KClgIGlzIGFsc28gaW50ZXJlc3RpbmcsIGFuZCBpcyBsaWtlbHkgYSBnb29kIHBsYWNlIHRvIGxvb2sgYXQgcG90ZW50aWFsIHJhY2VzLgoKTm93LCBsZXQmIzM5O3MgcGluIGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uLiBXZSBoYXZlIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgIChpbiBjZmcuYykgd2hpY2ggY2FsbHMgYGllZWU4MDIxMV9pYnNzX2xlYXZlYC4gQWxzbywgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGZyb20gb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgTUFDODAyMTFgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgYSBjcnVjaWFsIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0NNQUNcbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUFDODAyMTFfSEFTX1JDXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG4gIDI1Olx0XHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuICAyNjpcdFx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xuICAyNzpcdFx0ZGVmYXVsdCB5XG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlICYjMzk7bWluc3RyZWwmIzM5OyBUWCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBDRkc4MDIxMSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHRpZWQgdG8gYENGRzgwMjExYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSB3aXJlbGVzcyBkcml2ZXIgYW5kIGZlYXR1cmUgY29uZmlndXJhdGlvbiBsaXZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYnVuY2ggb2YgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgcG9pbnRpbmcgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBgQ0ZHODAyMTFgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgbGFuZHNjYXBlIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoYXQgY29yZSB3aXJlbGVzcyBjb21wb25lbnQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGRlcGVuZGVuY2llcywgYnV0IEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTUFDODAyMTEgSFdTSU0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgYE1BQzgwMjExX0hXU0lNYCBmZWF0dXJlLiBNeSB1c3VhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyIHNob3VsZCBiZSBkZWZpbmVkLCBpbmNsdWRpbmcsIGNyaXRpY2FsbHksIHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBgTUFDODAyMTFfSFdTSU1gIG9wdGlvbiB3aWxsIGxpdmUgYW5kIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBiZWRyb2NrIGJlZm9yZSBJIGNhbiB0aGluayBhYm91dCB1c2luZywgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGlic3MuY2AgQ29tcGlsYXRpb24gaW4gYG5ldC9tYWM4MDIxMS9NYWtlZmlsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWJzcy5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5IGlzIGJlaW5nIGNvbXBpbGVkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiBhbmQgdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIHJ1bGVzLCBmbGFncywgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBpYnNzLmNgLiBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG9iamVjdCBmaWxlLCBvciBjb21waWxlZCBkaXJlY3RseT8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBhdCBwbGF5IGhlcmUgYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBvdGhlciB2YXJpYWJsZXM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29tbWFuZHMgYXJlIHJ1biB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGUgKGUuZy4sIGAub2ApIGFuZCBob3cgdGhhdCBvYmplY3QgaXMgdGhlbiBsaW5rZWQgaW50byB0aGUgYnJvYWRlciBgbWFjODAyMTFgIG1vZHVsZSBvciBwb3RlbnRpYWxseSBldmVuIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGJ1aWxkIHN0cnVjdHVyZSBhbmQgcG90ZW50aWFsbHkgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgY29tcGlsYXRpb24gaXNzdWVzIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgY29tcG9uZW50IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTUFDODAyMTEpICYjNDM7PSBtYWM4MDIxMS5vXG4gICAzOlx0XG4gICA0Olx0IyBtYWM4MDIxMSBvYmplY3RzXG4gICA1Olx0bWFjODAyMTEteSA6PSBcXFxuICAgNjpcdFx0bWFpbi5vIHN0YXR1cy5vIFxcXG4gICA3Olx0XHRkcml2ZXItb3BzLm8gXFxcbiAgIDg6XHRcdHN0YV9pbmZvLm8gXFxcbiAgIDk6XHRcdHdlcC5vIFxcXG4gIDEwOlx0XHRhZWFkX2FwaS5vIFxcXG4gIDExOlx0XHR3cGEubyBcXFxuICAxMjpcdFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxuICAxMzpcdFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxuICAxNDpcdFx0dmh0Lm8gXFxcbiAgMTU6XHRcdGhlLm8gXFxcbiAgMTY6XHRcdHMxZy5vIFxcXG4gIDE3Olx0XHRpYnNzLm8gXFxcbiAgMTg6XHRcdGlmYWNlLm8gXFxcbiAgMTk6XHRcdGxpbmsubyBcXFxuICAyMDpcdFx0cmF0ZS5vIFxcXG4gIDIxOlx0XHRtaWNoYWVsLm8gXFxcbiAgMjI6XHRcdHRraXAubyBcXFxuICAyMzpcdFx0YWVzX2NtYWMubyBcXFxuICAyNDpcdFx0YWVzX2dtYWMubyBcXFxuICAyNTpcdFx0Zmlsc19hZWFkLm8gXFxcbiAgMjY6XHRcdGNmZy5vIFxcXG4gIDI3Olx0XHRldGh0b29sLm8gXFxcbiAgMjg6XHRcdHJ4Lm8gXFxcbiAgMjk6XHRcdHNwZWN0bWdtdC5vIFxcXG4gIDMwOlx0XHR0eC5vIFxcXG4gIDMxOlx0XHRrZXkubyBcXFxuICAzMjpcdFx0dXRpbC5vIHBhcnNlLm8gXFxcbiAgMzM6XHRcdHdtZS5vIFxcXG4gIDM0Olx0XHRjaGFuLm8gXFxcbiAgMzU6XHRcdHRyYWNlLm8gbWxtZS5vIFxcXG4gIDM2Olx0XHR0ZGxzLm8gXFxcbiAgMzc6XHRcdG9jYi5vIFxcXG4gIDM4Olx0XHRhaXJ0aW1lLm8gXFxcbiAgMzk6XHRcdGVodC5vXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzMxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElCU1MgaW4gbWFjODAyMTEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJQlNTIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCB3aXRoaW4gYG1hYzgwMjExYC4gVGhlIGZpcnN0IHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgYGlic3Mub2AgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHRoZSBtb2R1bGUuIEFuZCwgb2YgY291cnNlLCBgbWFjODAyMTFgIHJlbGllcyBvbiBgQ0ZHODAyMTFgIHdoaWNoIGlzIHRoZSBzdGFuZGFyZC4gSWYgSSYjMzk7bSB0ZXN0aW5nIGhhcmR3YXJlIGVtdWxhdGlvbiBJJiMzOTtkIGJlIHVzaW5nIGBNQUM4MDIxMV9IV1NJTWAsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiBzb21lIGtleSBzeW1ib2xzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlc2U6IGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgYW5kIGBpZWVlODAyMTFfaWJzc19qb2luYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBjb3JlIElCU1Mgam9pbiBhbmQgbGVhdmUgb3BlcmF0aW9ucy4KCk5vdyBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vdGhpbmcgZWxzZSBvZiBpbXBvcnRhbmNlIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBzbyBJJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoYXQgZmlsZSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IC4qXFwoLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWJzcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmM9Mzg9aWVlZTgwMjExX2lic3NfYnVpbGRfcHJlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0yMTAtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjIxMTpzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lic3MuYy0yMTItXHRcdFx0XHQgICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IGludCBiZWFjb25faW50LFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgxLVxubmV0L21hYzgwMjExL2lic3MuYzozODI6c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTM4My1cdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKVxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNDU5LVxubmV0L21hYzgwMjExL2lic3MuYzo0NjA6aW50IGllZWU4MDIxMV9pYnNzX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTQ2MS1cdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY3NhX3NldHRpbmdzICpjc2Ffc2V0dGluZ3MsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy01MDctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjUwODppbnQgaWVlZTgwMjExX2lic3NfZmluaXNoX2NzYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTY0ICpjaGFuZ2VkKVxubmV0L21hYzgwMjExL2lic3MuYy01MDkte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTM5LVxubmV0L21hYzgwMjExL2lic3MuYzo1NDA6dm9pZCBpZWVlODAyMTFfaWJzc19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy01NDEte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTQ3LVxubmV0L21hYzgwMjExL2lic3MuYzo1NDg6c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTQ5LVx0X19hY3F1aXJlcyhSQ1UpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz01NzQ9aWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmJzc2lkLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjI2LVxubmV0L21hYzgwMjExL2lic3MuYzo2Mjc6c3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy02Mjgte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjUyLVxubmV0L21hYzgwMjExL2lic3MuYzo2NTM6c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjU0LXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcxMS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6NzEyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzEzLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy03MjUtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjcyNjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzI3LXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTg4NT1pZWVlODAyMTFfcnhfbWdtdF9zcGVjdHJ1bV9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTA4LVxubmV0L21hYzgwMjExL2lic3MuYzo5MDk6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkxMC1cdFx0XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy05MjItXG5uZXQvbWFjODAyMTEvaWJzcy5jOjkyMzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkyNC1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTUzLVxubmV0L21hYzgwMjExL2lic3MuYzo5NTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtOTU1LVx0XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTA3My1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTA3NDpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzUtXHRcdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjExNjg6dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjktXHRcdFx0ICAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyMTgtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjEyMTk6c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3Nfc3RhX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTIyMC17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMjU3LVxubmV0L21hYzgwMjExL2lic3MuYzoxMjU4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTI1OS17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMjg1LVxubmV0L21hYzgwMjExL2lic3MuYzoxMjg2OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyODcte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMxOS1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTMyMDpzdGF0aWMgdW5zaWduZWQgaW50IGlic3Nfc2V0dXBfY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMyMS1cdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoqY2hhbm5lbHMsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xMzUyPWllZWU4MDIxMV9pYnNzX3NldHVwX3NjYW5fY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTMtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjEzOTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTUte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTQ4Mi1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTQ4MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODQtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpyZXEpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYz0xNTQ5PXN0YXRpY1xubmV0L21hYzgwMjExL2lic3MuYzoxNTUwOnZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lic3MuYy0xNTUxLVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbixcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE1NzYtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE1Nzc6dm9pZCBpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTU3OC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjMyLVxubmV0L21hYzgwMjExL2lic3MuYzoxNjMzOnZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTYzNC17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjcxLVxubmV0L21hYzgwMjExL2lic3MuYzoxNjcyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L21hYzgwMjExL2lic3MuYy0xNjczLXtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzktXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2ODA6dm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTY4MS17XG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xNjkxLS8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2OTI6dm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2OTMte1xuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwNi1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTcwNzppbnQgaWVlZTgwMjExX2lic3Nfam9pbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwOC1cdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcylcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDctXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE4MDg6aW50IGllZWU4MDIxMV9pYnNzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL2lic3MuYy0xODA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNzYKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElCU1MgRGlzY29ubmVjdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gSUJTUyBtb2RlIGRpc2Nvbm5lY3Rpb24gYW5kIGNhcnJpZXIgaGFuZGxpbmcuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBjb25maWd1cmF0aW9uczogYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYW5kLCBjcml0aWNhbGx5LCBgTUFDODAyMTFfSFdTSU1gLiBJZiB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIGFzIEkgZ28gdGhyb3VnaCB0aGlzOiBgaWVlZTgwMjExX2lic3NfbGVhdmVgLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgLiBUaG9zZSBmdW5jdGlvbnMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBpcyBpbmRlZWQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCk5vdywgdGhlIG1haW4gcXVlc3Rpb246IHNob3VsZCBgV29ydGhGdXp6aW5nYCBiZSBlbmFibGVkIGhlcmU/IFdlbGwsIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGRpc2Nvbm5lY3Rpb24gaW4gSUJTUyBtb2RlIGFuZCB0aGUgdW5kZXJseWluZyBjYXJyaWVyIGhhbmRsaW5nIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIGFsd2F5cyBjb21wbGV4LiBUaGUgcmVhbGx5IGdvb2QgbmV3cyBpcyB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGFuZCBgbmV0bGluayBubDgwMjExYCwgc28gdGhhdCYjMzk7cyBhIGh1Z2UgcGx1cy4gV2UgYWxzbyBoYXZlIHdlbGwtZGVmaW5lZCBmb2N1cyBzeW1ib2xzIGFuZCB0aG9zZSBjcnVjaWFsIGNvbmZpZ3MgYXJlIHZlcmlmaWVkLCBzbyBJIGNhbiBzZWUgd2hlcmUgdGhpcyBjb3VsZCBiZSBiZW5lZmljaWFsLgoKTG9va3MgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O2xsIGZsYWcgdGhpcyB0byBiZSBzZXQgYXMgYSBmdXp6aW5nIGNhbmRpZGF0ZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9pYnNzX2xlYXZlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9pYnNzX2pvaW4mIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2xlYXZlX2lic3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2FycmllciBvZmYgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkdXJpbmcgSUJTUyBkaXNjb25uZWN0aW9uIGFuZCB0ZWFyZG93biBpbiBtYWM4MDIxMSwgd2hpY2ggYWZmZWN0cyBzdGF0aW9uIGZsdXNoIHN5bmNocm9uaXphdGlvbiBhbmQgUkNVIGJlaGF2aW9yIGluIElCU1MgbmV0d29ya3MuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBubDgwMjExIHVzZXItc3BhY2UgY29tbWFuZHMgdXNpbmcgc2ltdWxhdGVkIHJhZGlvcyAobWFjODAyMTFfaHdzaW0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2lic3NfbGVhdmUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2lic3Nfam9pbiYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbGVhdmVfaWJzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhYjUwY2NlYmU3MTllZGNiNjYyYTNmYTA3NTZkNThlNDRjNmM1NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNjc1LDcgJiM0Mzs2NzUsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogCiAJaWZpYnNzLSZndDtzdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOwogCi0Jc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtJmd0O2Rldik7CiYjNDM7CWlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSkKJiM0MzsJCXN5bmNocm9uaXplX25ldCgpOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7aWZpYnNzLSZndDtpbmNvbXBsZXRlX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2lmaWJzcy0mZ3Q7aW5jb21wbGV0ZV9zdGF0aW9ucykpIHsKQEAgLTY4OSw4ICYjNDM7NjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtpZmlic3MtJmd0O2luY29tcGxldGVfbG9jayk7CiAKLQluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0mZ3Q7ZGV2KTsKLQogCXNkYXRhLSZndDt2aWYuY2ZnLmlic3Nfam9pbmVkID0gZmFsc2U7CiAJc2RhdGEtJmd0O3ZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7CiAJc2RhdGEtJmd0O3ZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7CkBAIC03MTcsNyAmIzQzOzcxNyw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCSAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7CiAKIAlpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFtcDtzZGF0YS0mZ3Q7c2tiX3F1ZXVlKTsKIAogCS8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqLwpAQCAtMTgyMyw4ICYjNDM7MTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAltZW1zZXQoJmFtcDtpZmlic3MtJmd0O2h0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtJmd0O2h0X2NhcGEpKTsKIAltZW1zZXQoJmFtcDtpZmlic3MtJmd0O2h0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy0mZ3Q7aHRfY2FwYV9tYXNrKSk7CiAKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUpOwogCiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtzZGF0YS0mZ3Q7dS5pYnNzLnRpbWVyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpYnNzLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBgbmV0L21hYzgwMjExL2lic3MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyBzb21lIGZvY3VzZWQgY2hhbmdlcywgcHJpbWFyaWx5IHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgYnJlYWsgdGhlbSBkb3duLgoKRmlyc3QsIHdpdGhpbiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIHRoZSBtb3N0IHNpZ25pZmljYW50IHNoaWZ0IGludm9sdmVzIHRoZSBvcmRlcmluZyBvZiBuZXR3b3JrIGludGVyZmFjZSBhbmQgc3RhdGlvbiBmbHVzaCBvcGVyYXRpb25zLiBNb3ZpbmcgYG5ldGlmX2NhcnJpZXJfb2ZmYCBiZWZvcmUgYHN0YV9pbmZvX2ZsdXNoYCByYWlzZXMgYSByZWQgZmxhZzsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIGZsaXBwaW5nIHRoZSBvcmRlci4gVGhlIGNoYW5nZSBmcm9tIGFuIHVuY29uZGl0aW9uYWwgYHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSlgIHRvIGEgY29uZGl0aW9uYWwgb25lIHdpdGggYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgc3VnZ2VzdGluZyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCB0byBlbnN1cmUgYSBuZXR3b3JrIG9wZXJhdGlvbiBpcyBzeW5jaHJvbml6ZWQgYWZ0ZXIgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGR1cGxpY2F0ZSBgbmV0aWZfY2Fycmllcl9vZmZgIGxhdGVyIGluIHRoZSBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGNsZWFudXAgaXMgZ29vZC4KClRoZSBzZWNvbmQgYXJlYSBpbnZvbHZlcyBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29ya2AuIFJlbW92aW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgaGVyZSBtYWtlcyBtZSBxdWVzdGlvbiB3aGV0aGVyIHRoZSBvcmlnaW5hbCBhc3N1bXB0aW9uIG9uIHRoZSBuZWVkIGZvciB0aGF0IHN5bmNocm9uaXphdGlvbiB3YXMgaW5jb3JyZWN0LCBvciBpZiB0aGUgbG9naWMgaGFzIGNoYW5nZWQsIGFuZCBpdCBpcyBoYW5kbGVkIGVsc2V3aGVyZS4KCkZpbmFsbHksIHRoZSBzYW1lIHJlbW92YWwgb2YgYHN5bmNocm9uaXplX3JjdSgpYCBpbiBgaWVlZTgwMjExX2lic3NfbGVhdmVgIHJlaW5mb3JjZXMgdGhlIGlkZWEgb2YgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBwYXR0ZXJuIGFkanVzdG1lbnQgYWNyb3NzIHRoZXNlIGZ1bmN0aW9ucy4gUGVyaGFwcyB0aGUgb3JpZ2luYWwgZGV2ZWxvcGVyIG92ZXJjb21wZW5zYXRlZCwgYW5kIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcgaGVyZS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGlic3MuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgZmxvdyBvZiBJQlNTIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgZGlzY29ubmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBjYXJyaWVyIHN0YXRlLCBzdGF0aW9uIHN0YXRlLCBhbmQgdGhlIHRpbWluZyBvZiB0aGVzZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pYnNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlYnNzaWQsIGlmaWJzcy1cdTAwM2Vzc2lkLFxuIDY2NjpcdFx0XHRcdFx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4sXG4gNjY3Olx0XHRcdFx0XHRcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxuIDY2ODpcdFx0XHRcdFx0XHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXHUwMDNlcHJpdmFjeSkpO1xuIDY2OTpcdFxuIDY3MDpcdFx0XHRpZiAoY2Jzcykge1xuIDY3MTpcdFx0XHRcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MjpcdFx0XHRcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIGNic3MpO1xuIDY3MzpcdFx0XHR9XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiA2Nzc6XHRcbiA2Nzg6XHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4gNjc5Olx0XHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXG4gNjgwOlx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDY4MTpcdFxuIDY4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY4MzpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zKSkge1xuIDY4NDpcdFx0XHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX3N0YXRpb25zLFxuIDY4NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7XG4gNjg2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnN0YS1cdTAwM2VsaXN0KTtcbiA2ODc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIHN0YSk7XG4gNjkwOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiA2OTE6XHRcdH1cbiA2OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIDY5MzpcdFxuIDY5NDpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xuIDY5NTpcdFx0c2RhdGEtXHUwMDNldmlmLmNmZy5pYnNzX2NyZWF0b3IgPSBmYWxzZTtcbiA2OTY6XHRcdHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XG4gNjk3Olx0XHRzZGF0YS1cdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcbiA2OTg6XHRcbiA2OTk6XHRcdC8qIHJlbW92ZSBiZWFjb24gKi9cbiA3MDA6XHRcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVx1MDAzZXByZXNwLCBzZGF0YSk7XG4gNzAxOlx0XHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVx1MDAzZXUuaWJzcy5wcmVzcCwgTlVMTCk7XG4gNzAyOlx0XHRpZiAocHJlc3ApXG4gNzAzOlx0XHRcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xuIDcwNDpcdFxuIDcwNTpcdFx0Y2xlYXJfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUxfQkVBQ09OX1NUT1BQRUQsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKTtcbiA3MDY6XHRcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XG4gNzA3Olx0XHRcdFx0XHRcdFx0QlNTX0NIQU5HRURfSUJTUyk7XG4gNzA4Olx0XHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xuIDcwOTpcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDcxMDpcdH1cbiA3MTE6XHRcbiA3MTI6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gNzEzOlx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbiA3MTQ6XHR7XG4gNzE1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG4gNzE2Olx0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxuIDcxNzpcdFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gNzE4Olx0XG4gNzE5Olx0XHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbiA3MjA6XHRcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIDcyMTpcdFxuIDcyMjpcdFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXG4gNzIzOlx0XHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gNzI3Olx0e1xuIDcyODpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4gNzI5Olx0XHRpbnQgZXJyO1xuIDczMDpcdFxuIDczMTpcdFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXG4gNzMyOlx0XHQgKiB1bmF2YWlsYWJsZS5cbiA3MzM6XHRcdCAqL1xuIDczNDpcdFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHBvc2l0aW9uIG9mIHRoaW5raW5nIHRocm91Z2ggdGhlbToKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgYW5kIGBzdGFfaW5mb19mbHVzaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdoZW4gd2UmIzM5O3JlIGxlYXZpbmcgYW4gSUJTUyAoSW5kZXBlbmRlbnQgQmFzaWMgU2VydmljZSBTZXQpIG5ldHdvcmsgYW5kIGhvdyB3ZSYjMzk7cmUgY2xlYW5pbmcgdXAgc3RhbGUgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhpbmtpbmcgYWJvdXQgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBmaXJzdC4uLiBpdCYjMzk7cyB0aGUgZXhpdCBwb2ludCwgdGhlIGZ1bmN0aW9uIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBncmFjZWZ1bCAob3Igbm90LXNvLWdyYWNlZnVsLCBkZXBlbmRpbmcgb24gY2lyY3Vtc3RhbmNlcykgZGVwYXJ0dXJlLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGRlYXV0aGVudGljYXRpbmcgc3RhdGlvbnMsIHBvc3NpYmx5IHNlbmRpbmcgZGlzYXNzb2NpYXRpb24gZnJhbWVzLCBhbmQgZ2VuZXJhbGx5IG1ha2luZyBzdXJlIHdlJiMzOTtyZSBubyBsb25nZXIgcGFydCBvZiB0aGF0IHNwZWNpZmljIElCU1MgQlNTSUQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyBvdXIgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgbmV0d29yayBjaGFuZ2Ug4oCTIHBlcmhhcHMgY2xlYXJpbmcgb3VyIElCU1MtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgYW55IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyBJQlNTIHNjZW5hcmlvcyBjYW4gYmUgdHJpY2t5IHdpdGggbXVsdGlwbGUgc3RhdGlvbnMgY29uY3VycmVudGx5IHZ5aW5nIGZvciBuZXR3b3JrIGFjY2Vzcy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBzdGFfaW5mb19mbHVzaGAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhYm91dCBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGVudHJpZXMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYWdpbmcgbWVjaGFuaXNtcywgbGlrZSB0aW1lb3V0cy4gSG93IG9mdGVuIGRvZXMgaXQgcnVuPyBEb2VzIGl0IGNoZWNrIGZvciBhY3RpdmUgZGF0YSB0cmFuc21pc3Npb24gb3IganVzdCBhIHNpbXBsZSB0aW1lcj8gQXJlIHRoZXJlIGFueSBoZXVyaXN0aWNzIGludm9sdmVkIHRvIHByZXZlbnQgcHJlbWF0dXJlbHkgZmx1c2hpbmcgYWN0aXZlIHN0YXRpb25zLCBwZXJoYXBzIGR1ZSB0byB0ZW1wb3JhcnkgbmV0d29yayBnbGl0Y2hlcz8gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyBhIGxhcmdlIG51bWJlciBvZiBzdGF0aW9ucywgYW5kIHdoZXRoZXIgaXQgdXNlcyBhbnkgc21hcnQgaW5kZXhpbmcgb3IgbG9va3VwIHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQuIE1vcmVvdmVyLCBJIHdvbmRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVycyBvZiB0aGUgc3RhY2sgLS0gaG93IGRvZXMgaXQgZW5zdXJlIHRoZSByZWxldmFudCBoYXJkd2FyZSBpcyBpbmZvcm1lZCBvZiB0aGUgc3RhdGlvbiYjMzk7cyByZW1vdmFsPyBJcyBpdCB0aWVkIGludG8gdGhlIGJlYWNvbmluZyBwcm9jZXNzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW55IHBvdGVudGlhbCBmdXR1cmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2FtZSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lic3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdFx0c3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3M7XG4xODExOlx0XG4xODEyOlx0XHRpZmlic3MtXHUwMDNlc3NpZF9sZW4gPSAwO1xuMTgxMzpcdFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XG4xODE0Olx0XHRldGhfemVyb19hZGRyKGlmaWJzcy1cdTAwM2Vic3NpZCk7XG4xODE1Olx0XG4xODE2Olx0XHQvKiByZW1vdmUgYmVhY29uICovXG4xODE3Olx0XHRrZnJlZShzZGF0YS1cdTAwM2V1Lmlic3MuaWUpO1xuMTgxODpcdFx0c2RhdGEtXHUwMDNldS5pYnNzLmllID0gTlVMTDtcbjE4MTk6XHRcdHNkYXRhLVx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xuMTgyMDpcdFxuMTgyMTpcdFx0Lyogb24gdGhlIG5leHQgam9pbiwgcmUtcHJvZ3JhbSBIVCBwYXJhbWV0ZXJzICovXG4xODIyOlx0XHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYSkpO1xuMTgyMzpcdFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2ssIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrKSk7XG4xODI0Olx0XG4xODI1Olx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbjE4MjY6XHRcbjE4Mjc6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUuaWJzcy50aW1lcik7XG4xODI4Olx0XG4xODI5Olx0XHRyZXR1cm4gMDtcbjE4MzA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb246IGBzdGFfaW5mb19mbHVzaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzdGFfaW5mb19mbHVzaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb25hbCBjb250ZXh0LiBQcmVzdW1hYmx5LCB0aGlzIGlzIHJlbGF0ZWQgdG8gc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlbHkgdGllZCB0byBhbiA4MDIuMTEgaW1wbGVtZW50YXRpb24sIGdpdmVuIHRoZSAmIzM0O3N0YSYjMzQ7IHByZWZpeC4gVGhlICYjMzQ7Zmx1c2gmIzM0OyBwYXJ0IHN1Z2dlc3RzIGEgY2xlYXJpbmcsIGludmFsaWRhdGlvbiwgb3IgcmVtb3ZhbCBhY3Rpb24sIGFsbW9zdCBjZXJ0YWlubHkgZGVhbGluZyB3aXRoIGNhY2hlZCBvciBzdG9yZWQgZGF0YSBhYm91dCBzcGVjaWZpYyBzdGF0aW9ucy4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6ICpXaGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmbHVzaGVkPyAqV2h5KiBpcyBpdCBiZWluZyBmbHVzaGVkICh3aGF0IHRyaWdnZXJzIHRoZSBvcGVyYXRpb24pPyBBbmQgKndoZW4qIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbiBtYW5hZ2VtZW50IHRvIGdldCBhIGNvbXBsZXRlIGdyYXNwIG9mIGl0cyBpbXBhY3QuIEkgYmV0IHRoaXMgaXMgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcmV2ZW50aW5nIHN0YWxlIG9yIG91dGRhdGVkIHN0YXRpb24gZW50cmllcyBmcm9tIGd1bW1pbmcgdXAgdGhlIHdvcmtzLCBlc3BlY2lhbGx5IGluIGEgaGVhdmlseS11dGlsaXplZCB3aXJlbGVzcyBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzdGFfaW5mb19mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NTQ9aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTY2LSAqL1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTY3OnN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTY4LVx0XHRcdFx0IGludCBsaW5rX2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzdGFfaW5mby5oYCBmb3Igc29tZSA4MDIuMTEgRGV0YWlscyoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgYXQgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5oYCwgYW5kIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIHJvdWdobHkgYmV0d2VlbiA5NTAgYW5kIDk4MC4gVGhhdCByZWdpb24gdXN1YWxseSBob2xkcyBzb21lIGludGVyZXN0aW5nIGRldGFpbHMsIHByb2JhYmx5IHNvbWUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHN0YXRpb24gc3RhdGUsIHJhdGUgY29udHJvbCBvciBzb21ldGhpbmcgYWJvdXQgdGhlIHZhcmlvdXMgZmxhZ3MgdXNlZCB0aGVyZSwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCB0aGF0IHBhcnQgb2YgdGhlIGZpbGUgdG8gYmUgc3VyZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUgd2l0aG91dCB0b28gbXVjaCBkaWdnaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHQgKlx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcbiA5NTE6XHQgKlx0ICAgICByZW1vdmVkLlxuIDk1MjpcdCAqIEBkb19ub3RfZmx1c2hfc3RhOiBhIHN0YXRpb24gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGZsdXNoZWQuXG4gOTUzOlx0ICovXG4gOTU0Olx0aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXG4gOTU1Olx0XHRcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSk7XG4gOTU2Olx0XG4gOTU3Olx0LyoqXG4gOTU4Olx0ICogc3RhX2luZm9fZmx1c2ggLSBmbHVzaCBtYXRjaGluZyBTVEEgZW50cmllcyBmcm9tIHRoZSBTVEEgdGFibGVcbiA5NTk6XHQgKlxuIDk2MDpcdCAqIFJldHVybjogdGhlIG51bWJlciBvZiByZW1vdmVkIFNUQSBlbnRyaWVzLlxuIDk2MTpcdCAqXG4gOTYyOlx0ICogQHNkYXRhOiBzZGF0YSB0byByZW1vdmUgYWxsIHN0YXRpb25zIGZyb21cbiA5NjM6XHQgKiBAbGlua19pZDogaWYgZ2l2ZW4gKFx1MDAzZT0wKSwgYWxsIHRob3NlIFNUQSBlbnRyaWVzIHVzaW5nIEBsaW5rX2lkIG9ubHlcbiA5NjQ6XHQgKlx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcbiA5NjU6XHQgKlx0ICAgICByZW1vdmVkLlxuIDk2NjpcdCAqL1xuIDk2NzpcdHN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIDk2ODpcdFx0XHRcdFx0IGludCBsaW5rX2lkKVxuIDk2OTpcdHtcbiA5NzA6XHRcdHJldHVybiBfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgbGlua19pZCwgTlVMTCk7XG4gOTcxOlx0fVxuIDk3MjpcdFxuIDk3MzpcdHZvaWQgc3RhX3NldF9yYXRlX2luZm9fdHgoc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gOTc0Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUsXG4gOTc1Olx0XHRcdFx0ICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaW5mbyk7XG4gOTc2Olx0dm9pZCBzdGFfc2V0X3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyxcbiA5Nzc6XHRcdFx0ICAgYm9vbCB0aWRzdGF0cyk7XG4gOTc4Olx0XG4gOTc5Olx0dm9pZCBzdGFfc2V0X2FjY3VtdWxhdGVkX3JlbW92ZWRfbGlua3Nfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4gOTgwOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pO1xuIDk4MTpcdFxuIDk4MjpcdHUzMiBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuIDk4MzpcdFxuIDk4NDpcdHZvaWQgaWVlZTgwMjExX3N0YV9leHBpcmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgX19zdGFfaW5mb19mbHVzaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBfX3N0YV9pbmZvX2ZsdXNoYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIHB1cnBvc2UgYW5kIGltcGFjdC4gR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Zmx1c2gmIzM0OyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgY2xlYXJpbmcgb3IgaW52YWxpZGF0aW9uIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhdGlvbiAoU1RBKSBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGtpbmQgb2Ygc3RhdGlvbiBpbmZvLCAqd2hlcmUqIGl0JiMzOTtzIHN0b3JlZCwgYW5kICp3aHkqIGl0IG5lZWRzIGZsdXNoaW5nLgoKTXkgYnJhaW4mIzM5O3MgaW1tZWRpYXRlbHkgc3RhcnRpbmcgdG8gcnVuIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9uczogSXMgdGhpcyBhIGNhY2hlPyBBIGxvb2t1cCB0YWJsZT8gRGF0YSBzdG9yZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24gb3IgZGV2aWNlPyBJcyB0aGlzIGEgY2xlYW51cCBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgYSBzdGF0aW9uIGRpc2Nvbm5lY3RzLCBvciBtYXliZSBkdXJpbmcgYSBjaGFubmVsIHN3aXRjaCBvciBvdGhlciBkaXNydXB0aXZlIGV2ZW50PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGludHJvZHVjZWQgd2l0aCB0aGUgZnVuY3Rpb24/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgcmVzb3VyY2VzPyBJZiBzbywgd2hhdCBraW5kPyBJZiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiwgaG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgd29yaz8KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXRleGVzLCBzcGlubG9ja3MsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkPyBBIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBhbmQgc2FmZXR5LCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zdGFfaW5mb19mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9MTcwND1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wX2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTE3NzUtXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTc3NjpcdF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIHRydWUsIGxpbmtfaWQsIE5VTEwpO1xubmV0L21hYzgwMjExL2NmZy5jLTE3NzctXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz00MDEwPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy00MTIzLVx0LyogUmVtb3ZlIFRETFMgcGVlcnMgKi9cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NDEyNDpcdF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCAtMSwgYXBfc3RhKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNDEyNS1cbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xNjM2PXZvaWQgc3RhX2luZm9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNjQzLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTY0NDppbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTE2NDUtXHRcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NDA9dm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NDItLyoqXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5NDM6ICogX19zdGFfaW5mb19mbHVzaCAtIGZsdXNoIG1hdGNoaW5nIFNUQSBlbnRyaWVzIGZyb20gdGhlIFNUQSB0YWJsZVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTQ0LSAqXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTUzLSAqL1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTU0OmludCBfX3N0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIHZsYW5zLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTU1LVx0XHQgICAgIGludCBsaW5rX2lkLCBzdHJ1Y3Qgc3RhX2luZm8gKmRvX25vdF9mbHVzaF9zdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTk2Nz1zdGF0aWMgaW5saW5lIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05Njkte1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTcwOlx0cmV0dXJuIF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCBsaW5rX2lkLCBOVUxMKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0YV9pbmZvLmNgIC0gTGluZSAxNjQ0KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE2NDQgaW4gYHN0YV9pbmZvLmNgLiBCYXNlZCBvbiBjb250ZXh0LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZSBzdGF0aW9uIGluZm9ybWF0aW9uIGhhbmRsaW5nLiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzdGF0aW9uIGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiByZWdhcmRpbmcgYSBwYXJ0aWN1bGFyIHN0YXRpb24uIExpbmUgMTY0NCBpcyBhIG1hcmtlcjsgaXTigJlzIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29kZSB3aGVyZSBJ4oCZbSBnb2luZyB0byBzdGFydCBteSBleGFtaW5hdGlvbi4gRnJvbSBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgYmVpbmcgbWFkZSwgdGhlIHZhcmlhYmxlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzLCBzcGVjaWZpY2FsbHkgd2hhdCBmdW5jdGlvbiBjYWxscyBhcmUgbWFkZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbGluZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIFRoZSBzcGVjaWZpYyBnb2FsIHdpbGwgYmUgYmFzZWQgb24gdGhlIHByb2plY3QgSeKAmW0gY3VycmVudGx5IG9uLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGVjaXBoZXIgd2hhdCB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3N0YV9pbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NDQ6XHRpbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcbjE2NDU6XHRcdFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKVxuMTY0NjpcdHtcbjE2NDc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xNjQ4Olx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDtcbjE2NDk6XHRcdExJU1RfSEVBRChmcmVlX2xpc3QpO1xuMTY1MDpcdFx0aW50IHJldCA9IDA7XG4xNjUxOlx0XG4xNjUyOlx0XHRtaWdodF9zbGVlcCgpO1xuMTY1MzpcdFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuMTY1NDpcdFxuMTY1NTpcdFx0V0FSTl9PTih2bGFucyBcdTAwMjZcdTAwMjYgc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApO1xuMTY1NjpcdFx0V0FSTl9PTih2bGFucyBcdTAwMjZcdTAwMjYgIXNkYXRhLVx1MDAzZWJzcyk7XG4xNjU3Olx0XG4xNjU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhLCB0bXAsIFx1MDAyNmxvY2FsLVx1MDAzZXN0YV9saXN0LCBsaXN0KSB7XG4xNjU5Olx0XHRcdGlmIChzZGF0YSAhPSBzdGEtXHUwMDNlc2RhdGEgXHUwMDI2XHUwMDI2XG4xNjYwOlx0XHRcdCAgICAoIXZsYW5zIHx8IHNkYXRhLVx1MDAzZWJzcyAhPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlYnNzKSlcbjE2NjE6XHRcdFx0XHRjb250aW51ZTtcbjE2NjI6XHRcbjE2NjM6XHRcdFx0aWYgKHN0YSA9PSBkb19ub3RfZmx1c2hfc3RhKVxuMTY2NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTY2NTpcdFxuMTY2NjpcdFx0XHRpZiAobGlua19pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2XHUwMDI2XG4xNjY3Olx0XHRcdCAgICAhKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKSkpXG4xNjY4Olx0XHRcdFx0Y29udGludWU7XG4xNjY5Olx0XG4xNjcwOlx0XHRcdGlmICghV0FSTl9PTihfX3N0YV9pbmZvX2Rlc3Ryb3lfcGFydDEoc3RhKSkpXG4xNjcxOlx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2c3RhLVx1MDAzZWZyZWVfbGlzdCwgXHUwMDI2ZnJlZV9saXN0KTtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0cmV0JiM0MzsmIzQzOztcbjE2NzQ6XHRcdH1cbjE2NzU6XHRcbjE2NzY6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZmcmVlX2xpc3QpKSB7XG4xNjc3Olx0XHRcdGJvb2wgc3VwcG9ydF9wMnBfcHMgPSB0cnVlO1xuMTY3ODpcdFxuMTY3OTpcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbjE2ODA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCBcdTAwMjZmcmVlX2xpc3QsIGZyZWVfbGlzdCkge1xuMTY4MTpcdFx0XHRcdGlmICghc3RhLVx1MDAzZXN0YS5zdXBwb3J0X3AycF9wcylcbjE2ODI6XHRcdFx0XHRcdHN1cHBvcnRfcDJwX3BzID0gZmFsc2U7XG4xNjgzOlx0XHRcdFx0X19zdGFfaW5mb19kZXN0cm95X3BhcnQyKHN0YSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY5CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSUJTUyBEaXNjb25uZWN0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IHN5bmNocm9uaXphdGlvbiBpc3N1ZSByZWxhdGVkIHRvIHRlYXJpbmcgZG93biBJQlNTIGludGVyZmFjZXMgYW5kIHN0YXRpb24gaW5mb3JtYXRpb24gZmx1c2hpbmcuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBob3cgYHN0YV9pbmZvX2ZsdXNoKClgIGFuZCBgbmV0aWZfY2Fycmllcl9vZmYoKWAgYXJlIG9yZGVyZWQgd2hlbiBhbiBJQlNTIGRpc2Nvbm5lY3QgaGFwcGVucy4KCkhlcmUmIzM5O3Mgd2hhdCBJIHNlZTogYHN0YV9pbmZvX2ZsdXNoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBmbHVzaGVkIHN0YXRpb25zIChgcmV0YCkuIFdoZW4gc3RhdGlvbnMgKmFyZSogZmx1c2hlZCAoYHJldCAmZ3Q7IDBgIHdoaWNoIG1lYW5zIGAhbGlzdF9lbXB0eSgmYW1wO2ZyZWVfbGlzdClgKSwgYHN5bmNocm9uaXplX25ldCgpYCBnZXRzIGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC4gQ3J1Y2lhbGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkLCBzbyBgcmV0YCBpcyAwKSwgdGhlbiBgc3luY2hyb25pemVfbmV0KClgICp3YXNuJiMzOTt0KiBjYWxsZWQgZnJvbSB3aXRoaW4gYF9fc3RhX2luZm9fZmx1c2goKWAuCgpUaGUgb3JpZ2luYWwgY29kZSBkaWQgYG5ldGlmX2NhcnJpZXJfb2ZmKClgICphZnRlciogZmx1c2hpbmcgc3RhdGlvbnMgYW5kIGhhbmRsaW5nIGluY29tcGxldGUgc3RhdGlvbnMuIFRoZW4sIGVpdGhlciBgY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCBvciBgaWVlZTgwMjExX2lic3NfbGVhdmVgIHdvdWxkIGNhbGwgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhlIHBhdGNoIHNoaWZ0cyB0aGluZ3MgYXJvdW5kOiBgbmV0aWZfY2Fycmllcl9vZmYoKWAgbm93IGhhcHBlbnMgKmJlZm9yZSogc3RhdGlvbiBmbHVzaGluZy4gSW1wb3J0YW50bHksIGlmIGBzdGFfaW5mb19mbHVzaCgpYCByZXR1cm5zIDAgKG5vIHN0YXRpb25zIGZsdXNoZWQpLCB0aGUgcGF0Y2ggKmV4cGxpY2l0bHkqIGNhbGxzIGBzeW5jaHJvbml6ZV9uZXQoKWAgaW4gYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3QoKWAuIFRoZSBgc3luY2hyb25pemVfcmN1KClgIGNhbGxzIGluIGBjc2FfY29ubmVjdGlvbl9kcm9wX3dvcmtgIGFuZCBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGhhdmUgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgbm93IGd1YXJhbnRlZWQgdG8gaGFwcGVuIGFmdGVyIHRoZSBjYXJyaWVyIGlzIG9mZi4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbSwgbGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL1JDVSBpc3N1ZSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3Mgb2YgSUJTUyBpbnRlcmZhY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN0YXRpb25zLiBUaGUgY2hhbmdlIGluIG9yZGVyaW5nIGVuc3VyZXMgdGhhdCB0aGUgbmV0d29yayBzdGFjayBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYmVmb3JlIHN0YXRpb24gaW5mb3JtYXRpb24gaXMgY2xlYXJlZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSYjMzk7dmUgd2Fsa2VkIHRocm91Z2ggdGhlIHBhdGNoOgoKMS4gIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBwYXNzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZS4KMi4gIFRoZXJlJiMzOTtzIG5vIGJyYW5jaGluZyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBzdGFfaW5mb19mbHVzaCgpYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgYSB3ZWxsIGRlZmluZWQgaW50ICgwIG9yIGEgcG9zaXRpdmUgbnVtYmVyKS4KMy4gIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuCjQuICBUaGVyZSBhcmVuJiMzOTt0IGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo1LiAgVGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbi1mb2N1c2VkIGNoYW5nZTsgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlIGhlcmUuCgpDb25zaWRlcmluZyB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIGNhcnJpZXIgc3RhdGUsIHRoZSByZWxldmFudCB0b29scyBmb3IgZmluZGluZyBidWdzIGhlcmUgd291bGQgYmUgS0FTQU4sIExPQ0tERVAsIGFuZCBSQ1UgZGVidWdnaW5nLCB3aGljaCBhcmUgY29uY2VybmVkIHdpdGggcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuCgpMb29rcyBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRqdXN0cyB0aGUgc3luY2hyb25pemF0aW9uIGFuZCBjYXJyaWVyIHN0YXRlIHRlYXJkb3duIG9yZGVyaW5nIGluIG1hYzgwMjExIElCU1MgbW9kZSAobW92aW5nIG5ldGlmX2NhcnJpZXJfb2ZmKCkgYmVmb3JlIHN0YV9pbmZvX2ZsdXNoKCkgYW5kIGNhbGxpbmcgc3luY2hyb25pemVfbmV0KCkgaWYgbm8gc3RhdGlvbnMgd2VyZSBmbHVzaGVkLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgc3luY2hyb25pemVfcmN1KCkgY2FsbHMgaW4gY2FsbGVycykuIFRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBuZXR3b3JrIHN5bmNocm9uaXphdGlvbiwgUkNVIGdyYWNlIHBlcmlvZHMsIGFuZCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzdWJzeXN0ZW0gYm91bmRhcmllcywgYW5kIG5vIG9wZXJhdGlvbnMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBidWdzIChlLmcuIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6MjkuODk0ODA4NTI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDI3NzkxMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2FycmllciBvZmYgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkdXJpbmcgSUJTUyBkaXNjb25uZWN0aW9uIGFuZCB0ZWFyZG93biBpbiBtYWM4MDIxMSwgd2hpY2ggYWZmZWN0cyBzdGF0aW9uIGZsdXNoIHN5bmNocm9uaXphdGlvbiBhbmQgUkNVIGJlaGF2aW9yIGluIElCU1MgbmV0d29ya3MuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBubDgwMjExIHVzZXItc3BhY2UgY29tbWFuZHMgdXNpbmcgc2ltdWxhdGVkIHJhZGlvcyAobWFjODAyMTFfaHdzaW0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ2OjI5Ljg5NDgxMzc5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MjA1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuY1xcbmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmNcXG5AQCAtNjc1LDcgKzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcbiBcXHRpZmlic3MtXFx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XFxuIFxcbi1cXHRzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxcbitcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiBcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcXG5AQCAtNjg5LDggKzY5MSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gXFxuLVxcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVxcdTAwM2VkZXYpO1xcbi1cXG4gXFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcXG4gXFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XFxuIFxcdHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xcbkBAIC03MTcsNyArNzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHQgICAgIHUuaWJzcy5jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmspO1xcbiBcXG4gXFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuLVxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpO1xcbiBcXG4gXFx0LyogdHJpZ2dlciBhIHNjYW4gdG8gZmluZCBhbm90aGVyIElCU1MgbmV0d29yayB0byBqb2luICovXFxuQEAgLTE4MjMsOCArMTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gXFx0bWVtc2V0KFxcdTAwMjZpZmlic3MtXFx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXFx1MDAzZWh0X2NhcGEpKTtcXG4gXFx0bWVtc2V0KFxcdTAwMjZpZmlic3MtXFx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrKSk7XFxuIFxcbi1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4tXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSk7XFxuIFxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2RhdGEtXFx1MDAzZXUuaWJzcy50aW1lcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ2OjMwLjM5MzY2ODQwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA2OTgzOTM0NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmFiNTBjY2ViZTcxOWVkY2I2NjJhM2ZhMDc1NmQ1OGU0NGM2YzU1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE4OjQ2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmNcbmluZGV4IDZlMzZiMDlmZTk3ZjguLjZjYTJmZjM1NGU3NjggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5AQCAtNjc1LDcgKzY3NSw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXG4gXHRpZmlic3MtXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcbiBcbi1cdHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSk7XG4rXHRuZXRpZl9jYXJyaWVyX29mZihzZGF0YS1cdTAwM2VkZXYpO1xuK1x0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxuK1x0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiBcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcbkBAIC02ODksOCArNjkxLDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlmaWJzcy1cdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xuIFxuLVx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbi1cbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcbiBcdHNkYXRhLVx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlO1xuQEAgLTcxNyw3ICs3MTcsNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0ICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTtcbiBcbiBcdGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc2RhdGEpO1xuLVx0c3luY2hyb25pemVfcmN1KCk7XG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlKTtcbiBcbiBcdC8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqL1xuQEAgLTE4MjMsOCArMTgyMiw2IEBAIGludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbiBcdG1lbXNldChcdTAwMjZpZmlic3MtXHUwMDNlaHRfY2FwYSwgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhKSk7XG4gXHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGFfbWFzaywgMCwgc2l6ZW9mKGlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2spKTtcbiBcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuLVxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzZGF0YS1cdTAwM2V1Lmlic3MudGltZXIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6MzAuMzkzNjY5ODA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4NjUyNjMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJQlNTIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCBhbmQgdGhlIGFjY29tcGFueWluZyB0b29scywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGUgZGlmZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gRGlzY29ubmVjdGlvbnMsIENTQSAoQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50KSBoYW5kbGluZywgYW5kIGxlYXZpbmcgSUJTUyBuZXR3b3JrcyBhcmUgdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQgaGVyZS5cblxuTm93LCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGhpbiBgbmV0L21hYzgwMjExL2lic3MuY2AgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5LiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgc291cmNlIGNvZGUuIEknbGwgYWxzbyBiZSB1c2luZyBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBpbXBvcnRhbnQga2V5d29yZHMgYW5kIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgY29kZSBhcyBuZWNlc3NhcnkgdG8gc3BlZWQgdXAgbXkgYW5hbHlzaXMuIEFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBzZWUgd2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhZmZlY3QgdGhlc2UgSUJTUyBmdW5jdGlvbmFsaXRpZXMuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NywiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0Njo1Ni4yNTg5MzUxNDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0XFx0XFx0XFx0XFx0XFx0aWZpYnNzLVxcdTAwM2Vic3NpZCwgaWZpYnNzLVxcdTAwM2Vzc2lkLFxcbiA2NjY6XFx0XFx0XFx0XFx0XFx0XFx0aWZpYnNzLVxcdTAwM2Vzc2lkX2xlbixcXG4gNjY3OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9CU1NfVFlQRV9JQlNTLFxcbiA2Njg6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1BSSVZBQ1koaWZpYnNzLVxcdTAwM2Vwcml2YWN5KSk7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdFxcdGlmIChjYnNzKSB7XFxuIDY3MTpcXHRcXHRcXHRcXHRjZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgY2Jzcyk7XFxuIDY3MjpcXHRcXHRcXHRcXHRjZmc4MDIxMV9wdXRfYnNzKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksIGNic3MpO1xcbiA2NzM6XFx0XFx0XFx0fVxcbiA2NzQ6XFx0XFx0fVxcbiA2NzU6XFx0XFxuIDY3NjpcXHRcXHRpZmlic3MtXFx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVxcdTAwM2VkZXYpO1xcbiA2Nzk6XFx0XFx0aWYgKCFzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpKVxcbiA2ODA6XFx0XFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2ODM6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMpKSB7XFxuIDY4NDpcXHRcXHRcXHRzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMsXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0YV9pbmZvLCBsaXN0KTtcXG4gNjg2OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzdGEtXFx1MDAzZWxpc3QpO1xcbiA2ODc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0XFx0c3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTtcXG4gNjkwOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2OTE6XFx0XFx0fVxcbiA2OTI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19qb2luZWQgPSBmYWxzZTtcXG4gNjk1OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuY2ZnLmlic3NfY3JlYXRvciA9IGZhbHNlO1xcbiA2OTY6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7XFxuIDY5NzpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNmZy5zc2lkX2xlbiA9IDA7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdC8qIHJlbW92ZSBiZWFjb24gKi9cXG4gNzAwOlxcdFxcdHByZXNwID0gc2RhdGFfZGVyZWZlcmVuY2UoaWZpYnNzLVxcdTAwM2VwcmVzcCwgc2RhdGEpO1xcbiA3MDE6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cXHUwMDNldS5pYnNzLnByZXNwLCBOVUxMKTtcXG4gNzAyOlxcdFxcdGlmIChwcmVzcClcXG4gNzAzOlxcdFxcdFxcdGtmcmVlX3JjdShwcmVzcCwgcmN1X2hlYWQpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRjbGVhcl9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTF9CRUFDT05fU1RPUFBFRCwgXFx1MDAyNnNkYXRhLVxcdTAwM2VzdGF0ZSk7XFxuIDcwNjpcXHRcXHRpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfFxcbiA3MDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0QlNTX0NIQU5HRURfSUJTUyk7XFxuIDcwODpcXHRcXHRkcnZfbGVhdmVfaWJzcyhsb2NhbCwgc2RhdGEpO1xcbiA3MDk6XFx0XFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDcxMDpcXHR9XFxuIDcxMTpcXHRcXG4gNzEyOlxcdHN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gNzEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID1cXG4gNzE2OlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLFxcbiA3MTc6XFx0XFx0XFx0XFx0ICAgICB1Lmlic3MuY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTtcXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuIDcyMDpcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cXG4gNzIzOlxcdFxcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2V3b3JrKTtcXG4gNzI0OlxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfY3NhX21hcmtfcmFkYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuIDcyNzpcXHR7XFxuIDcyODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldS5pYnNzO1xcbiA3Mjk6XFx0XFx0aW50IGVycjtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0LyogaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCBpcyBhIERGUyBjaGFubmVsLCBtYXJrIHRoZSBjaGFubmVsIGFzXFxuIDczMjpcXHRcXHQgKiB1bmF2YWlsYWJsZS5cXG4gNzMzOlxcdFxcdCAqL1xcbiA3MzQ6XFx0XFx0ZXJyID0gY2ZnODAyMTFfY2hhbmRlZl9kZnNfcmVxdWlyZWQoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6NTYuMjU5MDUxODc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuMTgxMTpcXHRcXG4xODEyOlxcdFxcdGlmaWJzcy1cXHUwMDNlc3NpZF9sZW4gPSAwO1xcbjE4MTM6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuMTgxNDpcXHRcXHRldGhfemVyb19hZGRyKGlmaWJzcy1cXHUwMDNlYnNzaWQpO1xcbjE4MTU6XFx0XFxuMTgxNjpcXHRcXHQvKiByZW1vdmUgYmVhY29uICovXFxuMTgxNzpcXHRcXHRrZnJlZShzZGF0YS1cXHUwMDNldS5pYnNzLmllKTtcXG4xODE4OlxcdFxcdHNkYXRhLVxcdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xcbjE4MTk6XFx0XFx0c2RhdGEtXFx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cXG4xODIyOlxcdFxcdG1lbXNldChcXHUwMDI2aWZpYnNzLVxcdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhKSk7XFxuMTgyMzpcXHRcXHRtZW1zZXQoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhX21hc2spKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzZGF0YS1cXHUwMDNlc2tiX3F1ZXVlKTtcXG4xODI2OlxcdFxcbjE4Mjc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3MudGltZXIpO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRyZXR1cm4gMDtcXG4xODMwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDY6NTYuMjU5MTIxMDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDI2Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0Njo1Ni4zMDg1NTI3MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDgwNzAxMzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIGFuZCBpdHMgQ2xlYW51cCBSb3V0aW5lcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGFyZSBjdXJyZW50bHkgY29uZmlndXJlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgbGlua2VkLlxuXG5OZXh0LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gY2xlYW51cCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHN0YXRpb24gaXMgYmVpbmcgZmx1c2hlZCBvciB3aGVuIGFuIElCU1MgaXMgbGVhdmluZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFjdGlvbnMgYXJlIHRyaWdnZXJlZC4gSSdsbCBuZWVkIHRvIGBncmVwYCBmb3IgYHN0YV9pbmZvX2ZsdXNoYCBhbmQgdGhlbiB0cmFjayBkb3duIGFsbCBvZiBpdHMgY2FsbGVycy4gU2ltaWxhcmx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIGNhbGxzIGFyZSBtYWRlIHRvIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAgb3IgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLiBUaG9zZSBhcmUgaW1wb3J0YW50LCBhbmQgbGFzdGx5IEknbGwgbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgbWFjODAyMTFfaHdzaW1gIGJlY2F1c2UsIHdlbGwsIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgc2ltdWxhdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBjbGVhbnVwLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgdXNlZCwgYW5kIGhvdyB0aGV5IHJlbGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjo4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjExLjExNTU2ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA0MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9pYnNzX2xlYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MzEwND1zdGF0aWMgaW50IGllZWU4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L21hYzgwMjExL2NmZy5jLTMxMDUte1xcbm5ldC9tYWM4MDIxMS9jZmcuYzozMTA2OlxcdHJldHVybiBpZWVlODAyMTFfaWJzc19sZWF2ZShJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMzEwNy19XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTE3MDc9aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDctXFxubmV0L21hYzgwMjExL2lic3MuYzoxODA4OmludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE4MDkte1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTk4MD1pbnQgaWVlZTgwMjExX2lic3Nfam9pbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xOTgxLVxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxOTgyOmludCBpZWVlODAyMTFfaWJzc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTk4My12b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxMS4xNjI3NzY5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjU1MDQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxMi42MDUzMzE1MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY4NzYwOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoxNC4xNTIyMjM4NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk3MTA3OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiBtYWM4MDIxMSBJQlNTIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBgbmV0L21hYzgwMjExL2lic3MuY2AgcmVsYXRlZCB0byBJQlNTIGNvbm5lY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KClgIGhhcyBoYWQgYG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldilgIG1vdmVkLCBhIGNvbmRpdGlvbmFsIGBzeW5jaHJvbml6ZV9uZXQoKWAgYWRkZWQsIGFuZCBgc3RhX2luZm9fZmx1c2goKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGEgdmFsdWUuIEFsc28sIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2FzIHJlbW92ZWQgZnJvbSBgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yaygpYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlKClgLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIG5sODAyMTEgSUJTUyBjb21tYW5kcywgYW5kIHRoZSB1c2Ugb2YgbWFjODAyMTFfaHdzaW0gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyB3aWRlc3ByZWFkIHVzZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXMgaXMgd29ydGggYSBkZWVwZXIgbG9vay4gVGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBhZmZlY3Rpbmcgc3luY2hyb25pemF0aW9uIGFuZCBuZXR3b3JrIGRldmljZSBzdGF0ZSB3aXRoaW4gSUJTUywgd2hpY2ggaXMgYSBrbm93biBob3RiZWQgZm9yIHRyaWNreSByYWNlIGNvbmRpdGlvbnMsIFVBRnMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBHZXR0aW5nIGBuZXRpZl9jYXJyaWVyX29mZmAgY2FsbGVkIGVhcmxpZXIgYW5kIHRoZSBjb25kaXRpb25hbCBgc3luY2hyb25pemVfbmV0KClgIG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IGFyb3VuZCBob3cgdGhpbmdzIGFyZSB0b3JuIGRvd24uIFRoZSByZW1vdmFsIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAgaXMgYWxzbyBpbnRlcmVzdGluZywgYW5kIGlzIGxpa2VseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBhdCBwb3RlbnRpYWwgcmFjZXMuXG5cbk5vdywgbGV0J3MgcGluIGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uLiBXZSBoYXZlIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBgaWVlZTgwMjExX2lic3Nfam9pbmAsIGFuZCBgaWVlZTgwMjExX2xlYXZlX2lic3NgIChpbiBjZmcuYykgd2hpY2ggY2FsbHMgYGllZWU4MDIxMV9pYnNzX2xlYXZlYC4gQWxzbywgYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGZyb20gb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBwb3J0aW9uIG9mIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgYSBjcnVjaWFsIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyMy4xMjMzMDUzMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxMVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19DTUFDXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcXG4gIDE0OlxcdFxcdCAgbmV0d29ya2luZyBzdGFjay5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29tbWVudCBcXFwiQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExPW5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0aWYgTUFDODAyMTEgIT0gblxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTUFDODAyMTFfSEFTX1JDXFxuICAyMjpcXHRcXHRib29sXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbiAgMjY6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0hBU19SQ1xcbiAgMjc6XFx0XFx0ZGVmYXVsdCB5XFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlICdtaW5zdHJlbCcgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjIzLjEyMzM3MjM5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxMTI2NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gQ0ZHODAyMTEgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgdGllZCB0byBgQ0ZHODAyMTFgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgd2lyZWxlc3MgZHJpdmVyIGFuZCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgYnVuY2ggb2YgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgcG9pbnRpbmcgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBgQ0ZHODAyMTFgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiB0aGUgbGFuZHNjYXBlIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoYXQgY29yZSB3aXJlbGVzcyBjb21wb25lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgZGVwZW5kZW5jaWVzLCBidXQgSSdtIHJlYWR5IHRvIHBhcnNlIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyNS4yNjQ1MDIxNDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXSVJFTEVTU19FWFRcXG4gICAzOlxcdFxcdGJvb2xcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFdFWFRfQ09SRVxcbiAgIDY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMV9XRVhUIHx8IFdJUkVMRVNTX0VYVFxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgV0VYVF9QUk9DXFxuICAxMDpcXHRcXHRkZWZfYm9vbCB5XFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gV0VYVF9DT1JFXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBXRVhUX1BSSVZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIENGRzgwMjExXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gIDIwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjI6XFx0XFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXFxuICAyMzpcXHRcXHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4ndFxcbiAgMjQ6XFx0XFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXFxuICAyODpcXHRcXHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cXG4gIDM1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzoyNS4yNjQ1NzQ1NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYxMTc4NzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTUFDODAyMTEgSFdTSU0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgTUFDODAyMTFfSFdTSU1gIGZlYXR1cmUuIE15IHVzdWFsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhpcyB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlciBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBjcml0aWNhbGx5LCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYE1BQzgwMjExX0hXU0lNYCBvcHRpb24gd2lsbCBsaXZlIGFuZCB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBzdG9yeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmZWF0dXJlcywgZHJpdmVycywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBiZWRyb2NrIGJlZm9yZSBJIGNhbiB0aGluayBhYm91dCB1c2luZywgb3IgbW9kaWZ5aW5nIHRoaXMgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDc6MzMuODc2MzY0OTMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0NzozMy44NzY0MzA1NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NTU4NjM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpYnNzLmNgIENvbXBpbGF0aW9uIGluIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaWJzcy5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgZGlyZWN0b3J5IGlzIGJlaW5nIGNvbXBpbGVkLiBUaW1lIHRvIG9wZW4gdXAgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzcGVjaWZpYyBsb2NhdGlvbiBhbmQgdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcnVsZXMsIGZsYWdzLCBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYGlic3MuY2AuIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgb2JqZWN0IGZpbGUsIG9yIGNvbXBpbGVkIGRpcmVjdGx5PyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIGF0IHBsYXkgaGVyZSBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIG90aGVyIHZhcmlhYmxlcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcyBhcmUgcnVuIHRvIGdlbmVyYXRlIHRoZSBvYmplY3QgZmlsZSAoZS5nLiwgYC5vYCkgYW5kIGhvdyB0aGF0IG9iamVjdCBpcyB0aGVuIGxpbmtlZCBpbnRvIHRoZSBicm9hZGVyIGBtYWM4MDIxMWAgbW9kdWxlIG9yIHBvdGVudGlhbGx5IGV2ZW4gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSBmb3IgdHJvdWJsZXNob290aW5nIGFueSBjb21waWxhdGlvbiBpc3N1ZXMgb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjQwLjUzMjAyMDE4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfTUFDODAyMTEpICs9IG1hYzgwMjExLm9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0IyBtYWM4MDIxMSBvYmplY3RzXFxuICAgNTpcXHRtYWM4MDIxMS15IDo9IFxcXFxcXG4gICA2OlxcdFxcdG1haW4ubyBzdGF0dXMubyBcXFxcXFxuICAgNzpcXHRcXHRkcml2ZXItb3BzLm8gXFxcXFxcbiAgIDg6XFx0XFx0c3RhX2luZm8ubyBcXFxcXFxuICAgOTpcXHRcXHR3ZXAubyBcXFxcXFxuICAxMDpcXHRcXHRhZWFkX2FwaS5vIFxcXFxcXG4gIDExOlxcdFxcdHdwYS5vIFxcXFxcXG4gIDEyOlxcdFxcdHNjYW4ubyBvZmZjaGFubmVsLm8gXFxcXFxcbiAgMTM6XFx0XFx0aHQubyBhZ2ctdHgubyBhZ2ctcngubyBcXFxcXFxuICAxNDpcXHRcXHR2aHQubyBcXFxcXFxuICAxNTpcXHRcXHRoZS5vIFxcXFxcXG4gIDE2OlxcdFxcdHMxZy5vIFxcXFxcXG4gIDE3OlxcdFxcdGlic3MubyBcXFxcXFxuICAxODpcXHRcXHRpZmFjZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGxpbmsubyBcXFxcXFxuICAyMDpcXHRcXHRyYXRlLm8gXFxcXFxcbiAgMjE6XFx0XFx0bWljaGFlbC5vIFxcXFxcXG4gIDIyOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMzpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDI0OlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjU6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjY6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjc6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjk6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMzA6XFx0XFx0dHgubyBcXFxcXFxuICAzMTpcXHRcXHRrZXkubyBcXFxcXFxuICAzMjpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMzpcXHRcXHR3bWUubyBcXFxcXFxuICAzNDpcXHRcXHRjaGFuLm8gXFxcXFxcbiAgMzU6XFx0XFx0dHJhY2UubyBtbG1lLm8gXFxcXFxcbiAgMzY6XFx0XFx0dGRscy5vIFxcXFxcXG4gIDM3OlxcdFxcdG9jYi5vIFxcXFxcXG4gIDM4OlxcdFxcdGFpcnRpbWUubyBcXFxcXFxuICAzOTpcXHRcXHRlaHQub1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ3OjQwLjUzMjA5MTM4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU2MjgxNjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJQlNTIGluIG1hYzgwMjExKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IElCU1MgZnVuY3Rpb25hbGl0eSBpcyBpbnRlZ3JhdGVkIHdpdGhpbiBgbWFjODAyMTFgLiBUaGUgZmlyc3QgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCBgaWJzcy5vYCBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01BQzgwMjExYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgbW9kdWxlLiBBbmQsIG9mIGNvdXJzZSwgYG1hYzgwMjExYCByZWxpZXMgb24gYENGRzgwMjExYCB3aGljaCBpcyB0aGUgc3RhbmRhcmQuIElmIEknbSB0ZXN0aW5nIGhhcmR3YXJlIGVtdWxhdGlvbiBJJ2QgYmUgdXNpbmcgYE1BQzgwMjExX0hXU0lNYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSBuZWVkIHRvIGZvY3VzIG9uIHNvbWUga2V5IHN5bWJvbHMsIHNvIEkgbmVlZCB0byBjaGVjayB0aGVzZTogYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBhbmQgYGllZWU4MDIxMV9pYnNzX2pvaW5gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGNvcmUgSUJTUyBqb2luIGFuZCBsZWF2ZSBvcGVyYXRpb25zLlxuXG5Ob3cgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSdzIG5vdGhpbmcgZWxzZSBvZiBpbXBvcnRhbmNlIGluIGBuZXQvbWFjODAyMTEvaWJzcy5jYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBzbyBJJ2xsIGhhdmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhhdCBmaWxlIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjAwLjA5NDkxMDExNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MjY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgLipcXFxcKC4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9pYnNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2lic3MuYz0zOD1pZWVlODAyMTFfaWJzc19idWlsZF9wcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMjEwLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MjExOnN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0yMTItXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCBpbnQgYmVhY29uX2ludCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgxLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MzgyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMzgzLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy00NTktXFxubmV0L21hYzgwMjExL2lic3MuYzo0NjA6aW50IGllZWU4MDIxMV9pYnNzX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy00NjEtXFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2NzYV9zZXR0aW5ncyAqY3NhX3NldHRpbmdzLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy01MDctXFxubmV0L21hYzgwMjExL2lic3MuYzo1MDg6aW50IGllZWU4MDIxMV9pYnNzX2ZpbmlzaF9jc2Eoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU2NCAqY2hhbmdlZClcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTUwOS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTUzOS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjU0MDp2b2lkIGllZWU4MDIxMV9pYnNzX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL2lic3MuYy01NDEte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy01NDctXFxubmV0L21hYzgwMjExL2lic3MuYzo1NDg6c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU0OS1cXHRfX2FjcXVpcmVzKFJDVSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9NTc0PWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjI2LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6NjI3OnN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTYyOC17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTY1Mi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjY1MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjU0LXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNzExLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6NzEyOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcxMy1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcyNS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjcyNjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTcyNy17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTg4NT1pZWVlODAyMTFfcnhfbWdtdF9zcGVjdHJ1bV9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy05MDgtXFxubmV0L21hYzgwMjExL2lic3MuYzo5MDk6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy05MTAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTkyMi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjkyMzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy05MjQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy05NTMtXFxubmV0L21hYzgwMjExL2lic3MuYzo5NTQ6c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTk1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzMtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMDc0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEwNzUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNjctXFxubmV0L21hYzgwMjExL2lic3MuYzoxMTY4OnZvaWQgaWVlZTgwMjExX2lic3Nfcnhfbm9fc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTE2OS1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xMjE4LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTIxOTpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19zdGFfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTIyMC17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyNTctXFxubmV0L21hYzgwMjExL2lic3MuYzoxMjU4OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEyNTkte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xMjg1LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTI4NjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTI4Ny17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzMTktXFxubmV0L21hYzgwMjExL2lic3MuYzoxMzIwOnN0YXRpYyB1bnNpZ25lZCBpbnQgaWJzc19zZXR1cF9jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTMyMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKipjaGFubmVscyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTM1Mj1pZWVlODAyMTFfaWJzc19zZXR1cF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTEzOTMtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMzk0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTM5NS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODItXFxubmV0L21hYzgwMjExL2lic3MuYzoxNDgzOnN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE0ODQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlcSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9MTU0OT1zdGF0aWNcXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE1NTA6dm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNTUxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE1NzYtXFxubmV0L21hYzgwMjExL2lic3MuYzoxNTc3OnZvaWQgaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNTc4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2MzItXFxubmV0L21hYzgwMjExL2lic3MuYzoxNjMzOnZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2MzQte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjcxLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY3MjpzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc190aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2NzMte1xcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjc5LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTY4MDp2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTY4MS17XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTE2OTEtLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi9cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE2OTI6dm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2lic3MuYy0xNjkzLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTcwNi1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjE3MDc6aW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lic3MuYy0xNzA4LVxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy0xODA3LVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM6MTgwODppbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL2lic3MuYy0xODA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MDAuMTQyMzM5NTUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTY0NjY1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElCU1MgRGlzY29ubmVjdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIElCU1MgbW9kZSBkaXNjb25uZWN0aW9uIGFuZCBjYXJyaWVyIGhhbmRsaW5nLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZldyBrZXkgY29uZmlndXJhdGlvbnM6IGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCwgY3JpdGljYWxseSwgYE1BQzgwMjExX0hXU0lNYC4gSWYgdGhvc2UgYXJlIGFsbCBpbiBwbGFjZSwgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgYXMgSSBnbyB0aHJvdWdoIHRoaXM6IGBpZWVlODAyMTFfaWJzc19sZWF2ZWAsIGBpZWVlODAyMTFfaWJzc19qb2luYCwgYW5kIGBpZWVlODAyMTFfbGVhdmVfaWJzc2AuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ob3csIHRoZSBtYWluIHF1ZXN0aW9uOiBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgZW5hYmxlZCBoZXJlPyBXZWxsLCB0aGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBkaXNjb25uZWN0aW9uIGluIElCU1MgbW9kZSBhbmQgdGhlIHVuZGVybHlpbmcgY2FycmllciBoYW5kbGluZyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBpcyBhbHdheXMgY29tcGxleC4gVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGFuZCBgbmV0bGluayBubDgwMjExYCwgc28gdGhhdCdzIGEgaHVnZSBwbHVzLiBXZSBhbHNvIGhhdmUgd2VsbC1kZWZpbmVkIGZvY3VzIHN5bWJvbHMgYW5kIHRob3NlIGNydWNpYWwgY29uZmlncyBhcmUgdmVyaWZpZWQsIHNvIEkgY2FuIHNlZSB3aGVyZSB0aGlzIGNvdWxkIGJlIGJlbmVmaWNpYWwuXG5cbkxvb2tzIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ2xsIGZsYWcgdGhpcyB0byBiZSBzZXQgYXMgYSBmdXp6aW5nIGNhbmRpZGF0ZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzc2LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODoxNy4zMDcwMDczNDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU5MTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9pYnNzX2xlYXZlXCIsXG4gICAgXCJpZWVlODAyMTFfaWJzc19qb2luXCIsXG4gICAgXCJpZWVlODAyMTFfbGVhdmVfaWJzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhcnJpZXIgb2ZmIG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZHVyaW5nIElCU1MgZGlzY29ubmVjdGlvbiBhbmQgdGVhcmRvd24gaW4gbWFjODAyMTEsIHdoaWNoIGFmZmVjdHMgc3RhdGlvbiBmbHVzaCBzeW5jaHJvbml6YXRpb24gYW5kIFJDVSBiZWhhdmlvciBpbiBJQlNTIG5ldHdvcmtzLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB1c2VyLXNwYWNlIGNvbW1hbmRzIHVzaW5nIHNpbXVsYXRlZCByYWRpb3MgKG1hYzgwMjExX2h3c2ltKSBhbmQgaXMgd29ydGggZnV6emluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfaWJzc19sZWF2ZVwiLFxuICAgIFwiaWVlZTgwMjExX2lic3Nfam9pblwiLFxuICAgIFwiaWVlZTgwMjExX2xlYXZlX2lic3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXJyaWVyIG9mZiBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGR1cmluZyBJQlNTIGRpc2Nvbm5lY3Rpb24gYW5kIHRlYXJkb3duIGluIG1hYzgwMjExLCB3aGljaCBhZmZlY3RzIHN0YXRpb24gZmx1c2ggc3luY2hyb25pemF0aW9uIGFuZCBSQ1UgYmVoYXZpb3IgaW4gSUJTUyBuZXR3b3Jrcy4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdXNlci1zcGFjZSBjb21tYW5kcyB1c2luZyBzaW11bGF0ZWQgcmFkaW9zIChtYWM4MDIxMV9od3NpbSkgYW5kIGlzIHdvcnRoIGZ1enppbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MTcuMzc3NjA3Nzg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk0NDk4MTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjE3LjM3ODAxMDQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwOTQ0NTczNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhYjUwY2NlYmU3MTllZGNiNjYyYTNmYTA3NTZkNThlNDRjNmM1NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxODo0NjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jXG5pbmRleCA2ZTM2YjA5ZmU5N2Y4Li42Y2EyZmYzNTRlNzY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lic3MuY1xuKysrIGIvbmV0L21hYzgwMjExL2lic3MuY1xuQEAgLTY3NSw3ICs2NzUsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFxuIFx0aWZpYnNzLVx1MDAzZXN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7XG4gXG4tXHRzdGFfaW5mb19mbHVzaChzZGF0YSwgLTEpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXHUwMDNlZGV2KTtcbitcdGlmICghc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKSlcbitcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfbG9jayk7XG4gXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2aWZpYnNzLVx1MDAzZWluY29tcGxldGVfc3RhdGlvbnMpKSB7XG5AQCAtNjg5LDggKzY5MSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZpZmlic3MtXHUwMDNlaW5jb21wbGV0ZV9sb2NrKTtcbiBcbi1cdG5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLVx1MDAzZWRldik7XG4tXG4gXHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmlic3Nfam9pbmVkID0gZmFsc2U7XG4gXHRzZGF0YS1cdTAwM2V2aWYuY2ZnLmlic3NfY3JlYXRvciA9IGZhbHNlO1xuIFx0c2RhdGEtXHUwMDNldmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTtcbkBAIC03MTcsNyArNzE3LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdCAgICAgdS5pYnNzLmNzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayk7XG4gXG4gXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSk7XG4gXG4gXHQvKiB0cmlnZ2VyIGEgc2NhbiB0byBmaW5kIGFub3RoZXIgSUJTUyBuZXR3b3JrIHRvIGpvaW4gKi9cbkBAIC0xODIzLDggKzE4MjIsNiBAQCBpbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4gXHRtZW1zZXQoXHUwMDI2aWZpYnNzLVx1MDAzZWh0X2NhcGEsIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYSkpO1xuIFx0bWVtc2V0KFx1MDAyNmlmaWJzcy1cdTAwM2VodF9jYXBhX21hc2ssIDAsIHNpemVvZihpZmlic3MtXHUwMDNlaHRfY2FwYV9tYXNrKSk7XG4gXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbi1cbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpO1xuIFxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5pYnNzLnRpbWVyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjE3LjM3ODAxMTIzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDE5MTUyNTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlic3MuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyBgbmV0L21hYzgwMjExL2lic3MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyBzb21lIGZvY3VzZWQgY2hhbmdlcywgcHJpbWFyaWx5IHdpdGhpbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX2lic3NfZGlzY29ubmVjdGAsIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCwgYW5kIGBpZWVlODAyMTFfaWJzc19sZWF2ZWAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSdsbCBicmVhayB0aGVtIGRvd24uXG5cbkZpcnN0LCB3aXRoaW4gYGllZWU4MDIxMV9pYnNzX2Rpc2Nvbm5lY3RgLCB0aGUgbW9zdCBzaWduaWZpY2FudCBzaGlmdCBpbnZvbHZlcyB0aGUgb3JkZXJpbmcgb2YgbmV0d29yayBpbnRlcmZhY2UgYW5kIHN0YXRpb24gZmx1c2ggb3BlcmF0aW9ucy4gTW92aW5nIGBuZXRpZl9jYXJyaWVyX29mZmAgYmVmb3JlIGBzdGFfaW5mb19mbHVzaGAgcmFpc2VzIGEgcmVkIGZsYWc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5J3JlIGZsaXBwaW5nIHRoZSBvcmRlci4gVGhlIGNoYW5nZSBmcm9tIGFuIHVuY29uZGl0aW9uYWwgYHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSlgIHRvIGEgY29uZGl0aW9uYWwgb25lIHdpdGggYHN5bmNocm9uaXplX25ldCgpYCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgc3VnZ2VzdGluZyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCB0byBlbnN1cmUgYSBuZXR3b3JrIG9wZXJhdGlvbiBpcyBzeW5jaHJvbml6ZWQgYWZ0ZXIgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGR1cGxpY2F0ZSBgbmV0aWZfY2Fycmllcl9vZmZgIGxhdGVyIGluIHRoZSBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIGNsZWFudXAgaXMgZ29vZC5cblxuVGhlIHNlY29uZCBhcmVhIGludm9sdmVzIGBpZWVlODAyMTFfY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYC4gUmVtb3ZpbmcgYHN5bmNocm9uaXplX3JjdSgpYCBoZXJlIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdGhlIG9yaWdpbmFsIGFzc3VtcHRpb24gb24gdGhlIG5lZWQgZm9yIHRoYXQgc3luY2hyb25pemF0aW9uIHdhcyBpbmNvcnJlY3QsIG9yIGlmIHRoZSBsb2dpYyBoYXMgY2hhbmdlZCwgYW5kIGl0IGlzIGhhbmRsZWQgZWxzZXdoZXJlLlxuXG5GaW5hbGx5LCB0aGUgc2FtZSByZW1vdmFsIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAgaW4gYGllZWU4MDIxMV9pYnNzX2xlYXZlYCByZWluZm9yY2VzIHRoZSBpZGVhIG9mIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gcGF0dGVybiBhZGp1c3RtZW50IGFjcm9zcyB0aGVzZSBmdW5jdGlvbnMuIFBlcmhhcHMgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBvdmVyY29tcGVuc2F0ZWQsIGFuZCB3ZSdyZSBzZWVpbmcgc29tZSBvcHRpbWl6YXRpb24gb3IgcmVmYWN0b3JpbmcgaGVyZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBpYnNzLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgZmxvdyBvZiBJQlNTIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgZGlzY29ubmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiBjYXJyaWVyIHN0YXRlLCBzdGF0aW9uIHN0YXRlLCBhbmQgdGhlIHRpbWluZyBvZiB0aGVzZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MzEuNTY5NTQwMDg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWJzcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NTpcXHRcXHRcXHRcXHRcXHRcXHRpZmlic3MtXFx1MDAzZWJzc2lkLCBpZmlic3MtXFx1MDAzZXNzaWQsXFxuIDY2NjpcXHRcXHRcXHRcXHRcXHRcXHRpZmlic3MtXFx1MDAzZXNzaWRfbGVuLFxcbiA2Njc6XFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX0JTU19UWVBFX0lCU1MsXFxuIDY2ODpcXHRcXHRcXHRcXHRcXHRcXHRJRUVFODAyMTFfUFJJVkFDWShpZmlic3MtXFx1MDAzZXByaXZhY3kpKTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0XFx0aWYgKGNic3MpIHtcXG4gNjcxOlxcdFxcdFxcdFxcdGNmZzgwMjExX3VubGlua19ic3MobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBjYnNzKTtcXG4gNjcyOlxcdFxcdFxcdFxcdGNmZzgwMjExX3B1dF9ic3Moc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgY2Jzcyk7XFxuIDY3MzpcXHRcXHRcXHR9XFxuIDY3NDpcXHRcXHR9XFxuIDY3NTpcXHRcXG4gNjc2OlxcdFxcdGlmaWJzcy1cXHUwMDNlc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtXFx1MDAzZWRldik7XFxuIDY3OTpcXHRcXHRpZiAoIXN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSkpXFxuIDY4MDpcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfbG9jayk7XFxuIDY4MzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucykpIHtcXG4gNjg0OlxcdFxcdFxcdHN0YSA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaW5jb21wbGV0ZV9zdGF0aW9ucyxcXG4gNjg1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3RhX2luZm8sIGxpc3QpO1xcbiA2ODY6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnN0YS1cXHUwMDNlbGlzdCk7XFxuIDY4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRcXHRzdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpO1xcbiA2OTA6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpZmlic3MtXFx1MDAzZWluY29tcGxldGVfbG9jayk7XFxuIDY5MTpcXHRcXHR9XFxuIDY5MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aWZpYnNzLVxcdTAwM2VpbmNvbXBsZXRlX2xvY2spO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNmZy5pYnNzX2pvaW5lZCA9IGZhbHNlO1xcbiA2OTU6XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5jZmcuaWJzc19jcmVhdG9yID0gZmFsc2U7XFxuIDY5NjpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTtcXG4gNjk3OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuY2ZnLnNzaWRfbGVuID0gMDtcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0LyogcmVtb3ZlIGJlYWNvbiAqL1xcbiA3MDA6XFx0XFx0cHJlc3AgPSBzZGF0YV9kZXJlZmVyZW5jZShpZmlic3MtXFx1MDAzZXByZXNwLCBzZGF0YSk7XFxuIDcwMTpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVxcdTAwM2V1Lmlic3MucHJlc3AsIE5VTEwpO1xcbiA3MDI6XFx0XFx0aWYgKHByZXNwKVxcbiA3MDM6XFx0XFx0XFx0a2ZyZWVfcmN1KHByZXNwLCByY3VfaGVhZCk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGNsZWFyX2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMX0JFQUNPTl9TVE9QUEVELCBcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXRlKTtcXG4gNzA2OlxcdFxcdGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRCU1NfQ0hBTkdFRF9JQlNTKTtcXG4gNzA4OlxcdFxcdGRydl9sZWF2ZV9pYnNzKGxvY2FsLCBzZGF0YSk7XFxuIDcwOTpcXHRcXHRpZWVlODAyMTFfbGlua19yZWxlYXNlX2NoYW5uZWwoXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rKTtcXG4gNzEwOlxcdH1cXG4gNzExOlxcdFxcbiA3MTI6XFx0c3RhdGljIHZvaWQgaWVlZTgwMjExX2NzYV9jb25uZWN0aW9uX2Ryb3Bfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiA3MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKVxcbiA3MTQ6XFx0e1xcbiA3MTU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPVxcbiA3MTY6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsXFxuIDcxNzpcXHRcXHRcXHRcXHQgICAgIHUuaWJzcy5jc2FfY29ubmVjdGlvbl9kcm9wX3dvcmspO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KHNkYXRhKTtcXG4gNzIwOlxcdFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSk7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdC8qIHRyaWdnZXIgYSBzY2FuIHRvIGZpbmQgYW5vdGhlciBJQlNTIG5ldHdvcmsgdG8gam9pbiAqL1xcbiA3MjM6XFx0XFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LCBcXHUwMDI2c2RhdGEtXFx1MDAzZXdvcmspO1xcbiA3MjQ6XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWJzc19jc2FfbWFya19yYWRhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4gNzI3OlxcdHtcXG4gNzI4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuIDcyOTpcXHRcXHRpbnQgZXJyO1xcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHQvKiBpZiB0aGUgY3VycmVudCBjaGFubmVsIGlzIGEgREZTIGNoYW5uZWwsIG1hcmsgdGhlIGNoYW5uZWwgYXNcXG4gNzMyOlxcdFxcdCAqIHVuYXZhaWxhYmxlLlxcbiA3MzM6XFx0XFx0ICovXFxuIDczNDpcXHRcXHRlcnIgPSBjZmc4MDIxMV9jaGFuZGVmX2Rmc19yZXF1aXJlZChzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODozMS41Njk2OTYyMDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMzQ1Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcG9zaXRpb24gb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGVtOlxuXG4qKkFuYWx5emluZyBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGFuZCBgc3RhX2luZm9fZmx1c2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIHdlJ3JlIGxlYXZpbmcgYW4gSUJTUyAoSW5kZXBlbmRlbnQgQmFzaWMgU2VydmljZSBTZXQpIG5ldHdvcmsgYW5kIGhvdyB3ZSdyZSBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGluZm9ybWF0aW9uLiBUaGlua2luZyBhYm91dCBgaWVlZTgwMjExX2lic3NfbGVhdmVgIGZpcnN0Li4uIGl0J3MgdGhlIGV4aXQgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgZ3JhY2VmdWwgKG9yIG5vdC1zby1ncmFjZWZ1bCwgZGVwZW5kaW5nIG9uIGNpcmN1bXN0YW5jZXMpIGRlcGFydHVyZS4gSSdtIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGRlYXV0aGVudGljYXRpbmcgc3RhdGlvbnMsIHBvc3NpYmx5IHNlbmRpbmcgZGlzYXNzb2NpYXRpb24gZnJhbWVzLCBhbmQgZ2VuZXJhbGx5IG1ha2luZyBzdXJlIHdlJ3JlIG5vIGxvbmdlciBwYXJ0IG9mIHRoYXQgc3BlY2lmaWMgSUJTUyBCU1NJRC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdXBkYXRpbmcgb3VyIGludGVybmFsIHN0YXRlIHRvIHJlZmxlY3QgdGhlIG5ldHdvcmsgY2hhbmdlIOKAkyBwZXJoYXBzIGNsZWFyaW5nIG91ciBJQlNTLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgYW55IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyBJQlNTIHNjZW5hcmlvcyBjYW4gYmUgdHJpY2t5IHdpdGggbXVsdGlwbGUgc3RhdGlvbnMgY29uY3VycmVudGx5IHZ5aW5nIGZvciBuZXR3b3JrIGFjY2Vzcy5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgc3RhX2luZm9fZmx1c2hgLiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQncyBhYm91dCBjbGVhbmluZyB1cCBzdGFsZSBzdGF0aW9uIGVudHJpZXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBvZiBhZ2luZyBtZWNoYW5pc21zLCBsaWtlIHRpbWVvdXRzLiBIb3cgb2Z0ZW4gZG9lcyBpdCBydW4/IERvZXMgaXQgY2hlY2sgZm9yIGFjdGl2ZSBkYXRhIHRyYW5zbWlzc2lvbiBvciBqdXN0IGEgc2ltcGxlIHRpbWVyPyBBcmUgdGhlcmUgYW55IGhldXJpc3RpY3MgaW52b2x2ZWQgdG8gcHJldmVudCBwcmVtYXR1cmVseSBmbHVzaGluZyBhY3RpdmUgc3RhdGlvbnMsIHBlcmhhcHMgZHVlIHRvIHRlbXBvcmFyeSBuZXR3b3JrIGdsaXRjaGVzPyBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgYSBsYXJnZSBudW1iZXIgb2Ygc3RhdGlvbnMsIGFuZCB3aGV0aGVyIGl0IHVzZXMgYW55IHNtYXJ0IGluZGV4aW5nIG9yIGxvb2t1cCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIG92ZXJoZWFkLiBNb3Jlb3ZlciwgSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgb2YgdGhlIHN0YWNrIC0tIGhvdyBkb2VzIGl0IGVuc3VyZSB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgaXMgaW5mb3JtZWQgb2YgdGhlIHN0YXRpb24ncyByZW1vdmFsPyBJcyBpdCB0aWVkIGludG8gdGhlIGJlYWNvbmluZyBwcm9jZXNzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZmx1c2hpbmcgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYW55IHBvdGVudGlhbCBmdXR1cmUgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2FtZSBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjM2LjQ4MzE1NTYyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lic3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3M7XFxuMTgxMTpcXHRcXG4xODEyOlxcdFxcdGlmaWJzcy1cXHUwMDNlc3NpZF9sZW4gPSAwO1xcbjE4MTM6XFx0XFx0aWVlZTgwMjExX2lic3NfZGlzY29ubmVjdChzZGF0YSk7XFxuMTgxNDpcXHRcXHRldGhfemVyb19hZGRyKGlmaWJzcy1cXHUwMDNlYnNzaWQpO1xcbjE4MTU6XFx0XFxuMTgxNjpcXHRcXHQvKiByZW1vdmUgYmVhY29uICovXFxuMTgxNzpcXHRcXHRrZnJlZShzZGF0YS1cXHUwMDNldS5pYnNzLmllKTtcXG4xODE4OlxcdFxcdHNkYXRhLVxcdTAwM2V1Lmlic3MuaWUgPSBOVUxMO1xcbjE4MTk6XFx0XFx0c2RhdGEtXFx1MDAzZXUuaWJzcy5pZV9sZW4gPSAwO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHQvKiBvbiB0aGUgbmV4dCBqb2luLCByZS1wcm9ncmFtIEhUIHBhcmFtZXRlcnMgKi9cXG4xODIyOlxcdFxcdG1lbXNldChcXHUwMDI2aWZpYnNzLVxcdTAwM2VodF9jYXBhLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhKSk7XFxuMTgyMzpcXHRcXHRtZW1zZXQoXFx1MDAyNmlmaWJzcy1cXHUwMDNlaHRfY2FwYV9tYXNrLCAwLCBzaXplb2YoaWZpYnNzLVxcdTAwM2VodF9jYXBhX21hc2spKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzZGF0YS1cXHUwMDNlc2tiX3F1ZXVlKTtcXG4xODI2OlxcdFxcbjE4Mjc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lmlic3MudGltZXIpO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRyZXR1cm4gMDtcXG4xODMwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6MzYuNDgzMzE5ODExWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODA0MTc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogYHN0YV9pbmZvX2ZsdXNoYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzdGFfaW5mb19mbHVzaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb25hbCBjb250ZXh0LiBQcmVzdW1hYmx5LCB0aGlzIGlzIHJlbGF0ZWQgdG8gc3RhdGlvbiBpbmZvcm1hdGlvbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlbHkgdGllZCB0byBhbiA4MDIuMTEgaW1wbGVtZW50YXRpb24sIGdpdmVuIHRoZSBcInN0YVwiIHByZWZpeC4gVGhlIFwiZmx1c2hcIiBwYXJ0IHN1Z2dlc3RzIGEgY2xlYXJpbmcsIGludmFsaWRhdGlvbiwgb3IgcmVtb3ZhbCBhY3Rpb24sIGFsbW9zdCBjZXJ0YWlubHkgZGVhbGluZyB3aXRoIGNhY2hlZCBvciBzdG9yZWQgZGF0YSBhYm91dCBzcGVjaWZpYyBzdGF0aW9ucy4gVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhcmU6ICpXaGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmbHVzaGVkPyAqV2h5KiBpcyBpdCBiZWluZyBmbHVzaGVkICh3aGF0IHRyaWdnZXJzIHRoZSBvcGVyYXRpb24pPyBBbmQgKndoZW4qIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBzdGF0aW9uIG1hbmFnZW1lbnQgdG8gZ2V0IGEgY29tcGxldGUgZ3Jhc3Agb2YgaXRzIGltcGFjdC4gSSBiZXQgdGhpcyBpcyBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgc3RhbGUgb3Igb3V0ZGF0ZWQgc3RhdGlvbiBlbnRyaWVzIGZyb20gZ3VtbWluZyB1cCB0aGUgd29ya3MsIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5LXV0aWxpemVkIHdpcmVsZXNzIGVudmlyb25tZW50LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQwLjY2Mzc0MDE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MzQ0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHN0YV9pbmZvX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NTQ9aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NjYtICovXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTY3OnN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk2OC1cXHRcXHRcXHRcXHQgaW50IGxpbmtfaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQwLjcxNTE5Mzg3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkwNzczMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0YV9pbmZvLmhgIGZvciBzb21lIDgwMi4xMSBEZXRhaWxzKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBhdCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmhgLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDk1MCBhbmQgOTgwLiBUaGF0IHJlZ2lvbiB1c3VhbGx5IGhvbGRzIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscywgcHJvYmFibHkgc29tZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gc3RhdGlvbiBzdGF0ZSwgcmF0ZSBjb250cm9sIG9yIHNvbWV0aGluZyBhYm91dCB0aGUgdmFyaW91cyBmbGFncyB1c2VkIHRoZXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoYXQgcGFydCBvZiB0aGUgZmlsZSB0byBiZSBzdXJlLiBJJ20gaG9waW5nIEkgY2FuIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUgd2l0aG91dCB0b28gbXVjaCBkaWdnaW5nLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODo0NC4xMDU5Njg2MjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3N0YV9pbmZvLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdCAqXFx0ICAgICB3aWxsIGJlIHJlbW92ZWQuIElmIC0xIGlzIHBhc3NlZCwgYWxsIFNUQSBlbnRyaWVzIHdpbGwgYmVcXG4gOTUxOlxcdCAqXFx0ICAgICByZW1vdmVkLlxcbiA5NTI6XFx0ICogQGRvX25vdF9mbHVzaF9zdGE6IGEgc3RhdGlvbiB0aGF0IHNob3VsZG4ndCBiZSBmbHVzaGVkLlxcbiA5NTM6XFx0ICovXFxuIDk1NDpcXHRpbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcXG4gOTU1OlxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHN0cnVjdCBzdGFfaW5mbyAqZG9fbm90X2ZsdXNoX3N0YSk7XFxuIDk1NjpcXHRcXG4gOTU3OlxcdC8qKlxcbiA5NTg6XFx0ICogc3RhX2luZm9fZmx1c2ggLSBmbHVzaCBtYXRjaGluZyBTVEEgZW50cmllcyBmcm9tIHRoZSBTVEEgdGFibGVcXG4gOTU5OlxcdCAqXFxuIDk2MDpcXHQgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgcmVtb3ZlZCBTVEEgZW50cmllcy5cXG4gOTYxOlxcdCAqXFxuIDk2MjpcXHQgKiBAc2RhdGE6IHNkYXRhIHRvIHJlbW92ZSBhbGwgc3RhdGlvbnMgZnJvbVxcbiA5NjM6XFx0ICogQGxpbmtfaWQ6IGlmIGdpdmVuIChcXHUwMDNlPTApLCBhbGwgdGhvc2UgU1RBIGVudHJpZXMgdXNpbmcgQGxpbmtfaWQgb25seVxcbiA5NjQ6XFx0ICpcXHQgICAgIHdpbGwgYmUgcmVtb3ZlZC4gSWYgLTEgaXMgcGFzc2VkLCBhbGwgU1RBIGVudHJpZXMgd2lsbCBiZVxcbiA5NjU6XFx0ICpcXHQgICAgIHJlbW92ZWQuXFxuIDk2NjpcXHQgKi9cXG4gOTY3OlxcdHN0YXRpYyBpbmxpbmUgaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiA5Njg6XFx0XFx0XFx0XFx0XFx0IGludCBsaW5rX2lkKVxcbiA5Njk6XFx0e1xcbiA5NzA6XFx0XFx0cmV0dXJuIF9fc3RhX2luZm9fZmx1c2goc2RhdGEsIGZhbHNlLCBsaW5rX2lkLCBOVUxMKTtcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0dm9pZCBzdGFfc2V0X3JhdGVfaW5mb190eChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4gOTc0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLFxcbiA5NzU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmF0ZV9pbmZvICpyaW5mbyk7XFxuIDk3NjpcXHR2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbiA5Nzc6XFx0XFx0XFx0ICAgYm9vbCB0aWRzdGF0cyk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdHZvaWQgc3RhX3NldF9hY2N1bXVsYXRlZF9yZW1vdmVkX2xpbmtzX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyk7XFxuIDk4MTpcXHRcXG4gOTgyOlxcdHUzMiBzdGFfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHR2b2lkIGllZWU4MDIxMV9zdGFfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxODo0ODo0NC4xMDYwNTEyMjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Nzg0MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fc3RhX2luZm9fZmx1c2hgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYF9fc3RhX2luZm9fZmx1c2hgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSBhbmQgaW1wYWN0LiBHaXZlbiB0aGUgbmFtZSwgXCJmbHVzaFwiIHN1Z2dlc3RzIHNvbWUga2luZCBvZiBjbGVhcmluZyBvciBpbnZhbGlkYXRpb24gb3BlcmF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBzdGF0aW9uIChTVEEpIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCoga2luZCBvZiBzdGF0aW9uIGluZm8sICp3aGVyZSogaXQncyBzdG9yZWQsIGFuZCAqd2h5KiBpdCBuZWVkcyBmbHVzaGluZy5cblxuTXkgYnJhaW4ncyBpbW1lZGlhdGVseSBzdGFydGluZyB0byBydW4gdGhyb3VnaCBwb3RlbnRpYWwgaW1wbGljYXRpb25zOiBJcyB0aGlzIGEgY2FjaGU/IEEgbG9va3VwIHRhYmxlPyBEYXRhIHN0b3JlZCBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBvciBkZXZpY2U/IElzIHRoaXMgYSBjbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBhIHN0YXRpb24gZGlzY29ubmVjdHMsIG9yIG1heWJlIGR1cmluZyBhIGNoYW5uZWwgc3dpdGNoIG9yIG90aGVyIGRpc3J1cHRpdmUgZXZlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCB3aXRoIHRoZSBmdW5jdGlvbj8gRG9lcyBpdCBpbnZvbHZlIHJlbGVhc2luZyByZXNvdXJjZXM/IElmIHNvLCB3aGF0IGtpbmQ/IElmIHRoZXJlJ3MgYW4gaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24sIGhvdyBkb2VzIHRoaXMgYWZmZWN0IG15IHdvcms/XG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQ/IEEgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuZCBzYWZldHksIHNvIGxldCdzIHN0YXJ0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE4OjQ4OjQ4LjgwMzg5NDk2MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNzc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zdGFfaW5mb19mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTE3MDQ9c3RhdGljIGludCBpZWVlODAyMTFfc3RvcF9hcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTE3NzUtXFxubmV0L21hYzgwMjExL2NmZy5jOjE3NzY6XFx0X19zdGFfaW5mb19mbHVzaChzZGF0YSwgdHJ1ZSwgbGlua19pZCwgTlVMTCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE3NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTQwMTA9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNDEyMy1cXHQvKiBSZW1vdmUgVERMUyBwZWVycyAqL1xcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NDEyNDpcXHRfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgLTEsIGFwX3N0YSk7XFxubmV0L21hYzgwMjExL21sbWUuYy00MTI1LVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTYzNj12b2lkIHN0YV9pbmZvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xNjQzLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjE2NDQ6aW50IF9fc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgdmxhbnMsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTY0NS1cXHRcXHQgICAgIGludCBsaW5rX2lkLCBzdHJ1Y3Qgc3RhX2luZm8gKmRvX25vdF9mbHVzaF9zdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD05NDA9dm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk0Mi0vKipcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5NDM6ICogX19zdGFfaW5mb19mbHVzaCAtIGZsdXNoIG1hdGNoaW5nIFNUQSBlbnRyaWVzIGZyb20gdGhlIFNUQSB0YWJsZVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk0NC0gKlxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTUzLSAqL1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjk1NDppbnQgX19zdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCB2bGFucyxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05NTUtXFx0XFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTk2Nz1zdGF0aWMgaW5saW5lIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTk2OS17XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTcwOlxcdHJldHVybiBfX3N0YV9pbmZvX2ZsdXNoKHNkYXRhLCBmYWxzZSwgbGlua19pZCwgTlVMTCk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTcxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NDguODQ5MTc1NjE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjEwNDY5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc3RhX2luZm8uY2AgLSBMaW5lIDE2NDQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE2NDQgaW4gYHN0YV9pbmZvLmNgLiBCYXNlZCBvbiBjb250ZXh0LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21lIHN0YXRpb24gaW5mb3JtYXRpb24gaGFuZGxpbmcuIEdpdmVuIHRoZSBmaWxlIG5hbWUsIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhdGlvbiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gcmVnYXJkaW5nIGEgcGFydGljdWxhciBzdGF0aW9uLiBMaW5lIDE2NDQgaXMgYSBtYXJrZXI7IGl04oCZcyB0aGUgbG9jYXRpb24gaW4gdGhlIGNvZGUgd2hlcmUgSeKAmW0gZ29pbmcgdG8gc3RhcnQgbXkgZXhhbWluYXRpb24uIEZyb20gaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIGJlaW5nIG1hZGUsIHRoZSB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzLCBzcGVjaWZpY2FsbHkgd2hhdCBmdW5jdGlvbiBjYWxscyBhcmUgbWFkZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbGluZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gVGhlIHNwZWNpZmljIGdvYWwgd2lsbCBiZSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJ4oCZbSBjdXJyZW50bHkgb24uIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHdoYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTIuNDEwMjI1MDAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjQ0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjQ0OlxcdGludCBfX3N0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIHZsYW5zLFxcbjE2NDU6XFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgc3RydWN0IHN0YV9pbmZvICpkb19ub3RfZmx1c2hfc3RhKVxcbjE2NDY6XFx0e1xcbjE2NDc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuMTY0ODpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDtcXG4xNjQ5OlxcdFxcdExJU1RfSEVBRChmcmVlX2xpc3QpO1xcbjE2NTA6XFx0XFx0aW50IHJldCA9IDA7XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMTY1MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRXQVJOX09OKHZsYW5zIFxcdTAwMjZcXHUwMDI2IHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCk7XFxuMTY1NjpcXHRcXHRXQVJOX09OKHZsYW5zIFxcdTAwMjZcXHUwMDI2ICFzZGF0YS1cXHUwMDNlYnNzKTtcXG4xNjU3OlxcdFxcbjE2NTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXN0YV9saXN0LCBsaXN0KSB7XFxuMTY1OTpcXHRcXHRcXHRpZiAoc2RhdGEgIT0gc3RhLVxcdTAwM2VzZGF0YSBcXHUwMDI2XFx1MDAyNlxcbjE2NjA6XFx0XFx0XFx0ICAgICghdmxhbnMgfHwgc2RhdGEtXFx1MDAzZWJzcyAhPSBzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MpKVxcbjE2NjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTY2MjpcXHRcXG4xNjYzOlxcdFxcdFxcdGlmIChzdGEgPT0gZG9fbm90X2ZsdXNoX3N0YSlcXG4xNjY0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRcXHRcXHRpZiAobGlua19pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzIFxcdTAwMjZcXHUwMDI2XFxuMTY2NzpcXHRcXHRcXHQgICAgIShzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSkpXFxuMTY2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNjY5OlxcdFxcbjE2NzA6XFx0XFx0XFx0aWYgKCFXQVJOX09OKF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MShzdGEpKSlcXG4xNjcxOlxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzdGEtXFx1MDAzZWZyZWVfbGlzdCwgXFx1MDAyNmZyZWVfbGlzdCk7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdHJldCsrO1xcbjE2NzQ6XFx0XFx0fVxcbjE2NzU6XFx0XFxuMTY3NjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmZyZWVfbGlzdCkpIHtcXG4xNjc3OlxcdFxcdFxcdGJvb2wgc3VwcG9ydF9wMnBfcHMgPSB0cnVlO1xcbjE2Nzg6XFx0XFxuMTY3OTpcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xNjgwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgXFx1MDAyNmZyZWVfbGlzdCwgZnJlZV9saXN0KSB7XFxuMTY4MTpcXHRcXHRcXHRcXHRpZiAoIXN0YS1cXHUwMDNlc3RhLnN1cHBvcnRfcDJwX3BzKVxcbjE2ODI6XFx0XFx0XFx0XFx0XFx0c3VwcG9ydF9wMnBfcHMgPSBmYWxzZTtcXG4xNjgzOlxcdFxcdFxcdFxcdF9fc3RhX2luZm9fZGVzdHJveV9wYXJ0MihzdGEsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTIuNDEwMzk0OTAyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MTIxNjQ5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElCU1MgRGlzY29ubmVjdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggYSB0cmlja3kgc3luY2hyb25pemF0aW9uIGlzc3VlIHJlbGF0ZWQgdG8gdGVhcmluZyBkb3duIElCU1MgaW50ZXJmYWNlcyBhbmQgc3RhdGlvbiBpbmZvcm1hdGlvbiBmbHVzaGluZy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgc3RhX2luZm9fZmx1c2goKWAgYW5kIGBuZXRpZl9jYXJyaWVyX29mZigpYCBhcmUgb3JkZXJlZCB3aGVuIGFuIElCU1MgZGlzY29ubmVjdCBoYXBwZW5zLlxuXG5IZXJlJ3Mgd2hhdCBJIHNlZTogYHN0YV9pbmZvX2ZsdXNoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBmbHVzaGVkIHN0YXRpb25zIChgcmV0YCkuIFdoZW4gc3RhdGlvbnMgKmFyZSogZmx1c2hlZCAoYHJldCBcdTAwM2UgMGAgd2hpY2ggbWVhbnMgYCFsaXN0X2VtcHR5KFx1MDAyNmZyZWVfbGlzdClgKSwgYHN5bmNocm9uaXplX25ldCgpYCBnZXRzIGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC4gQ3J1Y2lhbGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkLCBzbyBgcmV0YCBpcyAwKSwgdGhlbiBgc3luY2hyb25pemVfbmV0KClgICp3YXNuJ3QqIGNhbGxlZCBmcm9tIHdpdGhpbiBgX19zdGFfaW5mb19mbHVzaCgpYC5cblxuVGhlIG9yaWdpbmFsIGNvZGUgZGlkIGBuZXRpZl9jYXJyaWVyX29mZigpYCAqYWZ0ZXIqIGZsdXNoaW5nIHN0YXRpb25zIGFuZCBoYW5kbGluZyBpbmNvbXBsZXRlIHN0YXRpb25zLiBUaGVuLCBlaXRoZXIgYGNzYV9jb25uZWN0aW9uX2Ryb3Bfd29ya2Agb3IgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCB3b3VsZCBjYWxsIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBwYXRjaCBzaGlmdHMgdGhpbmdzIGFyb3VuZDogYG5ldGlmX2NhcnJpZXJfb2ZmKClgIG5vdyBoYXBwZW5zICpiZWZvcmUqIHN0YXRpb24gZmx1c2hpbmcuIEltcG9ydGFudGx5LCBpZiBgc3RhX2luZm9fZmx1c2goKWAgcmV0dXJucyAwIChubyBzdGF0aW9ucyBmbHVzaGVkKSwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBjYWxscyBgc3luY2hyb25pemVfbmV0KClgIGluIGBpZWVlODAyMTFfaWJzc19kaXNjb25uZWN0KClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxscyBpbiBgY3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrYCBhbmQgYGllZWU4MDIxMV9pYnNzX2xlYXZlYCBoYXZlIGJlZW4gcmVtb3ZlZCwgYmVjYXVzZSBgc3luY2hyb25pemVfbmV0KClgIGlzIG5vdyBndWFyYW50ZWVkIHRvIGhhcHBlbiBhZnRlciB0aGUgY2FycmllciBpcyBvZmYuXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbSwgbGlrZWx5IGEgcmFjZSBjb25kaXRpb24gb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL1JDVSBpc3N1ZSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3Mgb2YgSUJTUyBpbnRlcmZhY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN0YXRpb25zLiBUaGUgY2hhbmdlIGluIG9yZGVyaW5nIGVuc3VyZXMgdGhhdCB0aGUgbmV0d29yayBzdGFjayBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYmVmb3JlIHN0YXRpb24gaW5mb3JtYXRpb24gaXMgY2xlYXJlZC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSd2ZSB3YWxrZWQgdGhyb3VnaCB0aGUgcGF0Y2g6XG5cbjEuICBJdCBkb2Vzbid0IGFwcGVhciB0byBwYXNzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZS5cbjIuICBUaGVyZSdzIG5vIGJyYW5jaGluZyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBzdGFfaW5mb19mbHVzaCgpYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgYSB3ZWxsIGRlZmluZWQgaW50ICgwIG9yIGEgcG9zaXRpdmUgbnVtYmVyKS5cbjMuICBUaGUgcGF0Y2ggZG9lc24ndCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgVGhlcmUgYXJlbid0IGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuNS4gIFRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24tZm9jdXNlZCBjaGFuZ2U7IHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdXNlIGhlcmUuXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGZvY3VzIG9uIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBjYXJyaWVyIHN0YXRlLCB0aGUgcmVsZXZhbnQgdG9vbHMgZm9yIGZpbmRpbmcgYnVncyBoZXJlIHdvdWxkIGJlIEtBU0FOLCBMT0NLREVQLCBhbmQgUkNVIGRlYnVnZ2luZywgd2hpY2ggYXJlIGNvbmNlcm5lZCB3aXRoIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cbkxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTg6NDg6NTguMzIyNTYzNDIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIGNhcnJpZXIgc3RhdGUgdGVhcmRvd24gb3JkZXJpbmcgaW4gbWFjODAyMTEgSUJTUyBtb2RlIChtb3ZpbmcgbmV0aWZfY2Fycmllcl9vZmYoKSBiZWZvcmUgc3RhX2luZm9fZmx1c2goKSBhbmQgY2FsbGluZyBzeW5jaHJvbml6ZV9uZXQoKSBpZiBubyBzdGF0aW9ucyB3ZXJlIGZsdXNoZWQsIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBzeW5jaHJvbml6ZV9yY3UoKSBjYWxscyBpbiBjYWxsZXJzKS4gVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IG5ldHdvcmsgc3luY2hyb25pemF0aW9uLCBSQ1UgZ3JhY2UgcGVyaW9kcywgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN1YnN5c3RlbSBib3VuZGFyaWVzLCBhbmQgbm8gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGJ1Z3MgKGUuZy4gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY2FycmllciBzdGF0ZSB0ZWFyZG93biBvcmRlcmluZyBpbiBtYWM4MDIxMSBJQlNTIG1vZGUgKG1vdmluZyBuZXRpZl9jYXJyaWVyX29mZigpIGJlZm9yZSBzdGFfaW5mb19mbHVzaCgpIGFuZCBjYWxsaW5nIHN5bmNocm9uaXplX25ldCgpIGlmIG5vIHN0YXRpb25zIHdlcmUgZmx1c2hlZCwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IHN5bmNocm9uaXplX3JjdSgpIGNhbGxzIGluIGNhbGxlcnMpLiBUaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgbmV0d29yayBzeW5jaHJvbml6YXRpb24sIFJDVSBncmFjZSBwZXJpb2RzLCBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3Vic3lzdGVtIGJvdW5kYXJpZXMsIGFuZCBubyBvcGVyYXRpb25zIGludm9sdmluZyB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgYnVncyAoZS5nLiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmd4sv[1] Phase: Succeeded StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 18:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 18:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2] Phase: Succeeded StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 18:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 18:49:07 +0000 UTC FinishedAt: 2026-08-31 18:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd4sv/series-workflowmd4sv-convert-artifact-3236032302/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 18:49:17 +0000 UTC FinishedAt: 2026-08-31 19:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 18:49:17 +0000 UTC FinishedAt: 2026-08-31 19:04:24 +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:*496cf601-bfd3-48f9-b62b-1104487fa0a9,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-workflowmd4sv/series-workflowmd4sv-convert-artifact-3236032302/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": "329ff8bd-8996-42b0-9f9b-e04b289e7e89", "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-workflowmd4sv/series-workflowmd4sv-build-action-569381524/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 18:49:17 +0000 UTC FinishedAt: 2026-08-31 19:04:14 +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:*496cf601-bfd3-48f9-b62b-1104487fa0a9,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-workflowmd4sv/series-workflowmd4sv-convert-artifact-3236032302/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": "329ff8bd-8996-42b0-9f9b-e04b289e7e89", "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-workflowmd4sv/series-workflowmd4sv-build-action-569381524/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 19:04:24 +0000 UTC FinishedAt: 2026-08-31 19:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 19:04:24 +0000 UTC FinishedAt: 2026-08-31 19:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 19:04:24 +0000 UTC FinishedAt: 2026-08-31 19:04:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 19:04:24 +0000 UTC FinishedAt: 2026-08-31 19:04:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmd4sv/series-workflowmd4sv-convert-artifact-253273377/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 19:04:34 +0000 UTC FinishedAt: 2026-08-31 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 19:04:34 +0000 UTC FinishedAt: 2026-08-31 19:06:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*329ff8bd-8996-42b0-9f9b-e04b289e7e89,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-workflowmd4sv/series-workflowmd4sv-build-action-569381524/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-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 19:06:38 +0000 UTC FinishedAt: 2026-08-31 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 19:06:38 +0000 UTC FinishedAt: 2026-08-31 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 19:06:38 +0000 UTC FinishedAt: 2026-08-31 19:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 19:06:38 +0000 UTC FinishedAt: 2026-08-31 19:21:33 +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:*496cf601-bfd3-48f9-b62b-1104487fa0a9,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-workflowmd4sv/series-workflowmd4sv-convert-artifact-253273377/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": "481234cc-149f-49c1-b471-12a91152a2d6", "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-workflowmd4sv/series-workflowmd4sv-build-action-2240991277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 19:06:38 +0000 UTC FinishedAt: 2026-08-31 19:21:23 +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:*496cf601-bfd3-48f9-b62b-1104487fa0a9,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-workflowmd4sv/series-workflowmd4sv-convert-artifact-253273377/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": "481234cc-149f-49c1-b471-12a91152a2d6", "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-workflowmd4sv/series-workflowmd4sv-build-action-2240991277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 19:21:33 +0000 UTC FinishedAt: 2026-08-31 19:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 19:21:33 +0000 UTC FinishedAt: 2026-08-31 19:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 19:21:33 +0000 UTC FinishedAt: 2026-08-31 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 19:21:33 +0000 UTC FinishedAt: 2026-08-31 19:23:23 +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:*481234cc-149f-49c1-b471-12a91152a2d6,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-workflowmd4sv/series-workflowmd4sv-build-action-2240991277/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-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"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:*329ff8bd-8996-42b0-9f9b-e04b289e7e89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*481234cc-149f-49c1-b471-12a91152a2d6,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-workflowmd4sv/series-workflowmd4sv-build-action-569381524/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-workflowmd4sv/series-workflowmd4sv-build-action-2240991277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 19:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 19:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"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-workflowmd4sv/series-workflowmd4sv-convert-artifact-3856326326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 19:23:33 +0000 UTC FinishedAt: 2026-08-31 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 19:24:03 +0000 UTC FinishedAt: 2026-08-31 22:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd4sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_ibss_leave","ieee80211_ibss_join","ieee80211_leave_ibss"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ba54393dcd7adf75a9f39f5a933b1538349cad5","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"f9fc9487-e36e-49ff-8d15-3fce4a3704e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 19:24:03 +0000 UTC FinishedAt: 2026-08-31 22:30:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*329ff8bd-8996-42b0-9f9b-e04b289e7e89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*481234cc-149f-49c1-b471-12a91152a2d6,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-workflowmd4sv/series-workflowmd4sv-build-action-569381524/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-workflowmd4sv/series-workflowmd4sv-build-action-2240991277/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-workflowmd4sv/series-workflowmd4sv-convert-artifact-3856326326/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,}