Name: series-workflow8xnqg Phase: Succeeded StartedAt: 2026-09-02 09:00:28 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[0] Phase: Succeeded StartedAt: 2026-09-02 09:00:28 +0000 UTC FinishedAt: 2026-09-02 09:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 09:00:28 +0000 UTC FinishedAt: 2026-09-02 09:23:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "a5e547fa-eaae-4102-9fd5-c0505cddc37c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_append_data", "ip_make_skb", "ip6_append_data", "ip6_make_skb", "ip6_mtu", "ip6_forward" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X210dSYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiAmIzQzOzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICYjNDM7MTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4gXG4gXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbiBcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbiBcbiBcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC0xNDMyLDYgJiM0MzsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4mIzQzO1x0aWYgKHNrX2lzX3VkcChzaykpXG4mIzQzO1x0XHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVx1MDAzZWdzb19zaXplO1xuIFx0Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTI1LDYgJiM0MzsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4mIzQzO1x0Y29ya19mcmFnc2l6ZS5weSBcXFxuIFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxuIFx0ZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFxcXG4gXHRlY21wX3JlaGFzaC5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWZkNjQzZDA3ZWMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxuQEAgLTAsMCAmIzQzOzEsMTg3IEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7JiMzOTsmIzM5OyYjMzk7VGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJiMzOTsmIzM5OyYjMzk7XG4mIzQzO1xuJiM0MztpbXBvcnQgZXJybm9cbiYjNDM7aW1wb3J0IGd6aXBcbiYjNDM7aW1wb3J0IG9zXG4mIzQzO2ltcG9ydCBzb2NrZXRcbiYjNDM7aW1wb3J0IHN0cnVjdFxuJiM0MztpbXBvcnQgc3VicHJvY2Vzc1xuJiM0Mztmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXG4mIzQzO1xuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKFxuJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCxcbiYjNDM7ICAgIEtzZnRTa2lwRXgsXG4mIzQzOyAgICBOZXROUyxcbiYjNDM7ICAgIE5ldE5TRW50ZXIsXG4mIzQzOyAgICBkZWZlcixcbiYjNDM7ICAgIGlwLFxuJiM0MzsgICAga3NmdF9lcSxcbiYjNDM7ICAgIGtzZnRfZXhpdCxcbiYjNDM7ICAgIGtzZnRfcHIsXG4mIzQzOyAgICBrc2Z0X3JhaXNlcyxcbiYjNDM7ICAgIGtzZnRfcnVuLFxuJiM0MzsgICAga3NmdF90cnVlLFxuJiM0MzsgICAga3NmdF92YXJpYW50cyxcbiYjNDM7KVxuJiM0MztcbiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTBcbiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzXG4mIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDJcbiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTRcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb246IHN0cikgLVx1MDAzZSBib29sIHwgTm9uZTpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuXG4mIzQzOyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIGNvbmZpZyBpcyBub3QgZm91bmQ7IG90aGVyd2lzZSByZXR1cm5zIFRydWUvRmFsc2VcbiYjNDM7ICAgIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9uIHZhbHVlIGluIHRoZSBjb25maWcuXG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7XG4mIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4mIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksXG4mIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSxcbiYjNDM7ICAgIF06XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBhc3NlcnRfZGVidWdfa2VybmVsKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7XG4mIzQzOyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspXG4mIzQzOyAgICBpZiByZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICBrc2Z0X3ByKFwmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcJiMzNDspXG4mIzQzOyAgICBlbGlmIG5vdCByZXM6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cdTAwM2UgYm9vbDpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIHByb2R1Y2VkIGEgV0FSTiBpbiBkbWVzZy5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6XG4mIzQzOyAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dCwgY2hlY2s9RmFsc2UpXG4mIzQzOyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwXG4mIzQzO1xuJiM0MztcbiYjNDM7QGNvbnRleHRtYW5hZ2VyXG4mIzQzO2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7XG4mIzQzOyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIGlwKCYjMzk7bGluayBhZGQgZHVtbXkgdHlwZSBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7ICAgIHdpdGggZGVmZXIoaXAsICYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpOlxuJiM0MzsgICAgICAgIGlwKGYmIzM5O2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fSYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKVxuJiM0MzsgICAgICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTtcbiYjNDM7ICAgICAgICBub2RhZCA9ICYjMzk7bm9kYWQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5O1xuJiM0MzsgICAgICAgIGxvY2FsID0gJiMzOTtmZDAwOjoxLzY0JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7MTAuMC4wLjEvMjQmIzM5O1xuJiM0MzsgICAgICAgIHJlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTtcbiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfSYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICB5aWVsZFxuJiM0MztcbiYjNDM7XG4mIzQzO0Brc2Z0X3ZhcmlhbnRzKFtcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXG4mIzQzOyAgICAgICAgJiMzOTtpcHY2JiMzOTssXG4mIzQzOyAgICAgICAgVHJ1ZSxcbiYjNDM7ICAgICAgICBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcbiYjNDM7ICAgICAgICAmIzM5O2ZkMDA6OjImIzM5OyxcbiYjNDM7ICAgICAgICAmIzM5O3VkcF92Nl9zZW5kX3NrYiYjMzk7LFxuJiM0MzsgICAgKSxcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXG4mIzQzOyAgICAgICAgJiMzOTtpcHY0JiMzOTssXG4mIzQzOyAgICAgICAgRmFsc2UsXG4mIzQzOyAgICAgICAgc29ja2V0LkFGX0lORVQsXG4mIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSxcbiYjNDM7ICAgICAgICAmIzM5OzEwLjAuMC4yJiMzOTssXG4mIzQzOyAgICAgICAgJiMzOTt1ZHBfc2VuZF9za2ImIzM5OyxcbiYjNDM7ICAgICksXG4mIzQzO10pXG4mIzQzO2RlZiB0ZXN0X3VkcChcbiYjNDM7ICAgIGlwdjY6IGJvb2wsXG4mIzQzOyAgICBhZjogc29ja2V0LkFkZHJlc3NGYW1pbHksXG4mIzQzOyAgICBzb2Nrb3B0czogdHVwbGVbaW50LCBpbnQsIGludF0sXG4mIzQzOyAgICBkZXN0aXA6IHN0cixcbiYjNDM7ICAgIGZ1bmM6IHN0clxuJiM0MzspIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24mIzM5O3Qgb3ZlcmZsb3dcbiYjNDM7ICAgIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSBVRFAgaGVhZGVyLCB3aGljaCBjb3VsZCBoYXBwZW4gb24gb2xkZXJcbiYjNDM7ICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbiYjNDM7XG4mIzQzOyAgICBJUHY0OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFLCBidXQgdGhlIG92ZXJmbG93IGNvdWxkXG4mIzQzOyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb25cbiYjNDM7ICAgIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzIHRoYXQgaGF2ZSB1ZHBfc2V0X2xlbl9zaG9ydCB3aXRoIHRoZSB3YXJuaW5nLlxuJiM0MztcbiYjNDM7ICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmVcbiYjNDM7ICAgIHNlbnQgY29ycnVwdGVkIG9uIG9sZGVyIGtlcm5lbHMuIFRlc3QgYm90aDogc2VuZHRvIG11c3QgcmV0dXJuIEVNU0dTSVpFLCBhbmRcbiYjNDM7ICAgIGRtZXNnIG11c3QgYmUgY2xlYW4gb2Ygd2FybmluZ3Mgb24gQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMuXG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7XG4mIzQzOyAgICBpZiBub3QgaXB2NjpcbiYjNDM7ICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIChcbiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLFxuJiM0MzsgICAgICAgIGR1bW15X25ldGRldihucywgNjU1NTYgJiM0MzsgMjAgKiBpcHY2LCBpcHY2KSxcbiYjNDM7ICAgICAgICBOZXROU0VudGVyKG5zKSxcbiYjNDM7ICAgICAgICBzb2NrZXQuc29ja2V0KGFmLCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQsXG4mIzQzOyAgICApOlxuJiM0MzsgICAgICAgIGZkLnNldHNvY2tvcHQoKnNvY2tvcHRzKVxuJiM0MzsgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoZGVzdGlwLCAxMjM0KSlcbiYjNDM7ICAgICAgICAjIElQdjY6IEVNU0dTSVpFIGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4mIzQzOyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlXG4mIzQzOyAgICAgICAgIyAgICAgICBXQVJOIGlzIHByaW50ZWQgLSBpZ25vcmUgaXQgYW5kIHJlbHkgb24gdGhlIGRtZXNnIGNoZWNrLlxuJiM0MzsgICAgICAgIGlmIGUuZXhjZXB0aW9uIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSlcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oZnVuYyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7ICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGVcbiYjNDM7ICAgIGhhdmluZyB0aGUgZml4IGZvciBvdmVyc2l6ZWQgVURQIHBhY2tldHMuIHNlbmR0byBtdXN0IG5vdCByYWlzZSBhbiBPU0Vycm9yXG4mIzQzOyAgICBleGNlcHRpb24gKHdoZW4gcmFpc2VkLCB0aGUgdGVzdCBmYWlscyBhdXRvbWF0aWNhbGx5KS5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggKFxuJiM0MzsgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4mIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU4NCwgVHJ1ZSksXG4mIzQzOyAgICAgICAgTmV0TlNFbnRlcihucyksXG4mIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCxcbiYjNDM7ICAgICk6XG4mIzQzOyAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4mIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjhcbiYjNDM7ICAgICAgICBmZC5zZW5kdG8odWRwLCAoJiMzOTtmZDAwOjoyJiMzOTssIDApKVxuJiM0MztcbiYjNDM7XG4mIzQzO2lmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAga3NmdF9ydW4oW1xuJiM0MzsgICAgICAgIHRlc3RfdWRwLFxuJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbiYjNDM7ICAgIF0pXG4mIzQzOyAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X210dSYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwOToxNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NCw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwogCXJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xMzAzLDYgJiM0MzsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yaywKIAogCWNvcmstJmd0O2ZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID8KIAkJCSBkc3Q0X210dSgmYW1wO3J0LSZndDtkc3QpIDogUkVBRF9PTkNFKHJ0LSZndDtkc3QuZGV2LSZndDttdHUpOwomIzQzOwljb3JrLSZndDtmcmFnc2l6ZSA9IG1pbihjb3JrLSZndDtmcmFnc2l6ZSwgSVBfTUFYX01UVSk7CiAKIAlpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstJmd0O2ZyYWdzaXplKSkKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC0xNDMyLDYgJiM0MzsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yaywKIAlpZiAoZnJhZ19zaXplICZhbXA7JmFtcDsgZnJhZ19zaXplICZsdDsgbXR1KQogCQltdHUgPSBmcmFnX3NpemU7CiAKJiM0MzsJaWYgKHNrX2lzX3VkcChzaykpCiYjNDM7CQltdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7CiAJY29yay0mZ3Q7YmFzZS5mcmFnc2l6ZSA9IG10dTsKIAljb3JrLSZndDtiYXNlLmdzb19zaXplID0gaXBjNi0mZ3Q7Z3NvX3NpemU7CiAJY29yay0mZ3Q7YmFzZS50eF9mbGFncyA9IDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKaW5kZXggNTE3YzA5ZDYwYmVmNy4uM2VlMzM3OGY4YjI2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMjUsNiAmIzQzOzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJY21zZ19zb19tYXJrLnNoIFwKIAljbXNnX3NvX3ByaW9yaXR5LnNoIFwKIAljbXNnX3RpbWUuc2ggXAomIzQzOwljb3JrX2ZyYWdzaXplLnB5IFwKIAlkb3VibGVfdWRwX2VuY2FwLnNoIFwKIAlkcm9wX21vbml0b3JfdGVzdHMuc2ggXAogCWVjbXBfcmVoYXNoLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5CkBAIC0wLDAgJiM0MzsxLDE4NyBAQAomIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7JiMzOTsmIzM5OyYjMzk7VGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7aW1wb3J0IGVycm5vCiYjNDM7aW1wb3J0IGd6aXAKJiM0MztpbXBvcnQgb3MKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCBzdWJwcm9jZXNzCiYjNDM7ZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCAoCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQsCiYjNDM7ICAgIEtzZnRTa2lwRXgsCiYjNDM7ICAgIE5ldE5TLAomIzQzOyAgICBOZXROU0VudGVyLAomIzQzOyAgICBkZWZlciwKJiM0MzsgICAgaXAsCiYjNDM7ICAgIGtzZnRfZXEsCiYjNDM7ICAgIGtzZnRfZXhpdCwKJiM0MzsgICAga3NmdF9wciwKJiM0MzsgICAga3NmdF9yYWlzZXMsCiYjNDM7ICAgIGtzZnRfcnVuLAomIzQzOyAgICBrc2Z0X3RydWUsCiYjNDM7ICAgIGtzZnRfdmFyaWFudHMsCiYjNDM7KQomIzQzOwomIzQzO0lQX01UVV9ESVNDT1ZFUiA9IDEwCiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzCiYjNDM7SVBWNl9NVFVfRElTQ09WRVIgPSAyMwomIzQzO0lQVjZfUE1UVURJU0NfRE8gPSAyCiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X1RMVl9KVU1CTyA9IDE5NAomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbjogc3RyKSAtJmd0OyBib29sIHwgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIENoZWNrIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjb25maWcgb2YgdGhlIHJ1bm5pbmcga2VybmVsLgomIzQzOyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIGNvbmZpZyBpcyBub3QgZm91bmQ7IG90aGVyd2lzZSByZXR1cm5zIFRydWUvRmFsc2UKJiM0MzsgICAgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGNvbmZpZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFsKJiM0MzsgICAgICAgICgmIzM5Oy9wcm9jL2NvbmZpZy5neiYjMzk7LCBnemlwLm9wZW4pLAomIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSwKJiM0MzsgICAgXToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6CiYjNDM7ICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZiYjMzk7e29wdGlvbn09eSYjMzk7OgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQomIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgU2tpcCB0aGUgdGVzdCBpZiBDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCYjMzk7Q09ORklHX0RFQlVHX05FVCYjMzk7KQomIzQzOyAgICBpZiByZXMgaXMgTm9uZToKJiM0MzsgICAgICAgIGtzZnRfcHIoJiMzNDtXQVJOOiBDYW4mIzM5O3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0JiMzNDspCiYjNDM7ICAgIGVsaWYgbm90IHJlczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYzogc3RyKSAtJmd0OyBib29sOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIHByb2R1Y2VkIGEgV0FSTiBpbiBkbWVzZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6CiYjNDM7ICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJiMzOTtncmVwJiMzOTssICYjMzk7LXEmIzM5OywgZiYjMzk7V0FSTklORzouKntmdW5jfSYjMzk7XSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSkKJiM0MzsgICAgcmV0dXJuIHJlcy5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMAomIzQzOwomIzQzOwomIzQzO0Bjb250ZXh0bWFuYWdlcgomIzQzO2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIENyZWF0ZSBhIGR1bW15IG5ldGRldiBpbnNpZGUgdGhlIGdpdmVuIG5hbWVzcGFjZSwgYW5kIHR1bmUgaXQgZm9yIHRoZSB0ZXN0LgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgaXAoJiMzOTtsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOyAgICB3aXRoIGRlZmVyKGlwLCAmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKToKJiM0MzsgICAgICAgIGlwKGYmIzM5O2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fSYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBzZXQgZHVtbXkgdXAmIzM5OywgbnM9bnMpCiYjNDM7ICAgICAgICBmbGFnID0gJiMzOTstNiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgICAgICBub2RhZCA9ICYjMzk7bm9kYWQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5OwomIzQzOyAgICAgICAgbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7CiYjNDM7ICAgICAgICByZW1vdGUgPSAmIzM5O2ZkMDA6OjImIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMiYjMzk7CiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfSYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGlwKGYmIzM5O3tmbGFnfSBuZWlnaCBhZGQge3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgeWllbGQKJiM0MzsKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhbCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoCiYjNDM7ICAgICAgICAmIzM5O2lwdjYmIzM5OywKJiM0MzsgICAgICAgIFRydWUsCiYjNDM7ICAgICAgICBzb2NrZXQuQUZfSU5FVDYsCiYjNDM7ICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pLAomIzQzOyAgICAgICAgJiMzOTtmZDAwOjoyJiMzOTssCiYjNDM7ICAgICAgICAmIzM5O3VkcF92Nl9zZW5kX3NrYiYjMzk7LAomIzQzOyAgICApLAomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KAomIzQzOyAgICAgICAgJiMzOTtpcHY0JiMzOTssCiYjNDM7ICAgICAgICBGYWxzZSwKJiM0MzsgICAgICAgIHNvY2tldC5BRl9JTkVULAomIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSwKJiM0MzsgICAgICAgICYjMzk7MTAuMC4wLjImIzM5OywKJiM0MzsgICAgICAgICYjMzk7dWRwX3NlbmRfc2tiJiMzOTssCiYjNDM7ICAgICksCiYjNDM7XSkKJiM0MztkZWYgdGVzdF91ZHAoCiYjNDM7ICAgIGlwdjY6IGJvb2wsCiYjNDM7ICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSwKJiM0MzsgICAgc29ja29wdHM6IHR1cGxlW2ludCwgaW50LCBpbnRdLAomIzQzOyAgICBkZXN0aXA6IHN0ciwKJiM0MzsgICAgZnVuYzogc3RyCiYjNDM7KSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24mIzM5O3Qgb3ZlcmZsb3cKJiM0MzsgICAgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGNvdWxkIGhhcHBlbiBvbiBvbGRlcgomIzQzOyAgICBrZXJuZWxzIGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuCiYjNDM7CiYjNDM7ICAgIElQdjQ6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUsIGJ1dCB0aGUgb3ZlcmZsb3cgY291bGQKJiM0MzsgICAgaGFwcGVuIGJlZm9yZSBpdCBoYXBwZW5zLiBUaGUgb25seSB3YXkgdG8gdGVzdCB0aGlzIGlzIHRvIGNoZWNrIGRtZXNnIG9uCiYjNDM7ICAgIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzIHRoYXQgaGF2ZSB1ZHBfc2V0X2xlbl9zaG9ydCB3aXRoIHRoZSB3YXJuaW5nLgomIzQzOwomIzQzOyAgICBJUHY2OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFIG9uIGZpeGVkIGtlcm5lbHMsIGFuZCB3aWxsIGJlCiYjNDM7ICAgIHNlbnQgY29ycnVwdGVkIG9uIG9sZGVyIGtlcm5lbHMuIFRlc3QgYm90aDogc2VuZHRvIG11c3QgcmV0dXJuIEVNU0dTSVpFLCBhbmQKJiM0MzsgICAgZG1lc2cgbXVzdCBiZSBjbGVhbiBvZiB3YXJuaW5ncyBvbiBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIGlmIG5vdCBpcHY2OgomIzQzOyAgICAgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggKAomIzQzOyAgICAgICAgTmV0TlMoKSBhcyBucywKJiM0MzsgICAgICAgIGR1bW15X25ldGRldihucywgNjU1NTYgJiM0MzsgMjAgKiBpcHY2LCBpcHY2KSwKJiM0MzsgICAgICAgIE5ldE5TRW50ZXIobnMpLAomIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLAomIzQzOyAgICApOgomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdCgqc29ja29wdHMpCiYjNDM7ICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6CiYjNDM7ICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoZGVzdGlwLCAxMjM0KSkKJiM0MzsgICAgICAgICMgSVB2NjogRU1TR1NJWkUgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC4KJiM0MzsgICAgICAgICMgSVB2NDogRU1TR1NJWkUgaGFwcGVucyBvbiBib3RoIGZpeGVkIGFuZCB1bmZpeGVkIGtlcm5lbHMsIGFmdGVyIHRoZQomIzQzOyAgICAgICAgIyAgICAgICBXQVJOIGlzIHByaW50ZWQgLSBpZ25vcmUgaXQgYW5kIHJlbHkgb24gdGhlIGRtZXNnIGNoZWNrLgomIzQzOyAgICAgICAgaWYgZS5leGNlcHRpb24gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShlLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU1TR1NJWkUpCiYjNDM7CiYjNDM7ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbihmdW5jKSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBUZXN0IHRoYXQgc2VuZGluZyBVRFAganVtYm9ncmFtcyBvdmVyIGEgcmF3IElQdjYgc29ja2V0IHdvcmtzLCBkZXNwaXRlCiYjNDM7ICAgIGhhdmluZyB0aGUgZml4IGZvciBvdmVyc2l6ZWQgVURQIHBhY2tldHMuIHNlbmR0byBtdXN0IG5vdCByYWlzZSBhbiBPU0Vycm9yCiYjNDM7ICAgIGV4Y2VwdGlvbiAod2hlbiByYWlzZWQsIHRoZSB0ZXN0IGZhaWxzIGF1dG9tYXRpY2FsbHkpLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgd2l0aCAoCiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLAomIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU4NCwgVHJ1ZSksCiYjNDM7ICAgICAgICBOZXROU0VudGVyKG5zKSwKJiM0MzsgICAgICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5JUFBST1RPX1VEUCkgYXMgZmQsCiYjNDM7ICAgICk6CiYjNDM7ICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNikKJiM0MzsgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygmIzM5OyFISEhIJiMzOTssIDEyMzQsIDEyMzQsIDAsIDApICYjNDM7IGImIzM5OyAmIzM5OyAqIDY1NTI4CiYjNDM7ICAgICAgICBmZC5zZW5kdG8odWRwLCAoJiMzOTtmZDAwOjoyJiMzOTssIDApKQomIzQzOwomIzQzOwomIzQzO2lmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKJiM0MzsgICAga3NmdF9ydW4oWwomIzQzOyAgICAgICAgdGVzdF91ZHAsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjZfanVtYm8sCiYjNDM7ICAgIF0pCiYjNDM7ICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgYXJlYXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCBsb29rcyBsaWtlIGl0IGZvY3VzZXMgb24gTVRVIChNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0KSBjYWxjdWxhdGlvbnMgYW5kIHBvdGVudGlhbGx5IFVEUCBmcmFnbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIElQdjQgYW5kIElQdjYgbmV0d29yayBzdGFja3MuIEkgc2VlIGNoYW5nZXMgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLCB3aGljaCBhcmUgYWxsIGNvZGUgcGF0aHMgdGhhdCBtaWdodCBpbnZvbHZlIGNydWNpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgY29uc2lkZXJhdGlvbnMuIFRoZSBpbmNsdXNpb24gb2YgYGNvcmtfZnJhZ3NpemUucHlgIGluIHRoZSBzZWxmdGVzdHMgcmFpc2VzIGEgcmVkIGZsYWcgaW4gYSBnb29kIHdheSAtLSB0aGV5JiMzOTtyZSB0ZXN0aW5nLCBidXQgYXJlIHRoZXkgdGVzdGluZyB0aGUgcmlnaHQgdGhpbmc/CgpCZWZvcmUgSSBqdW1wIHRvIGEgZnV6emluZyBkZWNpc2lvbiwgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgYmVpbmcgYWRkZWQuIEFyZSB0aGV5IGJ1ZyBmaXhlcz8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucz8gU2VjdXJpdHkgaGFyZGVuaW5nPyBJdCBjb3VsZCBiZSBhbGwgb2YgdGhvc2UgdGhpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgcmVhZC1maWxlIGFuZCBncmVwcGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBpbmZsdWVuY2UgZnJhZ21lbnRhdGlvbiBiZWhhdmlvciwgY291bGQgKmFic29sdXRlbHkqIGJlIHdvcnRoIGZ1enppbmcsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgY2xhbXBpbmcgZG93biBvbiB1bmV4cGVjdGVkIHNpemVzLCBvciBlbmFibGluZyBzb21lIG5ldyBuZXR3b3JrIHBhdGggb3IgZmVhdHVyZSB0aGF0IGNvdWxkIHJldmVhbCBuZXcgZnV6emluZyB2ZWN0b3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldHVwX2NvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjkzLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI5NDpzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cdFx0XHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTM2MD1pbnQgaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM3My1cdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzc0Olx0XHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBcdTAwMjZpbmV0LVx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM3NS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Mi1cdGNvcmstXHUwMDNlb3B0ID0gTlVMTDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE1NzM6XHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGMsIHJ0cCk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIElQIE91dHB1dCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgSVAgb3V0cHV0IHBhdGhzLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZS1leGFtaW5lIGhvdyBwYWNrZXRzIGdldCBidWlsdCBhbmQgc2VudCBhdCB0aGUgSVAgbGF5ZXIuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHJvdXRpbmVzLCBzbyBJJiMzOTttIHB1bGxpbmcgdXAgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBoZWFkZXIgY29uc3RydWN0aW9uLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIChlLmcuLCB0aGUgZGV2aWNlIGRyaXZlcnMpLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IuCgpUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIElQdjYgcm91dGluZywgSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSByb3V0aW5nIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG91dHB1dCBwYXRoLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByb3V0ZSBsb29rdXAgcHJvY2Vzcywgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLCBhbmQgYW55IGNhY2hlIG1lY2hhbmlzbXMgaW52b2x2ZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgY29tcGxleGl0eSBvZiBJUHY2IHJvdXRpbmcsIHBhcnRpY3VsYXJseSB3aXRoIG11bHRpcGxlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXggcm91dGluZyBwb2xpY2llcy4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIGFuZCB1cGRhdGUgbXkgbWVudGFsIG1vZGVsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzay1cdTAwM2Vza190c2tleSk7XG4xMjkxOlx0XHRyZXR1cm4gZXJyO1xuMTI5MjpcdH1cbjEyOTM6XHRcbjEyOTQ6XHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuMTI5NTpcdFx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcbjEyOTg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuMTI5OTpcdFxuMTMwMDpcdFx0cnQgPSAqcnRwO1xuMTMwMTpcdFx0aWYgKHVubGlrZWx5KCFydCkpXG4xMzAyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMwMzpcdFxuMTMwNDpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4xMzA1Olx0XHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuMTMwNjpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbjEzMDc6XHRcbjEzMDg6XHRcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4xMzA5Olx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4xMzEwOlx0XG4xMzExOlx0XHQvKlxuMTMxMjpcdFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXG4xMzEzOlx0XHQgKi9cbjEzMTQ6XHRcdG9wdCA9IGlwYy1cdTAwM2VvcHQ7XG4xMzE1Olx0XHRpZiAob3B0KSB7XG4xMzE2Olx0XHRcdGlmICghY29yay1cdTAwM2VvcHQpIHtcbjEzMTc6XHRcdFx0XHRjb3JrLVx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MCxcbjEzMTg6XHRcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTMxOTpcdFx0XHRcdGlmICh1bmxpa2VseSghY29yay1cdTAwM2VvcHQpKVxuMTMyMDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTMyMTpcdFx0XHR9XG4xMzIyOlx0XHRcdG1lbWNweShjb3JrLVx1MDAzZW9wdCwgXHUwMDI2b3B0LVx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyBvcHQtXHUwMDNlb3B0Lm9wdGxlbik7XG4xMzIzOlx0XHRcdGNvcmstXHUwMDNlZmxhZ3MgfD0gSVBDT1JLX09QVDtcbjEzMjQ6XHRcdFx0Y29yay1cdTAwM2VhZGRyID0gaXBjLVx1MDAzZWFkZHI7XG4xMzI1Olx0XHR9XG4xMzI2Olx0XG4xMzI3Olx0XHRjb3JrLVx1MDAzZWdzb19zaXplID0gaXBjLVx1MDAzZWdzb19zaXplO1xuMTMyODpcdFxuMTMyOTpcdFx0Y29yay1cdTAwM2Vkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBJUHY2IG91dHB1dCBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBoYW5kbGVkLiBJdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHBhY2tldHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIHNwZWNpZmljIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFzIHRvIGRvIHdpdGggYW4gaW50ZXJhY3Rpb24sIG9yIHNvbWUgcXVpcmsgaW4gdGhlIG91dHB1dCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDE1Olx0XHRcdG5vcHQtXHUwMDNlc3JjcnQgPSBpcDZfcnRoZHJfZHVwKG9wdC1cdTAwM2VzcmNydCwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xNDE2Olx0XHRcdGlmIChvcHQtXHUwMDNlc3JjcnQgXHUwMDI2XHUwMDI2ICFub3B0LVx1MDAzZXNyY3J0KVxuMTQxNzpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbjE0MTg6XHRcbjE0MTk6XHRcdFx0LyogbmVlZCBzb3VyY2UgYWRkcmVzcyBhYm92ZSBtaXlhemF3YSovXG4xNDIwOlx0XHR9XG4xNDIxOlx0XHR2Nl9jb3JrLVx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXHUwMDNlaGxpbWl0O1xuMTQyMjpcdFx0djZfY29yay1cdTAwM2V0Y2xhc3MgPSBpcGM2LVx1MDAzZXRjbGFzcztcbjE0MjM6XHRcdHY2X2NvcmstXHUwMDNlZG9udGZyYWcgPSBpcGM2LVx1MDAzZWRvbnRmcmFnO1xuMTQyNDpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5mbGFncyBcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxuMTQyNTpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI2Olx0XHRcdCAgICAgIFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuMTQyNzpcdFx0ZWxzZVxuMTQyODpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI5Olx0XHRcdFx0UkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXHUwMDI2cnQtXHUwMDNlZHN0KSk7XG4xNDMwOlx0XG4xNDMxOlx0XHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplKTtcbjE0MzI6XHRcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuMTQzMzpcdFx0XHRtdHUgPSBmcmFnX3NpemU7XG4xNDM0Olx0XG4xNDM1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbjE0MzY6XHRcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuMTQzNzpcdFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuMTQzODpcdFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbjE0Mzk6XHRcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG4xNDQwOlx0XHRjb3JrLVx1MDAzZWJhc2UubWFyayA9IGlwYzYtXHUwMDNlc29ja2MubWFyaztcbjE0NDE6XHRcdGNvcmstXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXHUwMDNlc29ja2MucHJpb3JpdHk7XG4xNDQyOlx0XHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXHUwMDI2aXBjNi1cdTAwM2Vzb2NrYywgXHUwMDI2Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzKTtcbjE0NDM6XHRcdGlmIChpcGM2LVx1MDAzZXNvY2tjLnRzZmxhZ3MgXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xuMTQ0NDpcdFx0XHRjb3JrLVx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcbjE0NDU6XHRcdFx0Y29yay1cdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXHUwMDNlc29ja2MudHNfb3B0X2lkO1xuMTQ0NjpcdFx0fVxuMTQ0NzpcdFx0Y29yay1cdTAwM2ViYXNlLmxlbmd0aCA9IDA7XG4xNDQ4Olx0XHRjb3JrLVx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcbjE0NDk6XHRcbjE0NTA6XHRcdHJldHVybiAwO1xuMTQ1MTpcdH1cbjE0NTI6XHRcbjE0NTM6XHRzdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbjE0NTQ6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxuMTQ1NTpcdFx0XHRcdCAgICAgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrX2Z1bGwsXG4xNDU2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbjE0NTc6XHRcdFx0XHQgICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LFxuMTQ1ODpcdFx0XHRcdFx0XHQgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksXG4xNDU5Olx0XHRcdFx0ICAgICB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLCBpbnQgdHJhbnNoZHJsZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgUm91dGluZyBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IgbGllcyB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbi4gVGhlIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAgZmlsZSBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3QgYHJ0Nl9pbmZvYCwgaXRzIGZpZWxkcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVnYXJkaW5nIHRoZSBzcGVjaWZpYyByb3V0ZSBzZWxlY3Rpb24gcHJvY2VzcywgdGhlIGhhbmRsaW5nIG9mIGRpZmZlcmVudCByb3V0ZSB0eXBlcyAoZS5nLiwgY29ubmVjdGVkLCBzdGF0aWMsIGR5bmFtaWMpLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpYWwgY2FzZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJvdXRpbmcgZW5naW5lIG1ha2VzIGl0cyBkZWNpc2lvbnMgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IGZsYWdzIG9yIHNwZWNpZmljIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHJvdXRlcywgc2luY2UgdGhlc2Ugb2Z0ZW4gZHJpdmUgdGhlIG1vcmUgbnVhbmNlZCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdH1cbiAzNjY6XHRcbiAzNjc6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiAzNjg6XHRcdFx0XHRcdFx0XHQgICAgIGJvb2wgZm9yd2FyZGluZylcbiAzNjk6XHR7XG4gMzcwOlx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDM3MTpcdFx0dW5zaWduZWQgaW50IG10dTtcbiAzNzI6XHRcbiAzNzM6XHRcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xuIDM3NDpcdFx0XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiAzNzU6XHRcdFx0aWYgKG10dSlcbiAzNzY6XHRcdFx0XHRnb3RvIG91dDtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiAzODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODE6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuIDM4MjpcdFx0aWYgKGlkZXYpXG4gMzgzOlx0XHRcdG10dSA9IFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KTtcbiAzODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM4NTpcdFxuIDM4NjpcdG91dDpcbiAzODc6XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIDM5MDpcdH1cbiAzOTE6XHRcbiAzOTI6XHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4gMzkzOlx0ICpcbiAzOTQ6XHQgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiAzOTU6XHQgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbiAzOTY6XHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuIDM5NzpcdCAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiAzOTg6XHQgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbiAzOTk6XHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBWYWx1ZXMgaW4gSVAgYW5kIElQdjYqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBUaG9zZSBjb25zdGFudCBkZWZpbml0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBoYW5kbGluZyBmcmFnbWVudGF0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHdpdGggdGhlbS4gSSBjb3VsZCBsb29rIHRoZW0gdXAgaW4gdGhlIGRvY3VtZW50YXRpb24sIGJ1dCBJJiMzOTtsbCB0cnkgYSBxdWljayBncmVwIHRocm91Z2ggcmVsZXZhbnQgc291cmNlIGNvZGUgZmlyc3QuIEl0JiMzOTtzIG9mdGVuIGZhc3RlciB0byBzZWUgdGhlIHVzYWdlIGNvbnRleHQgYWxvbmdzaWRlIHRoZSBkZWZpbml0aW9uLiBBIHF1aWNrIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljay4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlx0MTAwXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXHRcdDY1NTM1XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVx0NDAwMFxuLS1cbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTIzLVx0c3NpLVx1MDAzZW5ldGRldi1cdTAwM2VtaW5fbXR1ID0gUEhPTkVUX01JTl9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XHRzc2ktXHUwMDNlbmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU4OC1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjU4OTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU5MC1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA4MzItXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcdFx0XHQgICAgdWxfcmlmLVx1MDAzZXJpZl9pbmRleCwgdWxfcmlmLVx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVx0bWx4c3dfcmVnX3JpdHJfbG9vcGJhY2tfcHJvdG9jb2xfc2V0KHJpdHJfcGwsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVx0ICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODYxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jPTE1OD1zdGF0aWMgdm9pZCBvdnBuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTY0MzAtXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcdHVuc2lnbmVkIGludCBwYWNrZXRfbGVuID0gdmktXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXHUwMDNlZGV2LVx1MDAzZW1heF9tdHU7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgcGFja2V0X2xlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaXAuaC01Mi0vKiBJUHY0IGRhdGFncmFtIGxlbmd0aCBpcyBzdG9yZWQgaW50byAxNmJpdCBmaWVsZCAodG90X2xlbikgKi9cbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcdDB4RkZGRlVcbmluY2x1ZGUvbGludXgvaXAuaC01NC1cbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xuaW5jbHVkZS9saW51eC9pcC5oOjU3Olx0aXBoLVx1MDAzZXRvdF9sZW4gPSBsZW4gXHUwMDNjPSBJUF9NQVhfTVRVID8gaHRvbnMobGVuKSA6IDA7XG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxuLS1cbmluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxuaW5jbHVkZS9uZXQvaXAuaDo1MDA6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUyOC1cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01NDUtXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVx1MDAzZW10dSksIElQX01BWF9NVFUpO1xuaW5jbHVkZS9uZXQvaXAuaC01NDctXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcdDY4XHRcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVx0MHhGRkZGVVx0XHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtNDItXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMxOS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzIwOlx0aWYgKGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zMjEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zNDktXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjQvZXNwNC5jOjM1MDpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2NC9lc3A0LmMtMzUxLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy00MDgtXG5uZXQvaXB2NC9pZ21wLmM6NDA5Olx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaWdtcC5jLTQxMC1cdHdoaWxlICgxKSB7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVx0ZXh0aGRybGVuID0gIXNrYiA/IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cdTAwM2VmcmFnc2l6ZTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4NS1cdHBhZ2VkID0gISFjb3JrLVx1MDAzZWdzb19zaXplO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFx1MDAyNiB+NykgJiM0MzsgZnJhZ2hlYWRlcmxlbjtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk5MTpcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDUtXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA3LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3Olx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE4LVx0fVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTMyOT1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgaXBfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cdGludCB0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVx0aWYgKHRiW0lGTEFfTVRVXSkge1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIxNDpcdFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjE1LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVx0aWYgKGxpa2VseSghbXR1KSlcbm5ldC9pcHY0L3JvdXRlLmM6MTQ2NTpcdFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM3MT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYzozODE6XHRpZiAobGVuIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlx0XHRpZiAobmV3X210dSBcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVx0ZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXHRkZXYtXHUwMDNlbWluX210dVx0XHQ9IEVUSF9NSU5fTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjc0NjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVBfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXHRkZXYtXHUwMDNlZmxhZ3MgXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cdGlmICgheHRmcy1cdTAwM2VjZmcuZG9udF9mcmFnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XHRcdHJldHVybiB4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVx0XHR4LVx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xubmV0L3hmcm0veGZybV91c2VyLmM6OTU3Olx0XHRpZiAoeC1cdTAwM2V0ZmNwYWQgXHUwMDNlIElQX01BWF9NVFUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0V4Y2Vzc2l2ZSBURkMgcGFkZGluZ1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDgxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBNVFUgY2xhbXBpbmcgYW5kIFVEUCBwYWNrZXQgc2l6ZXMgaW4gSVB2NCBhbmQgSVB2Ni4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2X3JvdXRlLmhgIChmb3IgTVRVKSwgYGlwX291dHB1dC5jYCAoSVB2NCBjb3JrIHNldHVwKSwgYW5kIGBpcDZfb3V0cHV0LmNgIChJUHY2IGNvcmsgc2V0dXApLgoKTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyAqd2h5KiB0aGlzIGNoYW5nZT8gVGhlIGNvbW1pdCBtZXNzYWdlIHBvaW50cyB0byBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3csIGVzcGVjaWFsbHkgaW4gb2xkZXIga2VybmVscywgd2l0aGluIGB1ZHBfc2VuZF9za2JgIGFuZCBgdWRwX3Y2X3NlbmRfc2tiYC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGNvbmZpcm1zIHRoZSBpbnRlbnQgaXMgdG8gbGltaXQgdGhlIHBhY2tldCBzaXplIHRvIHByZXZlbnQgdGhhdCBvdmVyZmxvdy4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY3JpdGljYWwgcGF0aHMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzICpXb3J0aEZ1enppbmcqPyBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGRvY3VtZW50YXRpb24sIGNvc21ldGljIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIExldCYjMzk7cyBsb29rOgoKKiAgIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLgoqICAgSXQmIzM5O3Mgbm90IHB1cmVseSBsb2dnaW5nIG9yIGRlY29yYXRpdmUuCiogICBJdCBtb2RpZmllcyAqbnVtZXJpYyBjb25zdGFudHMqIGluIGEgd2F5IHRoYXQgKmZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cqIGJ5IGNsYW1waW5nIE1UVXMgYW5kIHNpemVzIHRvIHByZXZlbnQgb3ZlcmZsb3cuCiogICBJdCYjMzk7cyBkZWZpbml0ZWx5ICpub3QqIGNvZGUgc3BlY2lmaWMgdG8gaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgY29tbW9ubHkgYXZhaWxhYmxlLCBhbmQgaXQgaXMgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZy4KKiAgIEl0IGlzIG1vZGlmeWluZyByZWFjaGFibGUsIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgbG9naWM7IFNwZWNpZmljYWxseSwgdGhlIFVEUCBvdXRwdXQgcGF0aHMgaW4gSVB2NCBhbmQgSVB2NiBhbmQgTVRVIGNhbGN1bGF0aW9ucy4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhIGhlcmU6IFRoaXMgaXMgYSBzb2xpZCAmIzM0O1llcyYjMzQ7LgoKTmV4dCwgaG93IGRvIHdlIHRhcmdldCBmdXp6aW5nIGVmZm9ydHMgbW9zdCBlZmZlY3RpdmVseT8gSXQmIzM5O3MgdGltZSB0byByZWZpbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBBUEkgZW50cnlwb2ludHMuIEkgbmVlZCB0byBmaW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgcmVxdWlyZXMgbWUgdG8gZG8gc29tZSBjb2RlIGFyY2hhZW9sb2d5IGFuZCBmaW5kIHRoZSBBUEkgZW50cnkgcG9pbnRzIHRoYXQgYXJlIHJlbGV2YW50LiBTbywgSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBhbmQgaWRlbnRpZnkgdGhvc2UgY2FsbGVycy4gVGhhdCB3aWxsIGd1aWRlIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldHVwX2NvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyOTQ6c3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTUtXHRcdFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTEzNjA9aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTM3NDpcdFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UsIGlwYywgcnRwKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXHRcdGlmIChlcnIpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTU1ND1zdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXHRjb3JrLVx1MDAzZW9wdCA9IE5VTEw7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgY29yaywgaXBjLCBydHApO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3NC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIElQNiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYGlwNl9zZXR1cF9jb3JrYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMsIG9wdGltaXphdGlvbnMsIG9yIGV2ZW4gZGVidWdnaW5nIGVmZm9ydHMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcHJvYmUgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgZnVydGhlciwgbGlrZWx5IGR1ZSB0byBhIHNwZWNpZmljIG5lZWQgdGhhdCB0aGUgbmFtZSBpbXBsaWVzIHN1Y2ggYXMgSVB2NiBzZXR1cCB0YXNrcy4gU28sIEkmIzM5O2xsIGFkZCB0aGF0IGZ1bmN0aW9uIHRvIG15IHNlYXJjaCBjcml0ZXJpYSBhbmQgZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9zZXR1cF9jb3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vdXRwdXQuYz0xMzUwPXN0YXRpYyB2b2lkIGlwNl9hcHBlbmRfZGF0YV9tdHUodW5zaWduZWQgaW50ICptdHUsXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzMtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTM3NDpzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXHRcdFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xODYwPWludCBpcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc3LVx0XHRkc3RfaG9sZChcdTAwMjZydC1cdTAwM2Vkc3QpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XHRcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBcdTAwMjZpbmV0LVx1MDAzZWNvcmssXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3OS1cdFx0XHRcdCAgICAgaXBjNiwgcnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yMDY2PXN0cnVjdCBza19idWZmICppcDZfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yMDg3LVx0Y29yay1cdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjIwODg6XHRlcnIgPSBpcDZfc2V0dXBfY29yayhzaywgY29yaywgaXBjNiwgcnQpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBJUHY2IE1UVSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgSVB2NCBhbmQgSVB2NiBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmcmFnbWVudGF0aW9uIGFuZCBNVFUgZGlzY292ZXJ5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyByZWxhdGVkIHRvICYjMzQ7Y29ya2luZywmIzM0OyB0aGF0IG9wdGltaXphdGlvbiB3aGVyZSB5b3UgZGVsYXkgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQgdW50aWwgeW91IGhhdmUgZW5vdWdoIGRhdGEgdG8gZmlsbCBhIGJ1ZmZlci4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgaXBfc2V0dXBfY29ya2AgZ2V0cyBpbnZva2VkIGJ5IGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcF9tYWtlX3NrYmAgaW4gdGhlIElQdjQgcGF0aCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIFNpbWlsYXJseSwgYGlwNl9zZXR1cF9jb3JrYCBpcyBjYWxsZWQgYnkgYGlwNl9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfbWFrZV9za2JgIGluIHRoZSBJUHY2IHBhdGguIFN0YW5kYXJkIHN0dWZmLCBzbyBmYXIuCgpOb3cgSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gSVB2Ni4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgcG90ZW50aWFsbHkgZm9yd2FyZGluZyBwYWNrZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTVRVIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbiB0byBidWlsZCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNTM9c3RhdGljIGlubGluZSBib29sIHJ0Nl9kdXBsaWNhdGVfbmV4dGhvcChzdHJ1Y3QgZmliNl9pbmZvICphLCBzdHJ1Y3QgZmliNl9pbmZvICpiKVxuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2Ni1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM2NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2OC1cdFx0XHRcdFx0XHQgICAgIGJvb2wgZm9yd2FyZGluZylcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTMtICpcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NDogKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5NS0gKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2Zcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTIxPWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjQtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjY1Olx0bXR1ID0gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIHRydWUpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2Ni1cdGlmIChtdHUgXHUwMDNjIElQVjZfTUlOX01UVSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyODg9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgdW5zaWduZWQgaW50IGlwNl9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjg5LXtcbm5ldC9pcHY2L3JvdXRlLmM6MzI5MDpcdHJldHVybiBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgZmFsc2UpO1xubmV0L2lwdjYvcm91dGUuYy0zMjkxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwOS1cdGNhc2UgTkZQUk9UT19JUFY2OlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMTA6XHRcdGZsb3dfdHVwbGUtXHUwMDNlbXR1ID0gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIHRydWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMTEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNQoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBNVFUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUHY2IE1UVSBpcyBtYW5hZ2VkIGFuZCBJJiMzOTt2ZSBub3RpY2VkIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBpbnRlcmFjdGluZyBoZXJlOiBgaXA2X210dWAgY2FsbHMgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCBmYWxzZSlgIGFuZCBgaXA2X2ZvcndhcmRgIGNhbGxzIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSlgLiBTZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHNoYXJpbmcgc29tZSBjb3JlIGxvZ2ljLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBkdXBsaWNhdGlvbi4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnIHBpY3R1cmUgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCkkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Yga2V5IHN5bWJvbHMgSSB3YW50IHRvIHVuZGVyc3RhbmQgaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBvZiBjb3Vyc2UgYGlwNl9tdHVgIGFuZCBgaXA2X2ZvcndhcmRgIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZTsgYXJlIHRoZXkgaW50ZXJuYWwsIG9yIGFyZSB0aGV5IGdsb2JhbGx5IHZpc2libGU/IElmIHRoZXkmIzM5O3JlIGdsb2JhbCwgdGhhdCByZWFsbHkgY2hhbmdlcyB0aGUgZ2FtZSBpbiB0ZXJtcyBvZiBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgpUbyB2ZXJpZnkgdGhlaXIgc2NvcGUsIEkgbmVlZCB0byBjaGVjayB3aGVyZSB0aGV5JiMzOTtyZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9pcHY0L2lwX291dHB1dC5jYCwgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBzdGF0aWMgb3Igbm90IGZyb20gdGhlIHNvdXJjZSBjb2RlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGV4dGVybmFsIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlwX2FwcGVuZF9kYXRhfEVYUE9SVF9TWU1CT0wuKmlwX21ha2Vfc2tifEVYUE9SVF9TWU1CT0wuKmlwNl9hcHBlbmRfZGF0YXxFWFBPUlRfU1lNQk9MLippcDZfbWFrZV9za2J8RVhQT1JUX1NZTUJPTC4qaXA2X210dSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTg2MD1pbnQgaXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5NC19XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTg5NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfYXBwZW5kX2RhdGEpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIElQdjQgT3V0cHV0KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBJUHY0IHBhY2tldHMgYXJlIGFzc2VtYmxlZCBhbmQgc2VudCBvdXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXBfbWFrZV9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBidWlsZGluZyBibG9ja3MuIGBpcF9hcHBlbmRfZGF0YWAgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgYXR0YWNoaW5nIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpLCBhbmQgZW5zdXJpbmcgdGhhdCB0aGlzIGlzIGRvbmUgc2FmZWx5LCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbi4gYGlwX21ha2Vfc2tiYCwgb24gdGhlIG90aGVyIGhhbmQsIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgU0tCIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBzdGFydHMgdGhlIElQdjQgaGVhZGVyIGFzc2VtYmx5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG91dHB1dCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBNVFUgY29uc2lkZXJhdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZyYWdtZW50YXRpb24gbG9naWMuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhYm92ZSBhbmQgYmVsb3cgdGhlbS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRcdGNvcmstXHUwMDNlb3B0ID0gTlVMTDtcbjEzOTE6XHRcdGRzdF9yZWxlYXNlKGNvcmstXHUwMDNlZHN0KTtcbjEzOTI6XHRcdGNvcmstXHUwMDNlZHN0ID0gTlVMTDtcbjEzOTM6XHR9XG4xMzk0Olx0XG4xMzk1Olx0LypcbjEzOTY6XHQgKlx0Q29tYmluZWQgYWxsIHBlbmRpbmcgSVAgZnJhZ21lbnRzIG9uIHRoZSBzb2NrZXQgYXMgb25lIElQIGRhdGFncmFtXG4xMzk3Olx0ICpcdGFuZCBwdXNoIHRoZW0gb3V0LlxuMTM5ODpcdCAqL1xuMTM5OTpcdHN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbjE0MDA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4xNDAxOlx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4xNDAyOlx0XHRcdFx0ICAgICAgc3RydWN0IGluZXRfY29yayAqY29yaylcbjE0MDM6XHR7XG4xNDA0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wX3NrYjtcbjE0MDU6XHRcdHN0cnVjdCBza19idWZmICoqdGFpbF9za2I7XG4xNDA2Olx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4xNDA3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4xNDA4Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDtcbjE0MDk6XHRcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZShjb3JrLVx1MDAzZWRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY0L0lQdjYgT3V0cHV0IFBhdGggRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAgKElQdjQpIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAgKElQdjYpLiBJIGtub3cgdGhlc2UgYXJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhleSYjMzk7cmUgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHBvdGVudGlhbGx5IHVzZWQgYmV5b25kIHRoZSBkaXJlY3Qgc2NvcGUgb2YgdGhvc2UgZmlsZXMuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIHRoZSBjYWxsZXJzIG9mIHRob3NlIGZ1bmN0aW9ucyBmcm9tIFVEUCwgYW5kIFJBVy4gSSBrbm93IHRoYXQgYHVkcF9zZW5kbXNnYCBhbmQgYHVkcHY2X3NlbmRtc2dgIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBVRFAsIGFuZCB0aGV5IGluZGVlZCBjYWxsIHRoZSBJUHY0L0lQdjYgZnVuY3Rpb25zLiBUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgd2hpbGUgYHVkcF9zZW5kbXNnYCBhbmQgYHVkcHY2X3NlbmRtc2dgIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbCAmIzM0O2hvdCBwYXRocyYjMzQ7LCB0aGUgYGlwX2FwcGVuZF9kYXRhYCBhbmQgYGlwX21ha2Vfc2tiYCBhcmUgc3BlY2lmaWMgdG8gY29ya2luZy9vdXRwdXQgcGF0aC4gU28sIEkgaGF2ZSB0byBtZW50YWxseSBzZXBhcmF0ZSB0aG9zZSBwYXRocy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGFib3V0IGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYD8gQXJlIHRoZXkgc3RhdGljLCBhbmQgaW5kZWVkIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKC4uLilgIGFuZCBgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayguLi4pYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgc2V0dXAgZnVuY3Rpb25zLiBHb29kLgoKSSYjMzk7bSBhbHNvIG5vdGluZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIHdoaWNoIGlzIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSXRzIGNhbGxlcnMgYXJlIGBpcDZfbXR1YCAoaW4gYG5ldC9pcHY2L3JvdXRlLmNgKSwgYGlwNl9mb3J3YXJkYCAoaW4gYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2ApLCBldGMuIFRoaXMgaXMgdXNlZnVsIGZvciBNVFUtcmVsYXRlZCBhZGp1c3RtZW50cywgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW5saW5lIGltcGxpZXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgZm9yd2FyZGluZyBwYXRoLCB0b28uCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBJUHY0IGFuZCBJUHY2IGZlYXR1cmVzLiBBbmQgYWxzbyB3aGVyZSBgbmV0L2lwdjQvaXBfb3V0cHV0LmNgIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCBhcmUgYnVpbHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkIGFuZCB3aGljaCBtb2R1bGVzIGRlcGVuZCBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfb3V0cHV0Lm98aXA2X291dHB1dC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTktXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxubmV0L2lwdjYvTWFrZWZpbGU6ODppcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvcmUgSVB2NCBhbmQgSVB2Ni1yZWxhdGVkIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHByb3RvY29sIHN0YWNrcyBhcmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIEV4YW1pbmluZyB0aGVzZSBmaWxlcyB3aWxsIGxpa2VseSBwcm92aWRlIG1lIHdpdGggaW5zaWdodHMgaW50byB0aGUgdmFyaW91cyBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gSVAgbmV0d29ya2luZy4gS25vd2luZyB0aGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVHxjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cbm5ldC9pcHY0L0tjb25maWc6MzM5OmNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzUzLVxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5My1cbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MDMtXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXG5uZXQvaXB2NC9LY29uZmlnLTQwNS1cdGludCBcJiMzNDtJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTMtXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDE4LVxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQyMC1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM0LVxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDM2LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzOC1cbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NDYtXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDgtXHR0cmlzdGF0ZSBcJiMzNDtSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDU0LVxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cdGJvb2wgXCYjMzQ7SU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy00Ni1cbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDAtXG5uZXQvaXB2Ni9LY29uZmlnOjE0MTpjb25maWcgSU5FVDZfWEZSTV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTQyLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cbm5ldC9pcHY2L0tjb25maWc6MTQ2OmNvbmZpZyBJTkVUNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTQ3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDM4CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIC0gSVAgU3RhY2sgQ29yZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGdvbmUgdGhyb3VnaCB0aGUga2V5IHN0ZXBzIGZvciB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHRoZSBtYWluIGNvbmZpZyBvcHRpb25zIGRyaXZpbmcgdGhpcywgYW5kIEkgYnJpZWZseSBzY2FubmVkIGZvciBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYnV0IHRob3NlIGFyZSB0aGUgcHJpbWFyeSB0d28uCgpOZXh0LCBJIHJlLWNvbmZpcm1lZCB0aGUgYEZvY3VzU3ltYm9sc2AsIHdoaWNoIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmc6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAsIGBpcDZfYXBwZW5kX2RhdGFgLCBgaXA2X21ha2Vfc2tiYCwgYGlwNl9tdHVgLCBhbmQgYGlwNl9mb3J3YXJkYC4KCkkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIHRoZXNlIGBGb2N1c1N5bWJvbHNgIGhhZCBhbnkgcmVsYXRlZCBzeW1ib2xzLiBJIGNoZWNrZWQgaG93IGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBhcmUgY2FsbGVkLCB3aGljaCB3ZXJlIGluZGVlZCBjYWxsZWQgYnkgdGhvc2UgYEZvY3VzU3ltYm9sc2AsIGFzIGV4cGVjdGVkLiBJIGRpZCBhIHRob3JvdWdoIGdyZXAgYW5kIGNyb3NzLXJlZmVyZW5jZSwgc28gSSBjYW4gY29uZmlkZW50bHkgc2F5IEkmIzM5O3ZlIGNvdmVyZWQgYWxsIGNhbGwgc2l0ZXMuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3QsIGBFbmFibGVDb25maWdzYCBhcmUgYElORVRgIGFuZCBgSVBWNmAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbXR1JiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbXR1JiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg0LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdAogCXJjdV9yZWFkX3VubG9jaygpOwogCiBvdXQ6CiYjNDM7CW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7CiYjNDM7CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCiAJY29yay0mZ3Q7ZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgPwogCQkJIGRzdDRfbXR1KCZhbXA7cnQtJmd0O2RzdCkgOiBSRUFEX09OQ0UocnQtJmd0O2RzdC5kZXYtJmd0O210dSk7CiYjNDM7CWNvcmstJmd0O2ZyYWdzaXplID0gbWluKGNvcmstJmd0O2ZyYWdzaXplLCBJUF9NQVhfTVRVKTsKIAogCWlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay0mZ3Q7ZnJhZ3NpemUpKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAogCWlmIChmcmFnX3NpemUgJmFtcDsmYW1wOyBmcmFnX3NpemUgJmx0OyBtdHUpCiAJCW10dSA9IGZyYWdfc2l6ZTsKIAomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCW10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTsKIAljb3JrLSZndDtiYXNlLmZyYWdzaXplID0gbXR1OwogCWNvcmstJmd0O2Jhc2UuZ3NvX3NpemUgPSBpcGM2LSZndDtnc29fc2l6ZTsKIAljb3JrLSZndDtiYXNlLnR4X2ZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQppbmRleCA1MTdjMDlkNjBiZWY3Li4zZWUzMzc4ZjhiMjZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBURVNUX1BST0dTIDo9IFwKIAljbXNnX3NvX21hcmsuc2ggXAogCWNtc2dfc29fcHJpb3JpdHkuc2ggXAogCWNtc2dfdGltZS5zaCBcCiYjNDM7CWNvcmtfZnJhZ3NpemUucHkgXAogCWRvdWJsZV91ZHBfZW5jYXAuc2ggXAogCWRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcCiAJZWNtcF9yZWhhc2guc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi43YWZkNjQzZDA3ZWMyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKQEAgLTAsMCAmIzQzOzEsMTg3IEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsmIzM5OyYjMzk7JiMzOTtUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4mIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MztpbXBvcnQgZXJybm8KJiM0MztpbXBvcnQgZ3ppcAomIzQzO2ltcG9ydCBvcwomIzQzO2ltcG9ydCBzb2NrZXQKJiM0MztpbXBvcnQgc3RydWN0CiYjNDM7aW1wb3J0IHN1YnByb2Nlc3MKJiM0Mztmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiYjNDM7CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0ICgKJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCwKJiM0MzsgICAgS3NmdFNraXBFeCwKJiM0MzsgICAgTmV0TlMsCiYjNDM7ICAgIE5ldE5TRW50ZXIsCiYjNDM7ICAgIGRlZmVyLAomIzQzOyAgICBpcCwKJiM0MzsgICAga3NmdF9lcSwKJiM0MzsgICAga3NmdF9leGl0LAomIzQzOyAgICBrc2Z0X3ByLAomIzQzOyAgICBrc2Z0X3JhaXNlcywKJiM0MzsgICAga3NmdF9ydW4sCiYjNDM7ICAgIGtzZnRfdHJ1ZSwKJiM0MzsgICAga3NmdF92YXJpYW50cywKJiM0MzspCiYjNDM7CiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTAKJiM0MztJUF9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X01UVV9ESVNDT1ZFUiA9IDIzCiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDIKJiM0MztJUFY2X1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfVExWX0pVTUJPID0gMTk0CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uOiBzdHIpIC0mZ3Q7IGJvb2wgfCBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuCiYjNDM7ICAgIFJldHVybnMgTm9uZSBpZiB0aGUgY29uZmlnIGlzIG5vdCBmb3VuZDsgb3RoZXJ3aXNlIHJldHVybnMgVHJ1ZS9GYWxzZQomIzQzOyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gWwomIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksCiYjNDM7ICAgICAgICAoZiYjMzk7L2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9JiMzOTssIG9wZW4pLAomIzQzOyAgICBdOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAmIzM5O3J0JiMzOTspIGFzIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspCiYjNDM7ICAgIGlmIHJlcyBpcyBOb25lOgomIzQzOyAgICAgICAga3NmdF9wcigmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3QmIzM0OykKJiM0MzsgICAgZWxpZiBub3QgcmVzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC0mZ3Q7IGJvb2w6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBDaGVjayBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcHJvZHVjZWQgYSBXQVJOIGluIGRtZXNnLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFsmIzM5O2RtZXNnJiMzOTtdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzoKJiM0MzsgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MucnVuKFsmIzM5O2dyZXAmIzM5OywgJiMzOTstcSYjMzk7LCBmJiMzOTtXQVJOSU5HOi4qe2Z1bmN9JiMzOTtdLCBzdGRpbj1kbWVzZy5zdGRvdXQsIGNoZWNrPUZhbHNlKQomIzQzOyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwCiYjNDM7CiYjNDM7CiYjNDM7QGNvbnRleHRtYW5hZ2VyCiYjNDM7ZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ3JlYXRlIGEgZHVtbXkgbmV0ZGV2IGluc2lkZSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLCBhbmQgdHVuZSBpdCBmb3IgdGhlIHRlc3QuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICBpcCgmIzM5O2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7ICAgIHdpdGggZGVmZXIoaXAsICYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpOgomIzQzOyAgICAgICAgaXAoZiYjMzk7bGluayBzZXQgZHVtbXkgbXR1IHttdHV9JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIHNldCBkdW1teSB1cCYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgICAgIG5vZGFkID0gJiMzOTtub2RhZCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgICAgICBsb2NhbCA9ICYjMzk7ZmQwMDo6MS82NCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4xLzI0JiMzOTsKJiM0MzsgICAgICAgIHJlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTsKJiM0MzsgICAgICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7bG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgaXAoZiYjMzk7e2ZsYWd9IG5laWdoIGFkZCB7cmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQmIzM5OywgbnM9bnMpCiYjNDM7ICAgICAgICB5aWVsZAomIzQzOwomIzQzOwomIzQzO0Brc2Z0X3ZhcmlhbnRzKFsKJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCgKJiM0MzsgICAgICAgICYjMzk7aXB2NiYjMzk7LAomIzQzOyAgICAgICAgVHJ1ZSwKJiM0MzsgICAgICAgIHNvY2tldC5BRl9JTkVUNiwKJiM0MzsgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETyksCiYjNDM7ICAgICAgICAmIzM5O2ZkMDA6OjImIzM5OywKJiM0MzsgICAgICAgICYjMzk7dWRwX3Y2X3NlbmRfc2tiJiMzOTssCiYjNDM7ICAgICksCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoCiYjNDM7ICAgICAgICAmIzM5O2lwdjQmIzM5OywKJiM0MzsgICAgICAgIEZhbHNlLAomIzQzOyAgICAgICAgc29ja2V0LkFGX0lORVQsCiYjNDM7ICAgICAgICAoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpLAomIzQzOyAgICAgICAgJiMzOTsxMC4wLjAuMiYjMzk7LAomIzQzOyAgICAgICAgJiMzOTt1ZHBfc2VuZF9za2ImIzM5OywKJiM0MzsgICAgKSwKJiM0MztdKQomIzQzO2RlZiB0ZXN0X3VkcCgKJiM0MzsgICAgaXB2NjogYm9vbCwKJiM0MzsgICAgYWY6IHNvY2tldC5BZGRyZXNzRmFtaWx5LAomIzQzOyAgICBzb2Nrb3B0czogdHVwbGVbaW50LCBpbnQsIGludF0sCiYjNDM7ICAgIGRlc3RpcDogc3RyLAomIzQzOyAgICBmdW5jOiBzdHIKJiM0MzspIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBUZXN0IHRoYXQgc2VuZGluZyBhbiBvdmVyc2l6ZWQgVURQIHBhY2tldCBvdmVyIGEgVURQIHNvY2tldCBkb2VzbiYjMzk7dCBvdmVyZmxvdwomIzQzOyAgICB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggY291bGQgaGFwcGVuIG9uIG9sZGVyCiYjNDM7ICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4KJiM0MzsKJiM0MzsgICAgSVB2NDogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSwgYnV0IHRoZSBvdmVyZmxvdyBjb3VsZAomIzQzOyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb24KJiM0MzsgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuCiYjNDM7CiYjNDM7ICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmUKJiM0MzsgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZAomIzQzOyAgICBkbWVzZyBtdXN0IGJlIGNsZWFuIG9mIHdhcm5pbmdzIG9uIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgaWYgbm90IGlwdjY6CiYjNDM7ICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCAoCiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLAomIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiAmIzQzOyAyMCAqIGlwdjYsIGlwdjYpLAomIzQzOyAgICAgICAgTmV0TlNFbnRlcihucyksCiYjNDM7ICAgICAgICBzb2NrZXQuc29ja2V0KGFmLCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQsCiYjNDM7ICAgICk6CiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KCpzb2Nrb3B0cykKJiM0MzsgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgZToKJiM0MzsgICAgICAgICAgICBmZC5zZW5kdG8oYiYjMzk7ICYjMzk7ICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKQomIzQzOyAgICAgICAgIyBJUHY2OiBFTVNHU0laRSBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LgomIzQzOyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlCiYjNDM7ICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suCiYjNDM7ICAgICAgICBpZiBlLmV4Y2VwdGlvbiBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSkKJiM0MzsKJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGUKJiM0MzsgICAgaGF2aW5nIHRoZSBmaXggZm9yIG92ZXJzaXplZCBVRFAgcGFja2V0cy4gc2VuZHRvIG11c3Qgbm90IHJhaXNlIGFuIE9TRXJyb3IKJiM0MzsgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICB3aXRoICgKJiM0MzsgICAgICAgIE5ldE5TKCkgYXMgbnMsCiYjNDM7ICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTg0LCBUcnVlKSwKJiM0MzsgICAgICAgIE5ldE5TRW50ZXIobnMpLAomIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCwKJiM0MzsgICAgKToKJiM0MzsgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpCiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpCiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSkKJiM0MzsgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjgKJiM0MzsgICAgICAgIGZkLnNlbmR0byh1ZHAsICgmIzM5O2ZkMDA6OjImIzM5OywgMCkpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBrc2Z0X3J1bihbCiYjNDM7ICAgICAgICB0ZXN0X3VkcCwKJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibywKJiM0MzsgICAgXSkKJiM0MzsgICAga3NmdF9leGl0KCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFjdHVhbCBjaGFuZ2VzOiB3ZSYjMzk7dmUgZ290IGEgZmV3IGFkanVzdG1lbnRzIHJlbGF0ZWQgdG8gTVRVIGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIGBtaW5fdGAgb3IgYG1pbmAgY2FsbHMgY29uc3RyYWluaW5nIHZhbHVlcyAoTVRVIG9yIGBmcmFnc2l6ZWApIHRvIGVpdGhlciBgSVA2X01BWF9NVFVgIG9yIGBJUF9NQVhfTVRVYCBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgKElQdjYgcm91dGluZyksIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCBvdXRwdXQpLCBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiBvdXRwdXQpLCBhcyB3ZWxsIGFzIHNvbWUgdXBkYXRlcyB0byBzZWxmdGVzdHMuCgpOb3csIHdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGB1ZHBfc2VuZF9za2JgIGFuZCBgdWRwX3Y2X3NlbmRfc2tiYCwgYW5kIGVuc3VyaW5nIHRoYXQgc2VuZGluZyBvdmVyc2l6ZWQgVURQIHBhY2tldHMgZG9lc24mIzM5O3QgY29ycnVwdCB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggYXBwYXJlbnRseSBjb3VsZCBiZSBhbiBpc3N1ZSBvbiBvbGRlciBrZXJuZWxzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCByZWxhdGVkIHRvIGNvbnN0cmFpbmluZyBNVFUgYW5kIGZyYWdtZW50IHNpemVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0cyB3aGVyZSB0aGVzZSBsaW1pdHMgYXJlIGFwcGxpZWQuIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGBJUDZfTUFYX01UVWAgYW5kIGBJUF9NQVhfTVRVYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpbWl0cyBpbnRlcmFjdCB3aXRoIG90aGVyIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YWx1ZXMgYXJlIHVzZWQgYWZ0ZXIgdGhlc2UgYG1pbmAgY2FsbHMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGlzIG9uZTsgdGhlcmUgY291bGQgYmUgc3VidGxlIGlzc3Vlcy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgaW4gdGhvc2UgY29kZSBzbmlwcGV0cywgaXQgY291bGQgdmVyeSB3ZWxsIHdhcnJhbnQgYSBmdXp6aW5nIHNlc3Npb24uIFRoZSBmaXggaXRzZWxmIHNlZW1zIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIGEgVURQIGxlbmd0aCBvdmVyZmxvdyBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NQVhfTVRVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDQuYzozMjA6XHRpZiAobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjQvZXNwNC5jLTMyMS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTM0OS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzUwOlx0aWYgKGxlbiBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zNTEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTM5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTQwOC1cbm5ldC9pcHY0L2lnbXAuYzo0MDk6XHRzaXplID0gbWluKG10dSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pZ21wLmMtNDEwLVx0d2hpbGUgKDEpIHtcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODMtXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTg0Olx0bXR1ID0gY29yay1cdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVx1MDAzZWZyYWdzaXplO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTg1LVx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXHUwMDI2IH43KSAmIzQzOyBmcmFnaGVhZGVybGVuO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTkxOlx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5Mi1cbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNS1cdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzA2Olx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDctXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVx0XHRobGVuID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG5uZXQvaXB2NC9pcF90dW5uZWwuYzozMTc6XHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMTgtXHR9XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNTAtXHRkZXYtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzUxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUyLVx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYwLVx0aW50IHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcdGludCBtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjItXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE4Mj1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXHRpZiAodGJbSUZMQV9NVFVdKSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjE0Olx0XHR1bnNpZ25lZCBpbnQgbWF4ID0gSVBfTUFYX01UVSAtIChudC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTUtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNDQ1PXUzMiBpcF9tdHVfZnJvbV9maWJfcmVzdWx0KHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIF9fYmUzMiBkYWRkcilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXHRpZiAobGlrZWx5KCFtdHUpKVxubmV0L2lwdjQvcm91dGUuYzoxNDY1Olx0XHRtdHUgPSBtaW4oUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MzcxPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zODAtXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjYvZXNwNi5jOjM4MTpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2Ni9lc3A2LmMtMzgyLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzUzPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjktXHR9IGVsc2Uge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XHRcdGlmIChuZXdfbXR1IFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHRfaGxlbilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzcxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz05MTE9c3RhdGljIHZvaWQgdnRpNl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXHRkZXYtXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz03Mzk9c3RhdGljIHZvaWQgeGZybWlfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cdGRldi1cdTAwM2VtaW5fbXR1XHRcdD0gRVRIX01JTl9NVFU7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6NzQ2Olx0ZGV2LVx1MDAzZW1heF9tdHVcdFx0PSBJUF9NQVhfTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0Ny1cdGRldi1cdTAwM2VmbGFncyBcdFx0PSBJRkZfTk9BUlA7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVx0aWYgKCF4dGZzLVx1MDAzZWNmZy5kb250X2ZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcdFx0cmV0dXJuIHgtXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXHRcdHgtXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo5NTc6XHRcdGlmICh4LVx1MDAzZXRmY3BhZCBcdTAwM2UgSVBfTUFYX01UVSkge1xubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RXhjZXNzaXZlIFRGQyBwYWRkaW5nXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiByb3V0aW5nIGlzIGhhbmRsZWQuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzg0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcm91dGUgc3RydWN0dXJlcyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21lIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSByb3V0aW5nIHRhYmxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyByb3V0ZXMgYXJlIHJlcHJlc2VudGVkLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBsb29rIGF0IHRoZSBhY3R1YWwgb3V0cHV0IHBhdGgg4oCTIGhvdyB0aGUga2VybmVsICp1c2VzKiB0aG9zZSByb3V0ZXMuIE15IGd1dCBzYXlzIHRvIGNoZWNrIG91dCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDE0MzIuIFRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IElQdjYgcGFja2V0cyBhZnRlciB0aGUgcm91dGluZyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGtlcm5lbCBzZWxlY3RzIHRoZSBvdXRnb2luZyBpbnRlcmZhY2UsIHNldHMgdGhlIG5leHQgaG9wLCBhbmQgaGFuZGxlcyBhbnkgbmVjZXNzYXJ5IGZyYWdtZW50YXRpb24gb3IgaGVhZGVyIGFkanVzdG1lbnRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIOKAkyB0aGUgcm91dGUgaW5mb3JtYXRpb24gYW5kIHRoZSBvdXRwdXQgcHJvY2Vzc2luZyDigJMgYXJlIHRpZWQgdG9nZXRoZXIuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgcG9saWN5IHJvdXRpbmcgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFx0bmhhID0gYS1cdTAwM2VmaWI2X25oO1xuIDM2MTpcdFx0bmhiID0gYi1cdTAwM2VmaWI2X25oO1xuIDM2MjpcdFx0cmV0dXJuIG5oYS1cdTAwM2VmaWJfbmhfZGV2ID09IG5oYi1cdTAwM2VmaWJfbmhfZGV2IFx1MDAyNlx1MDAyNlxuIDM2MzpcdFx0ICAgICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZuaGEtXHUwMDNlZmliX25oX2d3NiwgXHUwMDI2bmhiLVx1MDAzZWZpYl9uaF9ndzYpIFx1MDAyNlx1MDAyNlxuIDM2NDpcdFx0ICAgICAgICFsd3R1bm5lbF9jbXBfZW5jYXAobmhhLVx1MDAzZWZpYl9uaF9sd3MsIG5oYi1cdTAwM2VmaWJfbmhfbHdzKTtcbiAzNjU6XHR9XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gMzY4Olx0XHRcdFx0XHRcdFx0ICAgICBib29sIGZvcndhcmRpbmcpXG4gMzY5Olx0e1xuIDM3MDpcdFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiAzNzE6XHRcdHVuc2lnbmVkIGludCBtdHU7XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcbiAzNzQ6XHRcdFx0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XG4gMzc1Olx0XHRcdGlmIChtdHUpXG4gMzc2Olx0XHRcdFx0Z290byBvdXQ7XG4gMzc3Olx0XHR9XG4gMzc4Olx0XG4gMzc5Olx0XHRtdHUgPSBJUFY2X01JTl9NVFU7XG4gMzgwOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzgxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbiAzODI6XHRcdGlmIChpZGV2KVxuIDM4MzpcdFx0XHRtdHUgPSBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1Nik7XG4gMzg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzODU6XHRcbiAzODY6XHRvdXQ6XG4gMzg3Olx0XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuIDM4ODpcdFxuIDM4OTpcdFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuIDM5MzpcdCAqXG4gMzk0Olx0ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gSVB2NiBPdXRwdXQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IElQdjYgb3V0cHV0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgZmlsZS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDE0MzIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgdGhlIG91dHB1dCBwYXRoLiBJdCYjMzk7cyBvZnRlbiBpbiB0aG9zZSBkZWVwIGNvZGUgc2VnbWVudHMgd2hlcmUgeW91IHVuY292ZXIgdGhlIHJlYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgZGF0YSBoYW5kbGluZyBwcm9jZWR1cmVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggcGFucyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0XG4xNDExOlx0XHRcdG5vcHQtXHUwMDNlaG9wb3B0ID0gaXA2X29wdF9kdXAob3B0LVx1MDAzZWhvcG9wdCwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xNDEyOlx0XHRcdGlmIChvcHQtXHUwMDNlaG9wb3B0IFx1MDAyNlx1MDAyNiAhbm9wdC1cdTAwM2Vob3BvcHQpXG4xNDEzOlx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTQxNDpcdFxuMTQxNTpcdFx0XHRub3B0LVx1MDAzZXNyY3J0ID0gaXA2X3J0aGRyX2R1cChvcHQtXHUwMDNlc3JjcnQsIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTQxNjpcdFx0XHRpZiAob3B0LVx1MDAzZXNyY3J0IFx1MDAyNlx1MDAyNiAhbm9wdC1cdTAwM2VzcmNydClcbjE0MTc6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xNDE4Olx0XG4xNDE5Olx0XHRcdC8qIG5lZWQgc291cmNlIGFkZHJlc3MgYWJvdmUgbWl5YXphd2EqL1xuMTQyMDpcdFx0fVxuMTQyMTpcdFx0djZfY29yay1cdTAwM2Vob3BfbGltaXQgPSBpcGM2LVx1MDAzZWhsaW1pdDtcbjE0MjI6XHRcdHY2X2NvcmstXHUwMDNldGNsYXNzID0gaXBjNi1cdTAwM2V0Y2xhc3M7XG4xNDIzOlx0XHR2Nl9jb3JrLVx1MDAzZWRvbnRmcmFnID0gaXBjNi1cdTAwM2Vkb250ZnJhZztcbjE0MjQ6XHRcdGlmIChydC1cdTAwM2Vkc3QuZmxhZ3MgXHUwMDI2IERTVF9YRlJNX1RVTk5FTClcbjE0MjU6XHRcdFx0bXR1ID0gUkVBRF9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjKSBcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xuMTQyNjpcdFx0XHQgICAgICBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpIDogZHN0Nl9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbjE0Mjc6XHRcdGVsc2VcbjE0Mjg6XHRcdFx0bXR1ID0gUkVBRF9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjKSBcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xuMTQyOTpcdFx0XHRcdFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dSh4ZnJtX2RzdF9wYXRoKFx1MDAyNnJ0LVx1MDAzZWRzdCkpO1xuMTQzMDpcdFxuMTQzMTpcdFx0ZnJhZ19zaXplID0gUkVBRF9PTkNFKG5wLVx1MDAzZWZyYWdfc2l6ZSk7XG4xNDMyOlx0XHRpZiAoZnJhZ19zaXplIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUgXHUwMDNjIG10dSlcbjE0MzM6XHRcdFx0bXR1ID0gZnJhZ19zaXplO1xuMTQzNDpcdFxuMTQzNTpcdFx0aWYgKHNrX2lzX3VkcChzaykpXG4xNDM2Olx0XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbjE0Mzc6XHRcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbjE0Mzg6XHRcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4xNDM5Olx0XHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuMTQ0MDpcdFx0Y29yay1cdTAwM2ViYXNlLm1hcmsgPSBpcGM2LVx1MDAzZXNvY2tjLm1hcms7XG4xNDQxOlx0XHRjb3JrLVx1MDAzZWJhc2UucHJpb3JpdHkgPSBpcGM2LVx1MDAzZXNvY2tjLnByaW9yaXR5O1xuMTQ0MjpcdFx0c29ja190eF90aW1lc3RhbXAoc2ssIFx1MDAyNmlwYzYtXHUwMDNlc29ja2MsIFx1MDAyNmNvcmstXHUwMDNlYmFzZS50eF9mbGFncyk7XG4xNDQzOlx0XHRpZiAoaXBjNi1cdTAwM2Vzb2NrYy50c2ZsYWdzIFx1MDAyNiBTT0NLQ01fRkxBR19UU19PUFRfSUQpIHtcbjE0NDQ6XHRcdFx0Y29yay1cdTAwM2ViYXNlLmZsYWdzIHw9IElQQ09SS19UU19PUFRfSUQ7XG4xNDQ1Olx0XHRcdGNvcmstXHUwMDNlYmFzZS50c19vcHRfaWQgPSBpcGM2LVx1MDAzZXNvY2tjLnRzX29wdF9pZDtcbjE0NDY6XHRcdH1cbjE0NDc6XHRcdGNvcmstXHUwMDNlYmFzZS5sZW5ndGggPSAwO1xuMTQ0ODpcdFx0Y29yay1cdTAwM2ViYXNlLnRyYW5zbWl0X3RpbWUgPSBpcGM2LVx1MDAzZXNvY2tjLnRyYW5zbWl0X3RpbWU7XG4xNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIElQdjQgT3V0cHV0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgb3V0cHV0LCBhbmQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgYSBncmFudWxhciBsZXZlbC4mIzM0OyBUaGUgZmlyc3QgcGxhY2UgdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgYG5ldC9pcHY0L2lwX291dHB1dC5jYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlcmUmIzM5O3Mgc29tZSBjcnVjaWFsIGxvZ2ljIGFyb3VuZCBsaW5lIDEzMDMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydCB0byBpbnZlc3RpZ2F0ZSBtb3JlIGNsb3NlbHkuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW1taW5nLCByb3V0aW5nIGRlY2lzaW9ucywgb3IgcXVldWUgbWFuYWdlbWVudCwgYnV0IHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdXNwZWN0IHdlJiMzOTtkIGZpbmQgdGhlIGNvcmUgcHJvY2Vzc2luZyBvZiBvdXRib3VuZCBJUHY0IHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzay1cdTAwM2Vza190c2tleSk7XG4xMjkxOlx0XHRyZXR1cm4gZXJyO1xuMTI5MjpcdH1cbjEyOTM6XHRcbjEyOTQ6XHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuMTI5NTpcdFx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcbjEyOTg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuMTI5OTpcdFxuMTMwMDpcdFx0cnQgPSAqcnRwO1xuMTMwMTpcdFx0aWYgKHVubGlrZWx5KCFydCkpXG4xMzAyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMwMzpcdFxuMTMwNDpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4xMzA1Olx0XHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuMTMwNjpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbjEzMDc6XHRcbjEzMDg6XHRcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4xMzA5Olx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4xMzEwOlx0XG4xMzExOlx0XHQvKlxuMTMxMjpcdFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXG4xMzEzOlx0XHQgKi9cbjEzMTQ6XHRcdG9wdCA9IGlwYy1cdTAwM2VvcHQ7XG4xMzE1Olx0XHRpZiAob3B0KSB7XG4xMzE2Olx0XHRcdGlmICghY29yay1cdTAwM2VvcHQpIHtcbjEzMTc6XHRcdFx0XHRjb3JrLVx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MCxcbjEzMTg6XHRcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTMxOTpcdFx0XHRcdGlmICh1bmxpa2VseSghY29yay1cdTAwM2VvcHQpKVxuMTMyMDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTMyMTpcdFx0XHR9XG4xMzIyOlx0XHRcdG1lbWNweShjb3JrLVx1MDAzZW9wdCwgXHUwMDI2b3B0LVx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyBvcHQtXHUwMDNlb3B0Lm9wdGxlbik7XG4xMzIzOlx0XHRcdGNvcmstXHUwMDNlZmxhZ3MgfD0gSVBDT1JLX09QVDtcbjEzMjQ6XHRcdFx0Y29yay1cdTAwM2VhZGRyID0gaXBjLVx1MDAzZWFkZHI7XG4xMzI1Olx0XHR9XG4xMzI2Olx0XG4xMzI3Olx0XHRjb3JrLVx1MDAzZWdzb19zaXplID0gaXBjLVx1MDAzZWdzb19zaXplO1xuMTMyODpcdFxuMTMyOTpcdFx0Y29yay1cdTAwM2Vkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIFNhZmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gQW5hbHl6aW5nIHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBjbGFtcHMgdGhlIE1heGltdW0gVHJhbnNtaXNzaW9uIFVuaXQgKE1UVSkgYW5kIGZyYWdtZW50IHNpemUgdG8gdGhlIG1heGltdW0gZGVmaW5lZCB2YWx1ZXMgZm9yIElQdjQgYW5kIElQdjYgKGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCwgcmVzcGVjdGl2ZWx5KSBkdXJpbmcgY29yayBzZXR1cCBhbmQgcm91dGUgTVRVIGNhbGN1bGF0aW9ucy4gVGhlIGdvYWw/IFRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBVRFAgaGVhZGVyJiMzOTtzIGxlbmd0aCBmaWVsZCwgd2hlbiBhIGRldmljZSBNVFUgaXMgdW51c3VhbGx5IGxhcmdlICh0aGluayBhbnl0aGluZyBleGNlZWRpbmcgNjU1MzUsIGxpa2UgeW91IG1pZ2h0IHNlZSB3aXRoIGEgZHVtbXkgZGV2aWNlKS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIE5vcGUuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHVzZXItc3BhY2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgZXhwb3NlZCB2aWEgY29weV90b191c2VyLCBOZXRsaW5rIG1lc3NhZ2VzLCBvciBzb2NrZXQgb3B0aW9ucy4gV2UmIzM5O3JlIG5vdCBzZW5kaW5nIGFueXRoaW5nIG5ldyBvdXQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgY29kZSB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcy4gTVRVIGFuZCBgY29yay0mZ3Q7ZnJhZ3NpemVgIGFyZSBleHBsaWNpdGx5IHNldCwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIEFnYWluLCBuby4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uCjQuICAqKkJvdW5kcyBDaGVja3M6KiogSW4gZmFjdCwgaXQmIzM5O3MgdGhlIG9wcG9zaXRlISBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tzLiBXZSBhcmUgKmRlY3JlYXNpbmcqIG9yIGNhcHBpbmcgdGhlIE1UVSB2YWx1ZXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3ZlcnNpemVkIHBhY2tldHMsIG5vdCBpbmNyZWFzaW5nIHRoZW0uCgpTbywgYW0gSSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICYjMzQ7bm8mIzM0Oy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgZml4aW5nIGEgc3BlY2lmaWMgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiBVRFAgbGVuZ3RoIGNhbGN1bGF0aW9uIHdoZW4gdGhlIGRldmljZSBNVFUgZXhjZWVkcyA2NEtCLiBUaGlzIHBhdGNoIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXguCgpUaGVyZWZvcmUsIEtNU0FOIHNob3VsZG4mIzM5O3QgYmUgY29uY2VybmVkIGhlcmUuIFdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgdGhlIHR5cGljYWwgZGVidWdnaW5nIGFzc2VydGlvbnMgc2hvdWxkIGhhbmRsZSB0aGUgZXhwZWN0ZWQgaXNzdWVzLiBLTVNBTiYjMzk7cyBwdXJwb3NlLCBpbiB0aGlzIGNhc2UsIGlzIG5vdCBuZWNlc3NhcnkuIFdlIHNob3VsZCBiZSBnb29kIHRvIG1hcmsgYE5lZWRzS01TQU5gIGFzIGZhbHNlLCBhbmQgZ2V0IHJlYWR5IHRvIGRvY3VtZW50IHRoZSByZWFzb25pbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjbGFtcHMgdGhlIE1UVSBhbmQgY29yayBmcmFnbWVudGF0aW9uIHNpemUgdG8gSVBfTUFYX01UVSAoSVB2NCkgYW5kIElQNl9NQVhfTVRVIChJUHY2KSBpbiBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGFsb25nc2lkZSBhZGRpbmcgYSBzZWxmdGVzdC4gVGhpcyBwcmV2ZW50cyBpbnRlZ2VyIG92ZXJmbG93IG9mIHRoZSAxNi1iaXQgVURQIGhlYWRlciBsZW5ndGggZmllbGQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCB2ZXJ5IGxhcmdlIE1UVSB2YWx1ZXMgKFx1MDAzZSA2NTUzNSkuXG5cbktNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi9wYWRkaW5nLCBjaGFuZ2UgdXNlci1zcGFjZSBjb3B5IGxvZ2ljLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDbGFtcGluZyBNVFUgdmFsdWVzIGVuc3VyZXMgcGFja2V0IGxlbmd0aCBib3VuZHMgc3RheSB3aXRoaW4gcHJvdG9jb2wgbGltaXRzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDowNy41MjMzMTkyNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ3ODE2MDg1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9tdHVcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjbGFtcHMgdGhlIE1UVSBhbmQgY29yayBmcmFnbWVudGF0aW9uIHNpemUgdG8gSVBfTUFYX01UVSAoSVB2NCkgYW5kIElQNl9NQVhfTVRVIChJUHY2KSBpbiBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGFsb25nc2lkZSBhZGRpbmcgYSBzZWxmdGVzdC4gVGhpcyBwcmV2ZW50cyBpbnRlZ2VyIG92ZXJmbG93IG9mIHRoZSAxNi1iaXQgVURQIGhlYWRlciBsZW5ndGggZmllbGQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCB2ZXJ5IGxhcmdlIE1UVSB2YWx1ZXMgKFxcdTAwM2UgNjU1MzUpLlxcblxcbktNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi9wYWRkaW5nLCBjaGFuZ2UgdXNlci1zcGFjZSBjb3B5IGxvZ2ljLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDbGFtcGluZyBNVFUgdmFsdWVzIGVuc3VyZXMgcGFja2V0IGxlbmd0aCBib3VuZHMgc3RheSB3aXRoaW4gcHJvdG9jb2wgbGltaXRzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDcuNTIzMzI0ODczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE4NTQyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTQ6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBvdXQ6XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuK1xcbiBcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbiBcXG4gXFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbiBcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuIFxcbiBcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4gXFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuIFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4gXFxuK1xcdGlmIChza19pc191ZHAoc2spKVxcbitcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4gXFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGNtc2dfc29fbWFyay5zaCBcXFxcXFxuIFxcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcXFxcbiBcXHRjbXNnX3RpbWUuc2ggXFxcXFxcbitcXHRjb3JrX2ZyYWdzaXplLnB5IFxcXFxcXG4gXFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxcXFxuIFxcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxcXFxuIFxcdGVjbXBfcmVoYXNoLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbkBAIC0wLDAgKzEsMTg3IEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rJycnVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJycnXFxuK1xcbitpbXBvcnQgZXJybm9cXG4raW1wb3J0IGd6aXBcXG4raW1wb3J0IG9zXFxuK2ltcG9ydCBzb2NrZXRcXG4raW1wb3J0IHN0cnVjdFxcbitpbXBvcnQgc3VicHJvY2Vzc1xcbitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXFxuK1xcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxcbisgICAgS3NmdE5hbWVkVmFyaWFudCxcXG4rICAgIEtzZnRTa2lwRXgsXFxuKyAgICBOZXROUyxcXG4rICAgIE5ldE5TRW50ZXIsXFxuKyAgICBkZWZlcixcXG4rICAgIGlwLFxcbisgICAga3NmdF9lcSxcXG4rICAgIGtzZnRfZXhpdCxcXG4rICAgIGtzZnRfcHIsXFxuKyAgICBrc2Z0X3JhaXNlcyxcXG4rICAgIGtzZnRfcnVuLFxcbisgICAga3NmdF90cnVlLFxcbisgICAga3NmdF92YXJpYW50cyxcXG4rKVxcbitcXG4rSVBfTVRVX0RJU0NPVkVSID0gMTBcXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXFxuK0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcXG4rSVBWNl9QTVRVRElTQ19ETyA9IDJcXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcXG4rSVBWNl9UTFZfSlVNQk8gPSAxOTRcXG4rXFxuK1xcbitkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb246IHN0cikgLVxcdTAwM2UgYm9vbCB8IE5vbmU6XFxuKyAgICAnJydcXG4rICAgIENoZWNrIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjb25maWcgb2YgdGhlIHJ1bm5pbmcga2VybmVsLlxcbisgICAgUmV0dXJucyBOb25lIGlmIHRoZSBjb25maWcgaXMgbm90IGZvdW5kOyBvdGhlcndpc2UgcmV0dXJucyBUcnVlL0ZhbHNlXFxuKyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLlxcbisgICAgJycnXFxuK1xcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xcbisgICAgICAgICgnL3Byb2MvY29uZmlnLmd6JywgZ3ppcC5vcGVuKSxcXG4rICAgICAgICAoZicvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0nLCBvcGVuKSxcXG4rICAgIF06XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJ3J0JykgYXMgY29uZmlnOlxcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxcbisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZid7b3B0aW9ufT15JzpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVcXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitcXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cXG4rICAgICcnJ1xcbitcXG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxcbisgICAgaWYgcmVzIGlzIE5vbmU6XFxuKyAgICAgICAga3NmdF9wcihcXFwiV0FSTjogQ2FuJ3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XFxcIilcXG4rICAgIGVsaWYgbm90IHJlczpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQnKVxcbitcXG4rXFxuK2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cXHUwMDNlIGJvb2w6XFxuKyAgICAnJydcXG4rICAgIENoZWNrIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBwcm9kdWNlZCBhIFdBUk4gaW4gZG1lc2cuXFxuKyAgICAnJydcXG4rXFxuKyAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzpcXG4rICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSlcXG4rICAgIHJldHVybiByZXMucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDBcXG4rXFxuK1xcbitAY29udGV4dG1hbmFnZXJcXG4rZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cXG4rICAgICcnJ1xcbitcXG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXFxuKyAgICB3aXRoIGRlZmVyKGlwLCAnbGluayBkZWwgZHVtbXknLCBucz1ucyk6XFxuKyAgICAgICAgaXAoZidsaW5rIHNldCBkdW1teSBtdHUge210dX0nLCBucz1ucylcXG4rICAgICAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcXG4rICAgICAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcXG4rICAgICAgICBub2RhZCA9ICdub2RhZCcgaWYgaXB2NiBlbHNlICcnXFxuKyAgICAgICAgbG9jYWwgPSAnZmQwMDo6MS82NCcgaWYgaXB2NiBlbHNlICcxMC4wLjAuMS8yNCdcXG4rICAgICAgICByZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcXG4rICAgICAgICBpcChmJ3tmbGFnfSBhZGRyIGFkZCB7bG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JywgbnM9bnMpXFxuKyAgICAgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCcsIG5zPW5zKVxcbisgICAgICAgIHlpZWxkXFxuK1xcbitcXG4rQGtzZnRfdmFyaWFudHMoW1xcbisgICAgS3NmdE5hbWVkVmFyaWFudChcXG4rICAgICAgICAnaXB2NicsXFxuKyAgICAgICAgVHJ1ZSxcXG4rICAgICAgICBzb2NrZXQuQUZfSU5FVDYsXFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcXG4rICAgICAgICAnZmQwMDo6MicsXFxuKyAgICAgICAgJ3VkcF92Nl9zZW5kX3NrYicsXFxuKyAgICApLFxcbisgICAgS3NmdE5hbWVkVmFyaWFudChcXG4rICAgICAgICAnaXB2NCcsXFxuKyAgICAgICAgRmFsc2UsXFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQsXFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSxcXG4rICAgICAgICAnMTAuMC4wLjInLFxcbisgICAgICAgICd1ZHBfc2VuZF9za2InLFxcbisgICAgKSxcXG4rXSlcXG4rZGVmIHRlc3RfdWRwKFxcbisgICAgaXB2NjogYm9vbCxcXG4rICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSxcXG4rICAgIHNvY2tvcHRzOiB0dXBsZVtpbnQsIGludCwgaW50XSxcXG4rICAgIGRlc3RpcDogc3RyLFxcbisgICAgZnVuYzogc3RyXFxuKykgLVxcdTAwM2UgTm9uZTpcXG4rICAgICcnJ1xcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24ndCBvdmVyZmxvd1xcbisgICAgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGNvdWxkIGhhcHBlbiBvbiBvbGRlclxcbisgICAga2VybmVscyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxcbitcXG4rICAgIElQdjQ6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUsIGJ1dCB0aGUgb3ZlcmZsb3cgY291bGRcXG4rICAgIGhhcHBlbiBiZWZvcmUgaXQgaGFwcGVucy4gVGhlIG9ubHkgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byBjaGVjayBkbWVzZyBvblxcbisgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuXFxuK1xcbisgICAgSVB2NjogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSBvbiBmaXhlZCBrZXJuZWxzLCBhbmQgd2lsbCBiZVxcbisgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZFxcbisgICAgZG1lc2cgbXVzdCBiZSBjbGVhbiBvZiB3YXJuaW5ncyBvbiBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscy5cXG4rICAgICcnJ1xcbitcXG4rICAgIGlmIG5vdCBpcHY2OlxcbisgICAgICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxcbitcXG4rICAgIHdpdGggKFxcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXFxuKyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiArIDIwICogaXB2NiwgaXB2NiksXFxuKyAgICAgICAgTmV0TlNFbnRlcihucyksXFxuKyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLFxcbisgICAgKTpcXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KCpzb2Nrb3B0cylcXG4rICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6XFxuKyAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKVxcbisgICAgICAgICMgSVB2NjogRU1TR1NJWkUgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC5cXG4rICAgICAgICAjIElQdjQ6IEVNU0dTSVpFIGhhcHBlbnMgb24gYm90aCBmaXhlZCBhbmQgdW5maXhlZCBrZXJuZWxzLCBhZnRlciB0aGVcXG4rICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suXFxuKyAgICAgICAgaWYgZS5leGNlcHRpb24gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfZXEoZS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVNU0dTSVpFKVxcbitcXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbihmdW5jKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxcbitcXG4rXFxuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBUZXN0IHRoYXQgc2VuZGluZyBVRFAganVtYm9ncmFtcyBvdmVyIGEgcmF3IElQdjYgc29ja2V0IHdvcmtzLCBkZXNwaXRlXFxuKyAgICBoYXZpbmcgdGhlIGZpeCBmb3Igb3ZlcnNpemVkIFVEUCBwYWNrZXRzLiBzZW5kdG8gbXVzdCBub3QgcmFpc2UgYW4gT1NFcnJvclxcbisgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuXFxuKyAgICAnJydcXG4rXFxuKyAgICB3aXRoIChcXG4rICAgICAgICBOZXROUygpIGFzIG5zLFxcbisgICAgICAgIGR1bW15X25ldGRldihucywgNjU1ODQsIFRydWUpLFxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxcbisgICAgICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5JUFBST1RPX1VEUCkgYXMgZmQsXFxuKyAgICApOlxcbisgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpXFxuKyAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJyFISEhIJywgMTIzNCwgMTIzNCwgMCwgMCkgKyBiJyAnICogNjU1MjhcXG4rICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcXG4rXFxuK1xcbitpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcbisgICAga3NmdF9ydW4oW1xcbisgICAgICAgIHRlc3RfdWRwLFxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcXG4rICAgIF0pXFxuKyAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDowNy45MjU4NzI4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxMzI0NjQxOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X210dVwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NCw2ICszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbitcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuIFxuIFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4gXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuK1x0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbiBcbiBcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC0xNDMyLDYgKzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxuIFx0aWYgKGZyYWdfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZ19zaXplIFx1MDAzYyBtdHUpXG4gXHRcdG10dSA9IGZyYWdfc2l6ZTtcbiBcbitcdGlmIChza19pc191ZHAoc2spKVxuK1x0XHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVx1MDAzZWdzb19zaXplO1xuIFx0Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0Y21zZ19zb19tYXJrLnNoIFxcXG4gXHRjbXNnX3NvX3ByaW9yaXR5LnNoIFxcXG4gXHRjbXNnX3RpbWUuc2ggXFxcbitcdGNvcmtfZnJhZ3NpemUucHkgXFxcbiBcdGRvdWJsZV91ZHBfZW5jYXAuc2ggXFxcbiBcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxuIFx0ZWNtcF9yZWhhc2guc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbkBAIC0wLDAgKzEsMTg3IEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisnJydUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4nJydcbitcbitpbXBvcnQgZXJybm9cbitpbXBvcnQgZ3ppcFxuK2ltcG9ydCBvc1xuK2ltcG9ydCBzb2NrZXRcbitpbXBvcnQgc3RydWN0XG4raW1wb3J0IHN1YnByb2Nlc3Ncbitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXG4rXG4rZnJvbSBsaWIucHkgaW1wb3J0IChcbisgICAgS3NmdE5hbWVkVmFyaWFudCxcbisgICAgS3NmdFNraXBFeCxcbisgICAgTmV0TlMsXG4rICAgIE5ldE5TRW50ZXIsXG4rICAgIGRlZmVyLFxuKyAgICBpcCxcbisgICAga3NmdF9lcSxcbisgICAga3NmdF9leGl0LFxuKyAgICBrc2Z0X3ByLFxuKyAgICBrc2Z0X3JhaXNlcyxcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbisgICAga3NmdF92YXJpYW50cyxcbispXG4rXG4rSVBfTVRVX0RJU0NPVkVSID0gMTBcbitJUF9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X01UVV9ESVNDT1ZFUiA9IDIzXG4rSVBWNl9QTVRVRElTQ19ETyA9IDJcbitJUFY2X1BNVFVESVNDX1BST0JFID0gM1xuK0lQVjZfVExWX0pVTUJPID0gMTk0XG4rXG4rXG4rZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uOiBzdHIpIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4rICAgICcnJ1xuKyAgICBDaGVjayB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlnIG9mIHRoZSBydW5uaW5nIGtlcm5lbC5cbisgICAgUmV0dXJucyBOb25lIGlmIHRoZSBjb25maWcgaXMgbm90IGZvdW5kOyBvdGhlcndpc2UgcmV0dXJucyBUcnVlL0ZhbHNlXG4rICAgIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9uIHZhbHVlIGluIHRoZSBjb25maWcuXG4rICAgICcnJ1xuK1xuKyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4rICAgICAgICAoJy9wcm9jL2NvbmZpZy5neicsIGd6aXAub3BlbiksXG4rICAgICAgICAoZicvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0nLCBvcGVuKSxcbisgICAgXTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJ3J0JykgYXMgY29uZmlnOlxuKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4rICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYne29wdGlvbn09eSc6XG4rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVcbisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbisgICAgJycnXG4rICAgIFNraXAgdGhlIHRlc3QgaWYgQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnLlxuKyAgICAnJydcbitcbisgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygnQ09ORklHX0RFQlVHX05FVCcpXG4rICAgIGlmIHJlcyBpcyBOb25lOlxuKyAgICAgICAga3NmdF9wcihcIldBUk46IENhbid0IHJlYWQga2VybmVsIGNvbmZpZzsgYXNzdW1pbmcgZGVidWcga2VybmVsLCBhbmQgcnVubmluZyB0aGUgdGVzdFwiKVxuKyAgICBlbGlmIG5vdCByZXM6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQnKVxuK1xuK1xuK2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cdTAwM2UgYm9vbDpcbisgICAgJycnXG4rICAgIENoZWNrIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBwcm9kdWNlZCBhIFdBUk4gaW4gZG1lc2cuXG4rICAgICcnJ1xuK1xuKyAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzpcbisgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MucnVuKFsnZ3JlcCcsICctcScsIGYnV0FSTklORzouKntmdW5jfSddLCBzdGRpbj1kbWVzZy5zdGRvdXQsIGNoZWNrPUZhbHNlKVxuKyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwXG4rXG4rXG4rQGNvbnRleHRtYW5hZ2VyXG4rZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cbisgICAgJycnXG4rXG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXG4rICAgIHdpdGggZGVmZXIoaXAsICdsaW5rIGRlbCBkdW1teScsIG5zPW5zKTpcbisgICAgICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXG4rICAgICAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcbisgICAgICAgIGZsYWcgPSAnLTYnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICAgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICAgICAgbG9jYWwgPSAnZmQwMDo6MS82NCcgaWYgaXB2NiBlbHNlICcxMC4wLjAuMS8yNCdcbisgICAgICAgIHJlbW90ZSA9ICdmZDAwOjoyJyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4yJ1xuKyAgICAgICAgaXAoZid7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxuKyAgICAgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCcsIG5zPW5zKVxuKyAgICAgICAgeWllbGRcbitcbitcbitAa3NmdF92YXJpYW50cyhbXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXG4rICAgICAgICAnaXB2NicsXG4rICAgICAgICBUcnVlLFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQ2LFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcbisgICAgICAgICdmZDAwOjoyJyxcbisgICAgICAgICd1ZHBfdjZfc2VuZF9za2InLFxuKyAgICApLFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxuKyAgICAgICAgJ2lwdjQnLFxuKyAgICAgICAgRmFsc2UsXG4rICAgICAgICBzb2NrZXQuQUZfSU5FVCxcbisgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCBJUF9QTVRVRElTQ19QUk9CRSksXG4rICAgICAgICAnMTAuMC4wLjInLFxuKyAgICAgICAgJ3VkcF9zZW5kX3NrYicsXG4rICAgICksXG4rXSlcbitkZWYgdGVzdF91ZHAoXG4rICAgIGlwdjY6IGJvb2wsXG4rICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSxcbisgICAgc29ja29wdHM6IHR1cGxlW2ludCwgaW50LCBpbnRdLFxuKyAgICBkZXN0aXA6IHN0cixcbisgICAgZnVuYzogc3RyXG4rKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBUZXN0IHRoYXQgc2VuZGluZyBhbiBvdmVyc2l6ZWQgVURQIHBhY2tldCBvdmVyIGEgVURQIHNvY2tldCBkb2Vzbid0IG92ZXJmbG93XG4rICAgIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSBVRFAgaGVhZGVyLCB3aGljaCBjb3VsZCBoYXBwZW4gb24gb2xkZXJcbisgICAga2VybmVscyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxuK1xuKyAgICBJUHY0OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFLCBidXQgdGhlIG92ZXJmbG93IGNvdWxkXG4rICAgIGhhcHBlbiBiZWZvcmUgaXQgaGFwcGVucy4gVGhlIG9ubHkgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byBjaGVjayBkbWVzZyBvblxuKyAgICBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscyB0aGF0IGhhdmUgdWRwX3NldF9sZW5fc2hvcnQgd2l0aCB0aGUgd2FybmluZy5cbitcbisgICAgSVB2NjogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSBvbiBmaXhlZCBrZXJuZWxzLCBhbmQgd2lsbCBiZVxuKyAgICBzZW50IGNvcnJ1cHRlZCBvbiBvbGRlciBrZXJuZWxzLiBUZXN0IGJvdGg6IHNlbmR0byBtdXN0IHJldHVybiBFTVNHU0laRSwgYW5kXG4rICAgIGRtZXNnIG11c3QgYmUgY2xlYW4gb2Ygd2FybmluZ3Mgb24gQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMuXG4rICAgICcnJ1xuK1xuKyAgICBpZiBub3QgaXB2NjpcbisgICAgICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxuK1xuKyAgICB3aXRoIChcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4rICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTU2ICsgMjAgKiBpcHY2LCBpcHY2KSxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxuKyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLFxuKyAgICApOlxuKyAgICAgICAgZmQuc2V0c29ja29wdCgqc29ja29wdHMpXG4rICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6XG4rICAgICAgICAgICAgZmQuc2VuZHRvKGInICcgKiA2NTUyOCwgKGRlc3RpcCwgMTIzNCkpXG4rICAgICAgICAjIElQdjY6IEVNU0dTSVpFIGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4rICAgICAgICAjIElQdjQ6IEVNU0dTSVpFIGhhcHBlbnMgb24gYm90aCBmaXhlZCBhbmQgdW5maXhlZCBrZXJuZWxzLCBhZnRlciB0aGVcbisgICAgICAgICMgICAgICAgV0FSTiBpcyBwcmludGVkIC0gaWdub3JlIGl0IGFuZCByZWx5IG9uIHRoZSBkbWVzZyBjaGVjay5cbisgICAgICAgIGlmIGUuZXhjZXB0aW9uIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoZS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVNU0dTSVpFKVxuK1xuKyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oZnVuYyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgVURQIGp1bWJvZ3JhbXMgb3ZlciBhIHJhdyBJUHY2IHNvY2tldCB3b3JrcywgZGVzcGl0ZVxuKyAgICBoYXZpbmcgdGhlIGZpeCBmb3Igb3ZlcnNpemVkIFVEUCBwYWNrZXRzLiBzZW5kdG8gbXVzdCBub3QgcmFpc2UgYW4gT1NFcnJvclxuKyAgICBleGNlcHRpb24gKHdoZW4gcmFpc2VkLCB0aGUgdGVzdCBmYWlscyBhdXRvbWF0aWNhbGx5KS5cbisgICAgJycnXG4rXG4rICAgIHdpdGggKFxuKyAgICAgICAgTmV0TlMoKSBhcyBucyxcbisgICAgICAgIGR1bW15X25ldGRldihucywgNjU1ODQsIFRydWUpLFxuKyAgICAgICAgTmV0TlNFbnRlcihucyksXG4rICAgICAgICBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkLFxuKyAgICApOlxuKyAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCchSEhISCcsIDEyMzQsIDEyMzQsIDAsIDApICsgYicgJyAqIDY1NTI4XG4rICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcbitcbitcbitpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4rICAgIGtzZnRfcnVuKFtcbisgICAgICAgIHRlc3RfdWRwLFxuKyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLFxuKyAgICBdKVxuKyAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDcuOTI1ODc0Mjk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMjA1NTk3MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgYXJlYXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCdzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0IGxvb2tzIGxpa2UgaXQgZm9jdXNlcyBvbiBNVFUgKE1heGltdW0gVHJhbnNtaXNzaW9uIFVuaXQpIGNhbGN1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgVURQIGZyYWdtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gSVB2NCBhbmQgSVB2NiBuZXR3b3JrIHN0YWNrcy4gSSBzZWUgY2hhbmdlcyBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGBpcF9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfc2V0dXBfY29ya2AsIHdoaWNoIGFyZSBhbGwgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGludm9sdmUgY3J1Y2lhbCBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBjb25zaWRlcmF0aW9ucy4gVGhlIGluY2x1c2lvbiBvZiBgY29ya19mcmFnc2l6ZS5weWAgaW4gdGhlIHNlbGZ0ZXN0cyByYWlzZXMgYSByZWQgZmxhZyBpbiBhIGdvb2Qgd2F5IC0tIHRoZXkncmUgdGVzdGluZywgYnV0IGFyZSB0aGV5IHRlc3RpbmcgdGhlIHJpZ2h0IHRoaW5nP1xuXG5CZWZvcmUgSSBqdW1wIHRvIGEgZnV6emluZyBkZWNpc2lvbiwgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGVzZSBgbWluKClgIGNvbnN0cmFpbnRzIGFyZSBiZWluZyBhZGRlZC4gQXJlIHRoZXkgYnVnIGZpeGVzPyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zPyBTZWN1cml0eSBoYXJkZW5pbmc/IEl0IGNvdWxkIGJlIGFsbCBvZiB0aG9zZSB0aGluZ3MuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSByZWxhdGVkIGNvbW1pdCBtZXNzYWdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgcmVhZC1maWxlIGFuZCBncmVwcGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBpbmZsdWVuY2UgZnJhZ21lbnRhdGlvbiBiZWhhdmlvciwgY291bGQgKmFic29sdXRlbHkqIGJlIHdvcnRoIGZ1enppbmcsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgY2xhbXBpbmcgZG93biBvbiB1bmV4cGVjdGVkIHNpemVzLCBvciBlbmFibGluZyBzb21lIG5ldyBuZXR3b3JrIHBhdGggb3IgZmVhdHVyZSB0aGF0IGNvdWxkIHJldmVhbCBuZXcgZnV6emluZyB2ZWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTU6NTguMTMxNDc0Njg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTEwMzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXR1cF9jb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XFx0XFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE1OjU4LjQ2NjU4MzE0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjk1MjkyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBJUCBPdXRwdXQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgSVAgb3V0cHV0IHBhdGhzLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlLWV4YW1pbmUgaG93IHBhY2tldHMgZ2V0IGJ1aWx0IGFuZCBzZW50IGF0IHRoZSBJUCBsYXllci4gSSdsbCBzdGFydCB3aXRoIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCByb3V0aW5lcywgc28gSSdtIHB1bGxpbmcgdXAgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBoZWFkZXIgY29uc3RydWN0aW9uLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIChlLmcuLCB0aGUgZGV2aWNlIGRyaXZlcnMpLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci5cblxuVGhlbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IHJvdXRpbmcsIEknbSBnb2luZyB0byBjaGVjayBvdXQgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSByb3V0aW5nIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG91dHB1dCBwYXRoLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJvdXRlIGxvb2t1cCBwcm9jZXNzLCBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24sIGFuZCBhbnkgY2FjaGUgbWVjaGFuaXNtcyBpbnZvbHZlZC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb21wbGV4aXR5IG9mIElQdjYgcm91dGluZywgcGFydGljdWxhcmx5IHdpdGggbXVsdGlwbGUgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCByb3V0aW5nIHBvbGljaWVzLiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBhbmQgdXBkYXRlIG15IG1lbnRhbCBtb2RlbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjAwOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjAwLjk5NjExNTIyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNrLVxcdTAwM2Vza190c2tleSk7XFxuMTI5MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjEyOTI6XFx0fVxcbjEyOTM6XFx0XFxuMTI5NDpcXHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbjEyOTU6XFx0XFx0XFx0XFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxcbjEyOTY6XFx0e1xcbjEyOTc6XFx0XFx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XFxuMTI5ODpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0cnQgPSAqcnRwO1xcbjEzMDE6XFx0XFx0aWYgKHVubGlrZWx5KCFydCkpXFxuMTMwMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMzAzOlxcdFxcbjEzMDQ6XFx0XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbjEzMDU6XFx0XFx0XFx0XFx0IGRzdDRfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KTtcXG4xMzA2OlxcdFxcdGNvcmstXFx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXFx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVxcdTAwM2VmcmFnc2l6ZSkpXFxuMTMwOTpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHQvKlxcbjEzMTI6XFx0XFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXFxuMTMxMzpcXHRcXHQgKi9cXG4xMzE0OlxcdFxcdG9wdCA9IGlwYy1cXHUwMDNlb3B0O1xcbjEzMTU6XFx0XFx0aWYgKG9wdCkge1xcbjEzMTY6XFx0XFx0XFx0aWYgKCFjb3JrLVxcdTAwM2VvcHQpIHtcXG4xMzE3OlxcdFxcdFxcdFxcdGNvcmstXFx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIDQwLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4xMzE5OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghY29yay1cXHUwMDNlb3B0KSlcXG4xMzIwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMzIxOlxcdFxcdFxcdH1cXG4xMzIyOlxcdFxcdFxcdG1lbWNweShjb3JrLVxcdTAwM2VvcHQsIFxcdTAwMjZvcHQtXFx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC1cXHUwMDNlb3B0Lm9wdGxlbik7XFxuMTMyMzpcXHRcXHRcXHRjb3JrLVxcdTAwM2VmbGFncyB8PSBJUENPUktfT1BUO1xcbjEzMjQ6XFx0XFx0XFx0Y29yay1cXHUwMDNlYWRkciA9IGlwYy1cXHUwMDNlYWRkcjtcXG4xMzI1OlxcdFxcdH1cXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0Y29yay1cXHUwMDNlZ3NvX3NpemUgPSBpcGMtXFx1MDAzZWdzb19zaXplO1xcbjEzMjg6XFx0XFxuMTMyOTpcXHRcXHRjb3JrLVxcdTAwM2Vkc3QgPSBcXHUwMDI2cnQtXFx1MDAzZWRzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDAuOTk2MzkwOTk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0Mjg2OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIElQdjYgT3V0cHV0KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBJUHY2IG91dHB1dCBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBoYW5kbGVkLiBJdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHBhY2tldHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdtIGFzc3VtaW5nIGl0IGhhcyB0byBkbyB3aXRoIGFuIGludGVyYWN0aW9uLCBvciBzb21lIHF1aXJrIGluIHRoZSBvdXRwdXQgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDUuNDM5MjYzNjk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcdFxcdG5vcHQtXFx1MDAzZXNyY3J0ID0gaXA2X3J0aGRyX2R1cChvcHQtXFx1MDAzZXNyY3J0LCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuMTQxNjpcXHRcXHRcXHRpZiAob3B0LVxcdTAwM2VzcmNydCBcXHUwMDI2XFx1MDAyNiAhbm9wdC1cXHUwMDNlc3JjcnQpXFxuMTQxNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTQxODpcXHRcXG4xNDE5OlxcdFxcdFxcdC8qIG5lZWQgc291cmNlIGFkZHJlc3MgYWJvdmUgbWl5YXphd2EqL1xcbjE0MjA6XFx0XFx0fVxcbjE0MjE6XFx0XFx0djZfY29yay1cXHUwMDNlaG9wX2xpbWl0ID0gaXBjNi1cXHUwMDNlaGxpbWl0O1xcbjE0MjI6XFx0XFx0djZfY29yay1cXHUwMDNldGNsYXNzID0gaXBjNi1cXHUwMDNldGNsYXNzO1xcbjE0MjM6XFx0XFx0djZfY29yay1cXHUwMDNlZG9udGZyYWcgPSBpcGM2LVxcdTAwM2Vkb250ZnJhZztcXG4xNDI0OlxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmZsYWdzIFxcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxcbjE0MjU6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgXFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XFxuMTQyNjpcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSkgOiBkc3Q2X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuMTQyNzpcXHRcXHRlbHNlXFxuMTQyODpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZXBtdHVkaXNjKSBcXHUwMDNlPSBJUFY2X1BNVFVESVNDX1BST0JFID9cXG4xNDI5OlxcdFxcdFxcdFxcdFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpKTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0ZnJhZ19zaXplID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VmcmFnX3NpemUpO1xcbjE0MzI6XFx0XFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuMTQzMzpcXHRcXHRcXHRtdHUgPSBmcmFnX3NpemU7XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGlmIChza19pc191ZHAoc2spKVxcbjE0MzY6XFx0XFx0XFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xcbjE0Mzc6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcXG4xNDM4OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4xNDM5OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xcbjE0NDA6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5tYXJrID0gaXBjNi1cXHUwMDNlc29ja2MubWFyaztcXG4xNDQxOlxcdFxcdGNvcmstXFx1MDAzZWJhc2UucHJpb3JpdHkgPSBpcGM2LVxcdTAwM2Vzb2NrYy5wcmlvcml0eTtcXG4xNDQyOlxcdFxcdHNvY2tfdHhfdGltZXN0YW1wKHNrLCBcXHUwMDI2aXBjNi1cXHUwMDNlc29ja2MsIFxcdTAwMjZjb3JrLVxcdTAwM2ViYXNlLnR4X2ZsYWdzKTtcXG4xNDQzOlxcdFxcdGlmIChpcGM2LVxcdTAwM2Vzb2NrYy50c2ZsYWdzIFxcdTAwMjYgU09DS0NNX0ZMQUdfVFNfT1BUX0lEKSB7XFxuMTQ0NDpcXHRcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmZsYWdzIHw9IElQQ09SS19UU19PUFRfSUQ7XFxuMTQ0NTpcXHRcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXFx1MDAzZXNvY2tjLnRzX29wdF9pZDtcXG4xNDQ2OlxcdFxcdH1cXG4xNDQ3OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UubGVuZ3RoID0gMDtcXG4xNDQ4OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXFx1MDAzZXNvY2tjLnRyYW5zbWl0X3RpbWU7XFxuMTQ0OTpcXHRcXG4xNDUwOlxcdFxcdHJldHVybiAwO1xcbjE0NTE6XFx0fVxcbjE0NTI6XFx0XFxuMTQ1MzpcXHRzdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4xNDU0OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuMTQ1NTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29ya19mdWxsLFxcbjE0NTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4xNDU3OlxcdFxcdFxcdFxcdCAgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsXFxuMTQ1ODpcXHRcXHRcXHRcXHRcXHRcXHQgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksXFxuMTQ1OTpcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmZyb20sIHNpemVfdCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDUuNDM5Mzg0NjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzOTc1NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBSb3V0aW5nIERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yIGxpZXMgd2l0aGluIHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgaGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3QgYHJ0Nl9pbmZvYCwgaXRzIGZpZWxkcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWdhcmRpbmcgdGhlIHNwZWNpZmljIHJvdXRlIHNlbGVjdGlvbiBwcm9jZXNzLCB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IHJvdXRlIHR5cGVzIChlLmcuLCBjb25uZWN0ZWQsIHN0YXRpYywgZHluYW1pYyksIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3Igc3BlY2lhbCBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcm91dGluZyBlbmdpbmUgbWFrZXMgaXRzIGRlY2lzaW9ucyBpcyBwYXJhbW91bnQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIGFueSBmbGFncyBvciBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCByb3V0ZXMsIHNpbmNlIHRoZXNlIG9mdGVuIGRyaXZlIHRoZSBtb3JlIG51YW5jZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoxMC40NzkxNDI4ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdH1cXG4gMzY2OlxcdFxcbiAzNjc6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIDM2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZm9yd2FyZGluZylcXG4gMzY5OlxcdHtcXG4gMzcwOlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDM3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1O1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcXG4gMzc0OlxcdFxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbiAzNzU6XFx0XFx0XFx0aWYgKG10dSlcXG4gMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzNzc6XFx0XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRtdHUgPSBJUFY2X01JTl9NVFU7XFxuIDM4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM4MTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG4gMzgyOlxcdFxcdGlmIChpZGV2KVxcbiAzODM6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KTtcXG4gMzg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRvdXQ6XFxuIDM4NzpcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbiAzOTM6XFx0ICpcXG4gMzk0OlxcdCAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxcbiAzOTU6XFx0ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuIDM5NjpcXHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbiAzOTc6XFx0ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxcbiAzOTg6XFx0ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXFxuIDM5OTpcXHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTAuNDc5MjE2NzY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTYzODExOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBWYWx1ZXMgaW4gSVAgYW5kIElQdjYqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0IHZhbHVlcywgc3BlY2lmaWNhbGx5IGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYC4gVGhvc2UgY29uc3RhbnQgZGVmaW5pdGlvbnMgYXJlIGNydWNpYWwgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gb24gc29saWQgZ3JvdW5kIHdpdGggdGhlbS4gSSBjb3VsZCBsb29rIHRoZW0gdXAgaW4gdGhlIGRvY3VtZW50YXRpb24sIGJ1dCBJJ2xsIHRyeSBhIHF1aWNrIGdyZXAgdGhyb3VnaCByZWxldmFudCBzb3VyY2UgY29kZSBmaXJzdC4gSXQncyBvZnRlbiBmYXN0ZXIgdG8gc2VlIHRoZSB1c2FnZSBjb250ZXh0IGFsb25nc2lkZSB0aGUgZGVmaW5pdGlvbi4gQSBxdWljayBncmVwIHNob3VsZCBkbyB0aGUgdHJpY2suIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTQuNzM1NjAwNjY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMjY4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX01BWF9NVFVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0zNC0jZGVmaW5lIFNTSVBfVFhRVUVVRV9MRU5cXHQxMDBcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXFx0XFx0NjU1MzVcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVxcdDQwMDBcXG4tLVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjMtXFx0c3NpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1pbl9tdHUgPSBQSE9ORVRfTUlOX01UVTtcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XFx0c3NpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XFxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtNTg4LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6NTg5OlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBCQVJFVURQX0JBU0VfSExFTjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtNTkwLVxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDgzMi1cXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA4MzM6XFx0XFx0XFx0ICAgIHVsX3JpZi1cXHUwMDNlcmlmX2luZGV4LCB1bF9yaWYtXFx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDgzNC1cXHRtbHhzd19yZWdfcml0cl9sb29wYmFja19wcm90b2NvbF9zZXQocml0cl9wbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE4Mjg9c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE4NjE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEdFTkVWRV9CQVNFX0hMRU4gLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM9MTU4PXN0YXRpYyB2b2lkIG92cG5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM6MTc2OlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYy0xNzctXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMC1cXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjY0MzE6XFx0dW5zaWduZWQgaW50IHBhY2tldF9sZW4gPSB2aS1cXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXFx1MDAzZWRldi1cXHUwMDNlbWF4X210dTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cXHR1bnNpZ25lZCBpbnQgYnVmX2xlbiA9IGhkcl9sZW4gKyBFVEhfSExFTiArIFZMQU5fSExFTiArIHBhY2tldF9sZW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pcC5oLTUyLS8qIElQdjQgZGF0YWdyYW0gbGVuZ3RoIGlzIHN0b3JlZCBpbnRvIDE2Yml0IGZpZWxkICh0b3RfbGVuKSAqL1xcbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcXHQweEZGRkZVXFxuaW5jbHVkZS9saW51eC9pcC5oLTU0LVxcbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXFxuaW5jbHVkZS9saW51eC9pcC5oLTU2LXtcXG5pbmNsdWRlL2xpbnV4L2lwLmg6NTc6XFx0aXBoLVxcdTAwM2V0b3RfbGVuID0gbGVuIFxcdTAwM2M9IElQX01BWF9NVFUgPyBodG9ucyhsZW4pIDogMDtcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaD00Njc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNDk5LW91dDpcXG5pbmNsdWRlL25ldC9pcC5oOjUwMDpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01MDEtXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaC01MjYtXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xcbmluY2x1ZGUvbmV0L2lwLmgtNTI4LVxcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTU0NS1cXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcXHRtdHUgPSBtaW4oUkVBRF9PTkNFKGRzdF9kZXYoZHN0KS1cXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01NDctXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC00MC0jZGVmaW5lIEVUSF9NSU5fTVRVXFx0NjhcXHRcXHQvKiBNaW4gSVB2NCBNVFUgcGVyIFJGQzc5MVxcdCovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVxcdDB4RkZGRlVcXHRcXHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXFx0Ki9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC00Mi1cXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTMxOS1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmM6MzIwOlxcdGlmIChsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTMyMS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTM0OS1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmM6MzUwOlxcdGlmIChsZW4gXFx1MDAzZSBJUF9NQVhfTVRVKVxcbm5ldC9pcHY0L2VzcDQuYy0zNTEtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTQwOC1cXG5uZXQvaXB2NC9pZ21wLmM6NDA5OlxcdHNpemUgPSBtaW4obXR1LCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9pZ21wLmMtNDEwLVxcdHdoaWxlICgxKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4My1cXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5ODQ6XFx0bXR1ID0gY29yay1cXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cXHUwMDNlZnJhZ3NpemU7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTg1LVxcdHBhZ2VkID0gISFjb3JrLVxcdTAwM2Vnc29fc2l6ZTtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cXHRtYXhmcmFnbGVuID0gKChtdHUgLSBmcmFnaGVhZGVybGVuKSBcXHUwMDI2IH43KSArIGZyYWdoZWFkZXJsZW47XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTkxOlxcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkyLVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNS1cXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzMDY6XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDctXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjMxNzpcXHRcXHRtdHUgPSBtaW4odGRldi1cXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMTgtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1MC1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNTE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNTItXFx0aWYgKGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjAtXFx0aW50IHRfaGxlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XFx0aW50IG1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjItXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTgyPWludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVxcdGlmICh0YltJRkxBX01UVV0pIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjE0OlxcdFxcdHVuc2lnbmVkIGludCBtYXggPSBJUF9NQVhfTVRVIC0gKG50LVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTUtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE0NDU9dTMyIGlwX210dV9mcm9tX2ZpYl9yZXN1bHQoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgX19iZTMyIGRhZGRyKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVxcdGlmIChsaWtlbHkoIW10dSkpXFxubmV0L2lwdjQvcm91dGUuYzoxNDY1OlxcdFxcdG10dSA9IG1pbihSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmM9MzcxPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM4MC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2Ni9lc3A2LmM6MzgxOlxcdGlmIChsZW4gXFx1MDAzZSBJUF9NQVhfTVRVKVxcbm5ldC9pcHY2L2VzcDYuYy0zODItXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzUzPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2OS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlxcdFxcdGlmIChuZXdfbXR1IFxcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzcxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTkxMT1zdGF0aWMgdm9pZCB2dGk2X2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XFxubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTczOT1zdGF0aWMgdm9pZCB4ZnJtaV9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1XFx0XFx0PSBFVEhfTUlOX01UVTtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6NzQ2OlxcdGRldi1cXHUwMDNlbWF4X210dVxcdFxcdD0gSVBfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtNzQ3LVxcdGRldi1cXHUwMDNlZmxhZ3MgXFx0XFx0PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjUwNT1zdGF0aWMgdTMyIGlwdGZzX2dldF9pbm5lcl9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBvdXRlcl9tdHUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cXHRpZiAoIXh0ZnMtXFx1MDAzZWNmZy5kb250X2ZyYWcpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XFx0XFx0cmV0dXJuIHgtXFx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTItXFx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVxcdFxcdHgtXFx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk1NzpcXHRcXHRpZiAoeC1cXHUwMDNldGZjcGFkIFxcdTAwM2UgSVBfTUFYX01UVSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJFeGNlc3NpdmUgVEZDIHBhZGRpbmdcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTYuMzE2ODczNjQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MjU3MTY3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBNVFUgY2xhbXBpbmcgYW5kIFVEUCBwYWNrZXQgc2l6ZXMgaW4gSVB2NCBhbmQgSVB2Ni4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2X3JvdXRlLmhgIChmb3IgTVRVKSwgYGlwX291dHB1dC5jYCAoSVB2NCBjb3JrIHNldHVwKSwgYW5kIGBpcDZfb3V0cHV0LmNgIChJUHY2IGNvcmsgc2V0dXApLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoaXMgY2hhbmdlPyBUaGUgY29tbWl0IG1lc3NhZ2UgcG9pbnRzIHRvIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdywgZXNwZWNpYWxseSBpbiBvbGRlciBrZXJuZWxzLCB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgY29uZmlybXMgdGhlIGludGVudCBpcyB0byBsaW1pdCB0aGUgcGFja2V0IHNpemUgdG8gcHJldmVudCB0aGF0IG92ZXJmbG93LiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBjcml0aWNhbCBwYXRocy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyAqV29ydGhGdXp6aW5nKj8gVGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGRvY3VtZW50YXRpb24sIGNvc21ldGljIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIExldCdzIGxvb2s6XG5cbiogICBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLlxuKiAgIEl0J3Mgbm90IHB1cmVseSBsb2dnaW5nIG9yIGRlY29yYXRpdmUuXG4qICAgSXQgbW9kaWZpZXMgKm51bWVyaWMgY29uc3RhbnRzKiBpbiBhIHdheSB0aGF0ICpmdW5jdGlvbmFsbHkgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93KiBieSBjbGFtcGluZyBNVFVzIGFuZCBzaXplcyB0byBwcmV2ZW50IG92ZXJmbG93LlxuKiAgIEl0J3MgZGVmaW5pdGVseSAqbm90KiBjb2RlIHNwZWNpZmljIHRvIGhhcmR3YXJlIHRoYXQgaXNuJ3QgY29tbW9ubHkgYXZhaWxhYmxlLCBhbmQgaXQgaXMgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZy5cbiogICBJdCBpcyBtb2RpZnlpbmcgcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGxvZ2ljOyBTcGVjaWZpY2FsbHksIHRoZSBVRFAgb3V0cHV0IHBhdGhzIGluIElQdjQgYW5kIElQdjYgYW5kIE1UVSBjYWxjdWxhdGlvbnMuXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhIGhlcmU6IFRoaXMgaXMgYSBzb2xpZCBcIlllc1wiLlxuXG5OZXh0LCBob3cgZG8gd2UgdGFyZ2V0IGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmVjdGl2ZWx5PyBJdCdzIHRpbWUgdG8gcmVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgQVBJIGVudHJ5cG9pbnRzLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIHJlcXVpcmVzIG1lIHRvIGRvIHNvbWUgY29kZSBhcmNoYWVvbG9neSBhbmQgZmluZCB0aGUgQVBJIGVudHJ5IHBvaW50cyB0aGF0IGFyZSByZWxldmFudC4gU28sIEkgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIGlkZW50aWZ5IHRob3NlIGNhbGxlcnMuIFRoYXQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyMi4xNDI1OTM2NDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc4OTI3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0dXBfY29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTMtXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI5NDpzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTUtXFx0XFx0XFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTM2MD1pbnQgaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzczLVxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSkpIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzc0OlxcdFxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLmJhc2UsIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzc1LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTcyLVxcdGNvcmstXFx1MDAzZW9wdCA9IE5VTEw7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTU3MzpcXHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGMsIHJ0cCk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3NC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyMy43MjA0OTExNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjExODQ2NTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIElQNiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGBpcDZfc2V0dXBfY29ya2AuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMsIG9wdGltaXphdGlvbnMsIG9yIGV2ZW4gZGVidWdnaW5nIGVmZm9ydHMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcHJvYmUgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgZnVydGhlciwgbGlrZWx5IGR1ZSB0byBhIHNwZWNpZmljIG5lZWQgdGhhdCB0aGUgbmFtZSBpbXBsaWVzIHN1Y2ggYXMgSVB2NiBzZXR1cCB0YXNrcy4gU28sIEknbGwgYWRkIHRoYXQgZnVuY3Rpb24gdG8gbXkgc2VhcmNoIGNyaXRlcmlhIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyOS44Mzg5NTkwODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgzNzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3NldHVwX2NvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMzczLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3Ny1cXHRcXHRkc3RfaG9sZChcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XFx0XFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLFxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVxcdFxcdFxcdFxcdCAgICAgaXBjNiwgcnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4Ny1cXHRjb3JrLVxcdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyMDg4OlxcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjozMS4zMDczNDA3MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4MzY5NDk5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBNVFUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBJUHY0IGFuZCBJUHY2IHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyYWdtZW50YXRpb24gYW5kIE1UVSBkaXNjb3ZlcnkuIExldCdzIHNlZS4uLiBJJ20gdHJhY2luZyB0aGUgZmxvdyByZWxhdGVkIHRvIFwiY29ya2luZyxcIiB0aGF0IG9wdGltaXphdGlvbiB3aGVyZSB5b3UgZGVsYXkgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQgdW50aWwgeW91IGhhdmUgZW5vdWdoIGRhdGEgdG8gZmlsbCBhIGJ1ZmZlci4gSSd2ZSBub3RlZCB0aGF0IGBpcF9zZXR1cF9jb3JrYCBnZXRzIGludm9rZWQgYnkgYGlwX2FwcGVuZF9kYXRhYCBhbmQgYGlwX21ha2Vfc2tiYCBpbiB0aGUgSVB2NCBwYXRoLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gU2ltaWxhcmx5LCBgaXA2X3NldHVwX2NvcmtgIGlzIGNhbGxlZCBieSBgaXA2X2FwcGVuZF9kYXRhYCBhbmQgYGlwNl9tYWtlX3NrYmAgaW4gdGhlIElQdjYgcGF0aC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci5cblxuTm93IEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gSVB2Ni4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgcG90ZW50aWFsbHkgZm9yd2FyZGluZyBwYWNrZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTVRVIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjE1LjE0NDI5MzIyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTc5NzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM1Mz1zdGF0aWMgaW5saW5lIGJvb2wgcnQ2X2R1cGxpY2F0ZV9uZXh0aG9wKHN0cnVjdCBmaWI2X2luZm8gKmEsIHN0cnVjdCBmaWI2X2luZm8gKmIpXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjYtXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MzY3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZm9yd2FyZGluZylcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5My0gKlxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NDogKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTUtICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTIxPWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2NC1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjY1OlxcdG10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjY2LVxcdGlmIChtdHUgXFx1MDAzYyBJUFY2X01JTl9NVFUpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyODg9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgdW5zaWduZWQgaW50IGlwNl9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI4OS17XFxubmV0L2lwdjYvcm91dGUuYzozMjkwOlxcdHJldHVybiBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgZmFsc2UpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI5MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTA5LVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTEwOlxcdFxcdGZsb3dfdHVwbGUtXFx1MDAzZW10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTExMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6MTYuOTYwMDk4MjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTA2NDI2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IE1UVSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBJUHY2IE1UVSBpcyBtYW5hZ2VkIGFuZCBJJ3ZlIG5vdGljZWQgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGludGVyYWN0aW5nIGhlcmU6IGBpcDZfbXR1YCBjYWxscyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKWAgYW5kIGBpcDZfZm9yd2FyZGAgY2FsbHMgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKWAuIFNlZW1zIGxpa2UgdGhleSdyZSBzaGFyaW5nIHNvbWUgY29yZSBsb2dpYywgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZHVwbGljYXRpb24uIE5vdywgSSB3YW50IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZyBwaWN0dXJlIHRvIHNlZSBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cbkkndmUgZ290IGEgbWVudGFsIGNoZWNrbGlzdCBvZiBrZXkgc3ltYm9scyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpbiB0aGlzIGNvbnRleHQuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBvZiBjb3Vyc2UgYGlwNl9tdHVgIGFuZCBgaXA2X2ZvcndhcmRgIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZTsgYXJlIHRoZXkgaW50ZXJuYWwsIG9yIGFyZSB0aGV5IGdsb2JhbGx5IHZpc2libGU/IElmIHRoZXkncmUgZ2xvYmFsLCB0aGF0IHJlYWxseSBjaGFuZ2VzIHRoZSBnYW1lIGluIHRlcm1zIG9mIGludGVyLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuVG8gdmVyaWZ5IHRoZWlyIHNjb3BlLCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhleSdyZSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L2lwdjQvaXBfb3V0cHV0LmNgLCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucywgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgc3RhdGljIG9yIG5vdCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGV4dGVybmFsIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE1LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjQ3LjA2NjUyODAzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTI1NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLippcF9hcHBlbmRfZGF0YXxFWFBPUlRfU1lNQk9MLippcF9tYWtlX3NrYnxFWFBPUlRfU1lNQk9MLippcDZfYXBwZW5kX2RhdGF8RVhQT1JUX1NZTUJPTC4qaXA2X21ha2Vfc2tifEVYUE9SVF9TWU1CT0wuKmlwNl9tdHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5NC19XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4OTU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X2FwcGVuZF9kYXRhKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NDkuMDc3Nzg4OTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjE4OTI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlIG9mIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBJUHY0IE91dHB1dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBJUHY0IHBhY2tldHMgYXJlIGFzc2VtYmxlZCBhbmQgc2VudCBvdXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcF9tYWtlX3NrYmAuIFRoZXNlIGFyZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2Nrcy4gYGlwX2FwcGVuZF9kYXRhYCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgdGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gdGhlIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCBlbnN1cmluZyB0aGF0IHRoaXMgaXMgZG9uZSBzYWZlbHksIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyBmcmFnbWVudGF0aW9uLiBgaXBfbWFrZV9za2JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgYW5kIHN0YXJ0cyB0aGUgSVB2NCBoZWFkZXIgYXNzZW1ibHkuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdXRwdXQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBNVFUgY29uc2lkZXJhdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZyYWdtZW50YXRpb24gbG9naWMuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhYm92ZSBhbmQgYmVsb3cgdGhlbS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTIuMjM5Njg0MTg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTA6XFx0XFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG4xMzkxOlxcdFxcdGRzdF9yZWxlYXNlKGNvcmstXFx1MDAzZWRzdCk7XFxuMTM5MjpcXHRcXHRjb3JrLVxcdTAwM2Vkc3QgPSBOVUxMO1xcbjEzOTM6XFx0fVxcbjEzOTQ6XFx0XFxuMTM5NTpcXHQvKlxcbjEzOTY6XFx0ICpcXHRDb21iaW5lZCBhbGwgcGVuZGluZyBJUCBmcmFnbWVudHMgb24gdGhlIHNvY2tldCBhcyBvbmUgSVAgZGF0YWdyYW1cXG4xMzk3OlxcdCAqXFx0YW5kIHB1c2ggdGhlbSBvdXQuXFxuMTM5ODpcXHQgKi9cXG4xMzk5OlxcdHN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4xNDAwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4xNDAxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbjE0MDI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGluZXRfY29yayAqY29yaylcXG4xNDAzOlxcdHtcXG4xNDA0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICp0bXBfc2tiO1xcbjE0MDU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKip0YWlsX3NrYjtcXG4xNDA2OlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4xNDA3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4xNDA4OlxcdFxcdHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMO1xcbjE0MDk6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKGNvcmstXFx1MDAzZWRzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjUyLjIzOTc4NTI4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzU2MjU3NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY0L0lQdjYgT3V0cHV0IFBhdGggRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAgKElQdjQpIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAgKElQdjYpLiBJIGtub3cgdGhlc2UgYXJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSAqbm9uLXN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyDigJMgaXQgc3VnZ2VzdHMgdGhleSdyZSBwb3RlbnRpYWxseSB1c2VkIGJleW9uZCB0aGUgZGlyZWN0IHNjb3BlIG9mIHRob3NlIGZpbGVzLlxuXG5MZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgdGhlIGNhbGxlcnMgb2YgdGhvc2UgZnVuY3Rpb25zIGZyb20gVURQLCBhbmQgUkFXLiBJIGtub3cgdGhhdCBgdWRwX3NlbmRtc2dgIGFuZCBgdWRwdjZfc2VuZG1zZ2AgYXJlIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZm9yIFVEUCwgYW5kIHRoZXkgaW5kZWVkIGNhbGwgdGhlIElQdjQvSVB2NiBmdW5jdGlvbnMuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCB3aGlsZSBgdWRwX3NlbmRtc2dgIGFuZCBgdWRwdjZfc2VuZG1zZ2AgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIFwiaG90IHBhdGhzXCIsIHRoZSBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXBfbWFrZV9za2JgIGFyZSBzcGVjaWZpYyB0byBjb3JraW5nL291dHB1dCBwYXRoLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHNlcGFyYXRlIHRob3NlIHBhdGhzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IGFib3V0IGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYD8gQXJlIHRoZXkgc3RhdGljLCBhbmQgaW5kZWVkIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKC4uLilgIGFuZCBgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayguLi4pYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgc2V0dXAgZnVuY3Rpb25zLiBHb29kLlxuXG5JJ20gYWxzbyBub3RpbmcgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCB3aGljaCBpcyBzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAuIEl0cyBjYWxsZXJzIGFyZSBgaXA2X210dWAgKGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCksIGBpcDZfZm9yd2FyZGAgKGluIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgKSwgZXRjLiBUaGlzIGlzIHVzZWZ1bCBmb3IgTVRVLXJlbGF0ZWQgYWRqdXN0bWVudHMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgaW5saW5lIGltcGxpZXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBpdCdzIGNydWNpYWwgZm9yIHRoZSBmb3J3YXJkaW5nIHBhdGgsIHRvby5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgSVB2NCBhbmQgSVB2NiBmZWF0dXJlcy4gQW5kIGFsc28gd2hlcmUgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgYXJlIGJ1aWx0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBpcyBjb21waWxlZCBhbmQgd2hpY2ggbW9kdWxlcyBkZXBlbmQgb24gdGhlc2UgY29yZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTYuOTk2MDQ1NTI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTMwNjQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9vdXRwdXQub3xpcDZfb3V0cHV0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4OlxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNy1cXG5uZXQvaXB2Ni9NYWtlZmlsZTo4OmlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTcuMDY1MzU5MDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDE1NDk1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoZXNlIHNob3VsZCBiZSB0aGUgcGxhY2VzIHdoZXJlIHRoZSBjb3JlIElQdjQgYW5kIElQdjYtcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwcm90b2NvbCBzdGFja3MgYXJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLiBFeGFtaW5pbmcgdGhlc2UgZmlsZXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBtZSB3aXRoIGluc2lnaHRzIGludG8gdGhlIHZhcmlvdXMgZmVhdHVyZSBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIElQIG5ldHdvcmtpbmcuIEtub3dpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG9zc2liaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzo1OS4zNjY5MTExNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNTU2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVR8Y29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXFxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzkzLVxcbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxcbm5ldC9pcHY0L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MDMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxcbm5ldC9pcHY0L0tjb25maWctNDA1LVxcdGludCBcXFwiSU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDEzLVxcbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDE4LVxcbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDIwLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM0LVxcbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MzYtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM4LVxcbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00NDAtXFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NDYtXFxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cXHR0cmlzdGF0ZSBcXFwiUkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNDYtXFxubmV0L2lwdjYvS2NvbmZpZzo0Nzpjb25maWcgSU5FVDZfQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNjEtXFxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy03Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY2L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTEwMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXFxubmV0L2lwdjYvS2NvbmZpZy0xMDMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0MC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0MTpjb25maWcgSU5FVDZfWEZSTV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDUtXFxubmV0L2lwdjYvS2NvbmZpZzoxNDY6Y29uZmlnIElORVQ2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQ3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0xNS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoxNjpjb25maWcgSU5FVF9NUFRDUF9ESUFHXFxubmV0L21wdGNwL0tjb25maWctMTctXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZy00LSNcXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1BcXG5uZXQvcHNwL0tjb25maWctNi1cXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zY3RwL0tjb25maWc9Njg9ZW5kY2hvaWNlXFxubmV0L3NjdHAvS2NvbmZpZy02OS1cXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xcbm5ldC9zY3RwL0tjb25maWctNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTkuNDMyOTcwODk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTY2NjExNzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzIC0gSVAgU3RhY2sgQ29yZSoqXG5cbk9rYXksIHNvIEkndmUganVzdCBnb25lIHRocm91Z2ggdGhlIGtleSBzdGVwcyBmb3IgdGhpcyBmdXp6aW5nIGFuYWx5c2lzLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHRoZSBtYWluIGNvbmZpZyBvcHRpb25zIGRyaXZpbmcgdGhpcywgYW5kIEkgYnJpZWZseSBzY2FubmVkIGZvciBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYnV0IHRob3NlIGFyZSB0aGUgcHJpbWFyeSB0d28uXG5cbk5leHQsIEkgcmUtY29uZmlybWVkIHRoZSBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2UncmUgdGFyZ2V0aW5nOiBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGBpcDZfbXR1YCwgYW5kIGBpcDZfZm9yd2FyZGAuXG5cbkkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIHRoZXNlIGBGb2N1c1N5bWJvbHNgIGhhZCBhbnkgcmVsYXRlZCBzeW1ib2xzLiBJIGNoZWNrZWQgaG93IGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBhcmUgY2FsbGVkLCB3aGljaCB3ZXJlIGluZGVlZCBjYWxsZWQgYnkgdGhvc2UgYEZvY3VzU3ltYm9sc2AsIGFzIGV4cGVjdGVkLiBJIGRpZCBhIHRob3JvdWdoIGdyZXAgYW5kIGNyb3NzLXJlZmVyZW5jZSwgc28gSSBjYW4gY29uZmlkZW50bHkgc2F5IEkndmUgY292ZXJlZCBhbGwgY2FsbCBzaXRlcy5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0LCBgRW5hYmxlQ29uZmlnc2AgYXJlIGBJTkVUYCBhbmQgYElQVjZgLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzgsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjA5OTA5MTkyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTk3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X210dVwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9tdHVcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5mb3JjZXMgTVRVIGxpbWl0cyAoSVBfTUFYX01UVSAvIElQNl9NQVhfTVRVKSBkdXJpbmcgY29ya2luZyBhbmQgSVB2NiBkZXN0aW5hdGlvbiBNVFUgbG9va3VwIGluIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkgdG8gcHJldmVudCAxNi1iaXQgVURQIGRhdGFncmFtIGxlbmd0aCBvdmVyZmxvdy4gVGhpcyBhbHRlcnMgZnVuY3Rpb25hbCBwYWNrZXQgY29ya2luZyBhbmQgcm91dGUgTVRVIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMTowMS4xNzIyOTU3MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTEzMjYyMzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjE3MjcyMTE0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0MTEzMjE5Mzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xhbXBzIHRoZSBNVFUgYW5kIGNvcmsgZnJhZ21lbnRhdGlvbiBzaXplIHRvIElQX01BWF9NVFUgKElQdjQpIGFuZCBJUDZfTUFYX01UVSAoSVB2NikgaW4gYGlwX3NldHVwX2NvcmtgLCBgaXA2X3NldHVwX2NvcmtgLCBhbmQgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBhbG9uZ3NpZGUgYWRkaW5nIGEgc2VsZnRlc3QuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyBvZiB0aGUgMTYtYml0IFVEUCBoZWFkZXIgbGVuZ3RoIGZpZWxkIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGggdmVyeSBsYXJnZSBNVFUgdmFsdWVzIChcXHUwMDNlIDY1NTM1KS5cXG5cXG5LTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSBidWZmZXJzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24vcGFkZGluZywgY2hhbmdlIHVzZXItc3BhY2UgY29weSBsb2dpYywgb3IgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ2xhbXBpbmcgTVRVIHZhbHVlcyBlbnN1cmVzIHBhY2tldCBsZW5ndGggYm91bmRzIHN0YXkgd2l0aGluIHByb3RvY29sIGxpbWl0cy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwOToxNDowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbitcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG4gXG4gXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXHUwMDNlZnJhZ3NpemUpKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4rXHRpZiAoc2tfaXNfdWRwKHNrKSlcbitcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuIFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuIFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbiBcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA1MTdjMDlkNjBiZWY3Li4zZWUzMzc4ZjhiMjZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4rXHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhZmQ2NDNkMDdlYzJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICsxLDE4NyBAQFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rJycnVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJycnXG4rXG4raW1wb3J0IGVycm5vXG4raW1wb3J0IGd6aXBcbitpbXBvcnQgb3NcbitpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuK2ltcG9ydCBzdWJwcm9jZXNzXG4rZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlclxuK1xuK2Zyb20gbGliLnB5IGltcG9ydCAoXG4rICAgIEtzZnROYW1lZFZhcmlhbnQsXG4rICAgIEtzZnRTa2lwRXgsXG4rICAgIE5ldE5TLFxuKyAgICBOZXROU0VudGVyLFxuKyAgICBkZWZlcixcbisgICAgaXAsXG4rICAgIGtzZnRfZXEsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9yYWlzZXMsXG4rICAgIGtzZnRfcnVuLFxuKyAgICBrc2Z0X3RydWUsXG4rICAgIGtzZnRfdmFyaWFudHMsXG4rKVxuK1xuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9NVFVfRElTQ09WRVIgPSAyM1xuK0lQVjZfUE1UVURJU0NfRE8gPSAyXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X1RMVl9KVU1CTyA9IDE5NFxuK1xuK1xuK2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbjogc3RyKSAtXHUwMDNlIGJvb2wgfCBOb25lOlxuKyAgICAnJydcbisgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuXG4rICAgIFJldHVybnMgTm9uZSBpZiB0aGUgY29uZmlnIGlzIG5vdCBmb3VuZDsgb3RoZXJ3aXNlIHJldHVybnMgVHJ1ZS9GYWxzZVxuKyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLlxuKyAgICAnJydcbitcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xuKyAgICAgICAgKCcvcHJvYy9jb25maWcuZ3onLCBnemlwLm9wZW4pLFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXG4rICAgIF06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxuKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJ3tvcHRpb259PXknOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cbisgICAgJycnXG4rXG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxuKyAgICBpZiByZXMgaXMgTm9uZTpcbisgICAgICAgIGtzZnRfcHIoXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcIilcbisgICAgZWxpZiBub3QgcmVzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgnQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JylcbitcbitcbitkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYzogc3RyKSAtXHUwMDNlIGJvb2w6XG4rICAgICcnJ1xuKyAgICBDaGVjayBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcHJvZHVjZWQgYSBXQVJOIGluIGRtZXNnLlxuKyAgICAnJydcbitcbisgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFsnZG1lc2cnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6XG4rICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSlcbisgICAgcmV0dXJuIHJlcy5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuK1xuK1xuK0Bjb250ZXh0bWFuYWdlclxuK2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgQ3JlYXRlIGEgZHVtbXkgbmV0ZGV2IGluc2lkZSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLCBhbmQgdHVuZSBpdCBmb3IgdGhlIHRlc3QuXG4rICAgICcnJ1xuK1xuKyAgICBpcCgnbGluayBhZGQgZHVtbXkgdHlwZSBkdW1teScsIG5zPW5zKVxuKyAgICB3aXRoIGRlZmVyKGlwLCAnbGluayBkZWwgZHVtbXknLCBucz1ucyk6XG4rICAgICAgICBpcChmJ2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fScsIG5zPW5zKVxuKyAgICAgICAgaXAoJ2xpbmsgc2V0IGR1bW15IHVwJywgbnM9bnMpXG4rICAgICAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcbisgICAgICAgIG5vZGFkID0gJ25vZGFkJyBpZiBpcHY2IGVsc2UgJydcbisgICAgICAgIGxvY2FsID0gJ2ZkMDA6OjEvNjQnIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjEvMjQnXG4rICAgICAgICByZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcbisgICAgICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHtsb2NhbH0gZGV2IGR1bW15IHtub2RhZH0nLCBucz1ucylcbisgICAgICAgIGlwKGYne2ZsYWd9IG5laWdoIGFkZCB7cmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQnLCBucz1ucylcbisgICAgICAgIHlpZWxkXG4rXG4rXG4rQGtzZnRfdmFyaWFudHMoW1xuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxuKyAgICAgICAgJ2lwdjYnLFxuKyAgICAgICAgVHJ1ZSxcbisgICAgICAgIHNvY2tldC5BRl9JTkVUNixcbisgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETyksXG4rICAgICAgICAnZmQwMDo6MicsXG4rICAgICAgICAndWRwX3Y2X3NlbmRfc2tiJyxcbisgICAgKSxcbisgICAgS3NmdE5hbWVkVmFyaWFudChcbisgICAgICAgICdpcHY0JyxcbisgICAgICAgIEZhbHNlLFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQsXG4rICAgICAgICAoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpLFxuKyAgICAgICAgJzEwLjAuMC4yJyxcbisgICAgICAgICd1ZHBfc2VuZF9za2InLFxuKyAgICApLFxuK10pXG4rZGVmIHRlc3RfdWRwKFxuKyAgICBpcHY2OiBib29sLFxuKyAgICBhZjogc29ja2V0LkFkZHJlc3NGYW1pbHksXG4rICAgIHNvY2tvcHRzOiB0dXBsZVtpbnQsIGludCwgaW50XSxcbisgICAgZGVzdGlwOiBzdHIsXG4rICAgIGZ1bmM6IHN0clxuKykgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24ndCBvdmVyZmxvd1xuKyAgICB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggY291bGQgaGFwcGVuIG9uIG9sZGVyXG4rICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbitcbisgICAgSVB2NDogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSwgYnV0IHRoZSBvdmVyZmxvdyBjb3VsZFxuKyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb25cbisgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuXG4rXG4rICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmVcbisgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZFxuKyAgICBkbWVzZyBtdXN0IGJlIGNsZWFuIG9mIHdhcm5pbmdzIG9uIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzLlxuKyAgICAnJydcbitcbisgICAgaWYgbm90IGlwdjY6XG4rICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCAoXG4rICAgICAgICBOZXROUygpIGFzIG5zLFxuKyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiArIDIwICogaXB2NiwgaXB2NiksXG4rICAgICAgICBOZXROU0VudGVyKG5zKSxcbisgICAgICAgIHNvY2tldC5zb2NrZXQoYWYsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZCxcbisgICAgKTpcbisgICAgICAgIGZkLnNldHNvY2tvcHQoKnNvY2tvcHRzKVxuKyAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBlOlxuKyAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKVxuKyAgICAgICAgIyBJUHY2OiBFTVNHU0laRSBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LlxuKyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlXG4rICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suXG4rICAgICAgICBpZiBlLmV4Y2VwdGlvbiBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSlcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpLCAnV0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZycpXG4rXG4rXG4rZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC1cdTAwM2UgTm9uZTpcbisgICAgJycnXG4rICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGVcbisgICAgaGF2aW5nIHRoZSBmaXggZm9yIG92ZXJzaXplZCBVRFAgcGFja2V0cy4gc2VuZHRvIG11c3Qgbm90IHJhaXNlIGFuIE9TRXJyb3JcbisgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuXG4rICAgICcnJ1xuK1xuKyAgICB3aXRoIChcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4rICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTg0LCBUcnVlKSxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxuKyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCxcbisgICAgKTpcbisgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpXG4rICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygnIUhISEgnLCAxMjM0LCAxMjM0LCAwLCAwKSArIGInICcgKiA2NTUyOFxuKyAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCdmZDAwOjoyJywgMCkpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBrc2Z0X3J1bihbXG4rICAgICAgICB0ZXN0X3VkcCxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbisgICAgXSlcbisgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjE3MjcyMjcxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjM5OTY5NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBGaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXM6IHdlJ3ZlIGdvdCBhIGZldyBhZGp1c3RtZW50cyByZWxhdGVkIHRvIE1UVSBjYWxjdWxhdGlvbnMuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIGBtaW5fdGAgb3IgYG1pbmAgY2FsbHMgY29uc3RyYWluaW5nIHZhbHVlcyAoTVRVIG9yIGBmcmFnc2l6ZWApIHRvIGVpdGhlciBgSVA2X01BWF9NVFVgIG9yIGBJUF9NQVhfTVRVYCBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgKElQdjYgcm91dGluZyksIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCBvdXRwdXQpLCBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiBvdXRwdXQpLCBhcyB3ZWxsIGFzIHNvbWUgdXBkYXRlcyB0byBzZWxmdGVzdHMuXG5cbk5vdywgd2hhdCBwcm9ibGVtIGFyZSB3ZSB0cnlpbmcgdG8gc29sdmU/IFRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyBpc3N1ZSB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLCBhbmQgZW5zdXJpbmcgdGhhdCBzZW5kaW5nIG92ZXJzaXplZCBVRFAgcGFja2V0cyBkb2Vzbid0IGNvcnJ1cHQgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGFwcGFyZW50bHkgY291bGQgYmUgYW4gaXNzdWUgb24gb2xkZXIga2VybmVscy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCByZWxhdGVkIHRvIGNvbnN0cmFpbmluZyBNVFUgYW5kIGZyYWdtZW50IHNpemVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0cyB3aGVyZSB0aGVzZSBsaW1pdHMgYXJlIGFwcGxpZWQuIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGBJUDZfTUFYX01UVWAgYW5kIGBJUF9NQVhfTVRVYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpbWl0cyBpbnRlcmFjdCB3aXRoIG90aGVyIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhbHVlcyBhcmUgdXNlZCBhZnRlciB0aGVzZSBgbWluYCBjYWxscy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoaXMgb25lOyB0aGVyZSBjb3VsZCBiZSBzdWJ0bGUgaXNzdWVzLiBEZXBlbmRpbmcgb24gd2hhdCBJIHNlZSBpbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCBpdCBjb3VsZCB2ZXJ5IHdlbGwgd2FycmFudCBhIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZpeCBpdHNlbGYgc2VlbXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBVRFAgbGVuZ3RoIG92ZXJmbG93IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjoxNy41NzI0MjA2NTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjgyMjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NQVhfTVRVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozMjA6XFx0aWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpIFxcdTAwM2UgSVBfTUFYX01UVSlcXG5uZXQvaXB2NC9lc3A0LmMtMzIxLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzQ5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozNTA6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTM1MS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtNDA4LVxcbm5ldC9pcHY0L2lnbXAuYzo0MDk6XFx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lnbXAuYy00MTAtXFx0d2hpbGUgKDEpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVxcdGV4dGhkcmxlbiA9ICFza2IgPyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVxcdTAwM2VmcmFnc2l6ZTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODUtXFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVxcdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFxcdTAwMjYgfjcpICsgZnJhZ2hlYWRlcmxlbjtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5OTE6XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA1LVxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNy1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVxcdFxcdGhsZW4gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3OlxcdFxcdG10dSA9IG1pbih0ZGV2LVxcdTAwM2VtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNTc9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcXHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2Mi1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXFx1MDAzZWhsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXFx0aWYgKGxpa2VseSghbXR1KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE0NjU6XFx0XFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXFx1MDAzZW10dSksIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNzE9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY2L2VzcDYuYzozODE6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3NTM9aW50IGlwNl90bmxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XFx0XFx0aWYgKG5ld19tdHUgXFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHVcXHRcXHQ9IEVUSF9NSU5fTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo3NDY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0PSBJUF9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHRcXHQ9IElGRl9OT0FSUDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVxcdGlmICgheHRmcy1cXHUwMDNlY2ZnLmRvbnRfZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcXHRcXHRyZXR1cm4geC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cXHRyZXR1cm4gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIG91dGVyX210dSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXFx0XFx0eC1cXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTU3OlxcdFxcdGlmICh4LVxcdTAwM2V0ZmNwYWQgXFx1MDAzZSBJUF9NQVhfTVRVKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkV4Y2Vzc2l2ZSBURkMgcGFkZGluZ1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjoxNy45MTkyNDg0OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzNjE3MjU3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQdjYgcm91dGluZyBpcyBoYW5kbGVkLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSB0aGluayBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4NC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcm91dGUgc3RydWN0dXJlcyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21lIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSByb3V0aW5nIHRhYmxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyByb3V0ZXMgYXJlIHJlcHJlc2VudGVkLlxuXG5UaGVuLCBJJ2xsIHN3aXRjaCBnZWFycyBhbmQgbG9vayBhdCB0aGUgYWN0dWFsIG91dHB1dCBwYXRoIOKAkyBob3cgdGhlIGtlcm5lbCAqdXNlcyogdGhvc2Ugcm91dGVzLiBNeSBndXQgc2F5cyB0byBjaGVjayBvdXQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGxpa2VseSBhcm91bmQgbGluZSAxNDMyLiBUaGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IElQdjYgcGFja2V0cyBhZnRlciB0aGUgcm91dGluZyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUga2VybmVsIHNlbGVjdHMgdGhlIG91dGdvaW5nIGludGVyZmFjZSwgc2V0cyB0aGUgbmV4dCBob3AsIGFuZCBoYW5kbGVzIGFueSBuZWNlc3NhcnkgZnJhZ21lbnRhdGlvbiBvciBoZWFkZXIgYWRqdXN0bWVudHMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMg4oCTIHRoZSByb3V0ZSBpbmZvcm1hdGlvbiBhbmQgdGhlIG91dHB1dCBwcm9jZXNzaW5nIOKAkyBhcmUgdGllZCB0b2dldGhlci4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyBwb2xpY3kgcm91dGluZyBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjMxLjI4MDk3ODQ3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFx0bmhhID0gYS1cXHUwMDNlZmliNl9uaDtcXG4gMzYxOlxcdFxcdG5oYiA9IGItXFx1MDAzZWZpYjZfbmg7XFxuIDM2MjpcXHRcXHRyZXR1cm4gbmhhLVxcdTAwM2VmaWJfbmhfZGV2ID09IG5oYi1cXHUwMDNlZmliX25oX2RldiBcXHUwMDI2XFx1MDAyNlxcbiAzNjM6XFx0XFx0ICAgICAgIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2bmhhLVxcdTAwM2VmaWJfbmhfZ3c2LCBcXHUwMDI2bmhiLVxcdTAwM2VmaWJfbmhfZ3c2KSBcXHUwMDI2XFx1MDAyNlxcbiAzNjQ6XFx0XFx0ICAgICAgICFsd3R1bm5lbF9jbXBfZW5jYXAobmhhLVxcdTAwM2VmaWJfbmhfbHdzLCBuaGItXFx1MDAzZWZpYl9uaF9sd3MpO1xcbiAzNjU6XFx0fVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBmb3J3YXJkaW5nKVxcbiAzNjk6XFx0e1xcbiAzNzA6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gMzcxOlxcdFxcdHVuc2lnbmVkIGludCBtdHU7XFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xcbiAzNzQ6XFx0XFx0XFx0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XFxuIDM3NTpcXHRcXHRcXHRpZiAobXR1KVxcbiAzNzY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM3NzpcXHRcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4gMzgwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzgxOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xcbiAzODI6XFx0XFx0aWYgKGlkZXYpXFxuIDM4MzpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLm10dTYpO1xcbiAzODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdG91dDpcXG4gMzg3OlxcdFxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXFx1MDAzZWx3dHN0YXRlLCBtdHUpO1xcbiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXFxuIDM5MzpcXHQgKlxcbiAzOTQ6XFx0ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjMxLjI4MTA1NTE0N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDI5ODMwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSVB2NiBPdXRwdXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgcGVyZm9ybWFuY2UsIHNwZWNpZmljYWxseSBJUHY2IG91dHB1dC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgZmlsZS4gSSd2ZSBnb3QgYSBodW5jaCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAxNDMyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBvdXRwdXQgcGF0aC4gSXQncyBvZnRlbiBpbiB0aG9zZSBkZWVwIGNvZGUgc2VnbWVudHMgd2hlcmUgeW91IHVuY292ZXIgdGhlIHJlYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgZGF0YSBoYW5kbGluZyBwcm9jZWR1cmVzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBwYW5zIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MjI6MzYuNzEwODkwMTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcbjE0MTE6XFx0XFx0XFx0bm9wdC1cXHUwMDNlaG9wb3B0ID0gaXA2X29wdF9kdXAob3B0LVxcdTAwM2Vob3BvcHQsIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4xNDEyOlxcdFxcdFxcdGlmIChvcHQtXFx1MDAzZWhvcG9wdCBcXHUwMDI2XFx1MDAyNiAhbm9wdC1cXHUwMDNlaG9wb3B0KVxcbjE0MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjE0MTQ6XFx0XFxuMTQxNTpcXHRcXHRcXHRub3B0LVxcdTAwM2VzcmNydCA9IGlwNl9ydGhkcl9kdXAob3B0LVxcdTAwM2VzcmNydCwgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbjE0MTY6XFx0XFx0XFx0aWYgKG9wdC1cXHUwMDNlc3JjcnQgXFx1MDAyNlxcdTAwMjYgIW5vcHQtXFx1MDAzZXNyY3J0KVxcbjE0MTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRcXHQvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi9cXG4xNDIwOlxcdFxcdH1cXG4xNDIxOlxcdFxcdHY2X2NvcmstXFx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXFx1MDAzZWhsaW1pdDtcXG4xNDIyOlxcdFxcdHY2X2NvcmstXFx1MDAzZXRjbGFzcyA9IGlwYzYtXFx1MDAzZXRjbGFzcztcXG4xNDIzOlxcdFxcdHY2X2NvcmstXFx1MDAzZWRvbnRmcmFnID0gaXBjNi1cXHUwMDNlZG9udGZyYWc7XFxuMTQyNDpcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5mbGFncyBcXHUwMDI2IERTVF9YRlJNX1RVTk5FTClcXG4xNDI1OlxcdFxcdFxcdG10dSA9IFJFQURfT05DRShucC1cXHUwMDNlcG10dWRpc2MpIFxcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xcbjE0MjY6XFx0XFx0XFx0ICAgICAgUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpIDogZHN0Nl9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbjE0Mjc6XFx0XFx0ZWxzZVxcbjE0Mjg6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgXFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XFxuMTQyOTpcXHRcXHRcXHRcXHRSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSkgOiBkc3Q2X210dSh4ZnJtX2RzdF9wYXRoKFxcdTAwMjZydC1cXHUwMDNlZHN0KSk7XFxuMTQzMDpcXHRcXG4xNDMxOlxcdFxcdGZyYWdfc2l6ZSA9IFJFQURfT05DRShucC1cXHUwMDNlZnJhZ19zaXplKTtcXG4xNDMyOlxcdFxcdGlmIChmcmFnX3NpemUgXFx1MDAyNlxcdTAwMjYgZnJhZ19zaXplIFxcdTAwM2MgbXR1KVxcbjE0MzM6XFx0XFx0XFx0bXR1ID0gZnJhZ19zaXplO1xcbjE0MzQ6XFx0XFxuMTQzNTpcXHRcXHRpZiAoc2tfaXNfdWRwKHNrKSlcXG4xNDM2OlxcdFxcdFxcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcXG4xNDM3OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuMTQzODpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cXHUwMDNlZ3NvX3NpemU7XFxuMTQzOTpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcXG4xNDQwOlxcdFxcdGNvcmstXFx1MDAzZWJhc2UubWFyayA9IGlwYzYtXFx1MDAzZXNvY2tjLm1hcms7XFxuMTQ0MTpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnByaW9yaXR5ID0gaXBjNi1cXHUwMDNlc29ja2MucHJpb3JpdHk7XFxuMTQ0MjpcXHRcXHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXFx1MDAyNmlwYzYtXFx1MDAzZXNvY2tjLCBcXHUwMDI2Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyk7XFxuMTQ0MzpcXHRcXHRpZiAoaXBjNi1cXHUwMDNlc29ja2MudHNmbGFncyBcXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xcbjE0NDQ6XFx0XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5mbGFncyB8PSBJUENPUktfVFNfT1BUX0lEO1xcbjE0NDU6XFx0XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50c19vcHRfaWQgPSBpcGM2LVxcdTAwM2Vzb2NrYy50c19vcHRfaWQ7XFxuMTQ0NjpcXHRcXHR9XFxuMTQ0NzpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmxlbmd0aCA9IDA7XFxuMTQ0ODpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnRyYW5zbWl0X3RpbWUgPSBpcGM2LVxcdTAwM2Vzb2NrYy50cmFuc21pdF90aW1lO1xcbjE0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjM2LjcxMTAwMjkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTczNzA0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSVB2NCBPdXRwdXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgb3V0cHV0LCBhbmQgSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgYSBncmFudWxhciBsZXZlbC5cIiBUaGUgZmlyc3QgcGxhY2UgdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgYG5ldC9pcHY0L2lwX291dHB1dC5jYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlcmUncyBzb21lIGNydWNpYWwgbG9naWMgYXJvdW5kIGxpbmUgMTMwMyDigJMgdGhhdCdzIHdoZXJlIEknZCBzdGFydCB0byBpbnZlc3RpZ2F0ZSBtb3JlIGNsb3NlbHkuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW1taW5nLCByb3V0aW5nIGRlY2lzaW9ucywgb3IgcXVldWUgbWFuYWdlbWVudCwgYnV0IHRoYXQncyB3aGVyZSBJJ2Qgc3VzcGVjdCB3ZSdkIGZpbmQgdGhlIGNvcmUgcHJvY2Vzc2luZyBvZiBvdXRib3VuZCBJUHY0IHBhY2tldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjo1OS42ODQ3MTAzOTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2c2stXFx1MDAzZXNrX3Rza2V5KTtcXG4xMjkxOlxcdFxcdHJldHVybiBlcnI7XFxuMTI5MjpcXHR9XFxuMTI5MzpcXHRcXG4xMjk0OlxcdHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuMTI5NTpcXHRcXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuMTI5NjpcXHR7XFxuMTI5NzpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcXG4xMjk4OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRydCA9ICpydHA7XFxuMTMwMTpcXHRcXHRpZiAodW5saWtlbHkoIXJ0KSlcXG4xMzAyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjEzMDM6XFx0XFxuMTMwNDpcXHRcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XFxuMTMwNTpcXHRcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbjEzMDY6XFx0XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xcbjEzMDc6XFx0XFxuMTMwODpcXHRcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4xMzA5OlxcdFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdC8qXFxuMTMxMjpcXHRcXHQgKiBzZXR1cCBmb3IgY29ya2luZy5cXG4xMzEzOlxcdFxcdCAqL1xcbjEzMTQ6XFx0XFx0b3B0ID0gaXBjLVxcdTAwM2VvcHQ7XFxuMTMxNTpcXHRcXHRpZiAob3B0KSB7XFxuMTMxNjpcXHRcXHRcXHRpZiAoIWNvcmstXFx1MDAzZW9wdCkge1xcbjEzMTc6XFx0XFx0XFx0XFx0Y29yay1cXHUwMDNlb3B0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgNDAsXFxuMTMxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbjEzMTk6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFjb3JrLVxcdTAwM2VvcHQpKVxcbjEzMjA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjEzMjE6XFx0XFx0XFx0fVxcbjEzMjI6XFx0XFx0XFx0bWVtY3B5KGNvcmstXFx1MDAzZW9wdCwgXFx1MDAyNm9wdC1cXHUwMDNlb3B0LCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgb3B0LVxcdTAwM2VvcHQub3B0bGVuKTtcXG4xMzIzOlxcdFxcdFxcdGNvcmstXFx1MDAzZWZsYWdzIHw9IElQQ09SS19PUFQ7XFxuMTMyNDpcXHRcXHRcXHRjb3JrLVxcdTAwM2VhZGRyID0gaXBjLVxcdTAwM2VhZGRyO1xcbjEzMjU6XFx0XFx0fVxcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRjb3JrLVxcdTAwM2Vnc29fc2l6ZSA9IGlwYy1cXHUwMDNlZ3NvX3NpemU7XFxuMTMyODpcXHRcXG4xMzI5OlxcdFxcdGNvcmstXFx1MDAzZWRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjo1OS42ODQ4MTM4NDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2MjAwODE3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBBbmFseXppbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlIGNsYW1wcyB0aGUgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBhbmQgZnJhZ21lbnQgc2l6ZSB0byB0aGUgbWF4aW11bSBkZWZpbmVkIHZhbHVlcyBmb3IgSVB2NCBhbmQgSVB2NiAoYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLCByZXNwZWN0aXZlbHkpIGR1cmluZyBjb3JrIHNldHVwIGFuZCByb3V0ZSBNVFUgY2FsY3VsYXRpb25zLiBUaGUgZ29hbD8gVG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIFVEUCBoZWFkZXIncyBsZW5ndGggZmllbGQsIHdoZW4gYSBkZXZpY2UgTVRVIGlzIHVudXN1YWxseSBsYXJnZSAodGhpbmsgYW55dGhpbmcgZXhjZWVkaW5nIDY1NTM1LCBsaWtlIHlvdSBtaWdodCBzZWUgd2l0aCBhIGR1bW15IGRldmljZSkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3BlLiBOb3RoaW5nIGhlcmUgdG91Y2hlcyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQgdmlhIGNvcHlfdG9fdXNlciwgTmV0bGluayBtZXNzYWdlcywgb3Igc29ja2V0IG9wdGlvbnMuIFdlJ3JlIG5vdCBzZW5kaW5nIGFueXRoaW5nIG5ldyBvdXQuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhlIGNvZGUgdXNlcyBpbml0aWFsaXplZCB2YXJpYWJsZXMuIE1UVSBhbmQgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGFyZSBleHBsaWNpdGx5IHNldCwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBBZ2Fpbiwgbm8uIFdlJ3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uXG40LiAgKipCb3VuZHMgQ2hlY2tzOioqIEluIGZhY3QsIGl0J3MgdGhlIG9wcG9zaXRlISBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tzLiBXZSBhcmUgKmRlY3JlYXNpbmcqIG9yIGNhcHBpbmcgdGhlIE1UVSB2YWx1ZXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3ZlcnNpemVkIHBhY2tldHMsIG5vdCBpbmNyZWFzaW5nIHRoZW0uXG5cblNvLCBhbSBJIHNlZWluZyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgXCJub1wiLiBUaGlzIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBzcGVjaWZpYyBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGluIFVEUCBsZW5ndGggY2FsY3VsYXRpb24gd2hlbiB0aGUgZGV2aWNlIE1UVSBleGNlZWRzIDY0S0IuIFRoaXMgcGF0Y2ggaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeC5cblxuVGhlcmVmb3JlLCBLTVNBTiBzaG91bGRuJ3QgYmUgY29uY2VybmVkIGhlcmUuIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIGFuZCB0aGUgdHlwaWNhbCBkZWJ1Z2dpbmcgYXNzZXJ0aW9ucyBzaG91bGQgaGFuZGxlIHRoZSBleHBlY3RlZCBpc3N1ZXMuIEtNU0FOJ3MgcHVycG9zZSwgaW4gdGhpcyBjYXNlLCBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgYmUgZ29vZCB0byBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSwgYW5kIGdldCByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyNiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMzoyMi4zMDQ4OTg0MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXFx1MDAzZSA2NTUzNSkuXFxuXFxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xhbXBzIHRoZSBNVFUgYW5kIGNvcmsgZnJhZ21lbnRhdGlvbiBzaXplIHRvIElQX01BWF9NVFUgKElQdjQpIGFuZCBJUDZfTUFYX01UVSAoSVB2NikgaW4gYGlwX3NldHVwX2NvcmtgLCBgaXA2X3NldHVwX2NvcmtgLCBhbmQgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBhbG9uZ3NpZGUgYWRkaW5nIGEgc2VsZnRlc3QuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyBvZiB0aGUgMTYtYml0IFVEUCBoZWFkZXIgbGVuZ3RoIGZpZWxkIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGggdmVyeSBsYXJnZSBNVFUgdmFsdWVzIChcXHUwMDNlIDY1NTM1KS5cXG5cXG5LTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSBidWZmZXJzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24vcGFkZGluZywgY2hhbmdlIHVzZXItc3BhY2UgY29weSBsb2dpYywgb3IgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ2xhbXBpbmcgTVRVIHZhbHVlcyBlbnN1cmVzIHBhY2tldCBsZW5ndGggYm91bmRzIHN0YXkgd2l0aGluIHByb3RvY29sIGxpbWl0cy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8xnqg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 09:00:28 +0000 UTC FinishedAt: 2026-09-02 09:23:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "a5e547fa-eaae-4102-9fd5-c0505cddc37c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_append_data", "ip_make_skb", "ip6_append_data", "ip6_make_skb", "ip6_mtu", "ip6_forward" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X210dSYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiAmIzQzOzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICYjNDM7MTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4gXG4gXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbiBcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbiBcbiBcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC0xNDMyLDYgJiM0MzsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4mIzQzO1x0aWYgKHNrX2lzX3VkcChzaykpXG4mIzQzO1x0XHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVx1MDAzZWdzb19zaXplO1xuIFx0Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTI1LDYgJiM0MzsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4mIzQzO1x0Y29ya19mcmFnc2l6ZS5weSBcXFxuIFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxuIFx0ZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFxcXG4gXHRlY21wX3JlaGFzaC5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWZkNjQzZDA3ZWMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxuQEAgLTAsMCAmIzQzOzEsMTg3IEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7JiMzOTsmIzM5OyYjMzk7VGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJiMzOTsmIzM5OyYjMzk7XG4mIzQzO1xuJiM0MztpbXBvcnQgZXJybm9cbiYjNDM7aW1wb3J0IGd6aXBcbiYjNDM7aW1wb3J0IG9zXG4mIzQzO2ltcG9ydCBzb2NrZXRcbiYjNDM7aW1wb3J0IHN0cnVjdFxuJiM0MztpbXBvcnQgc3VicHJvY2Vzc1xuJiM0Mztmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXG4mIzQzO1xuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKFxuJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCxcbiYjNDM7ICAgIEtzZnRTa2lwRXgsXG4mIzQzOyAgICBOZXROUyxcbiYjNDM7ICAgIE5ldE5TRW50ZXIsXG4mIzQzOyAgICBkZWZlcixcbiYjNDM7ICAgIGlwLFxuJiM0MzsgICAga3NmdF9lcSxcbiYjNDM7ICAgIGtzZnRfZXhpdCxcbiYjNDM7ICAgIGtzZnRfcHIsXG4mIzQzOyAgICBrc2Z0X3JhaXNlcyxcbiYjNDM7ICAgIGtzZnRfcnVuLFxuJiM0MzsgICAga3NmdF90cnVlLFxuJiM0MzsgICAga3NmdF92YXJpYW50cyxcbiYjNDM7KVxuJiM0MztcbiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTBcbiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzXG4mIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDJcbiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTRcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb246IHN0cikgLVx1MDAzZSBib29sIHwgTm9uZTpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuXG4mIzQzOyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIGNvbmZpZyBpcyBub3QgZm91bmQ7IG90aGVyd2lzZSByZXR1cm5zIFRydWUvRmFsc2VcbiYjNDM7ICAgIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9uIHZhbHVlIGluIHRoZSBjb25maWcuXG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7XG4mIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4mIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksXG4mIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSxcbiYjNDM7ICAgIF06XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBhc3NlcnRfZGVidWdfa2VybmVsKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7XG4mIzQzOyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspXG4mIzQzOyAgICBpZiByZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICBrc2Z0X3ByKFwmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcJiMzNDspXG4mIzQzOyAgICBlbGlmIG5vdCByZXM6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cdTAwM2UgYm9vbDpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIHByb2R1Y2VkIGEgV0FSTiBpbiBkbWVzZy5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6XG4mIzQzOyAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dCwgY2hlY2s9RmFsc2UpXG4mIzQzOyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwXG4mIzQzO1xuJiM0MztcbiYjNDM7QGNvbnRleHRtYW5hZ2VyXG4mIzQzO2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7XG4mIzQzOyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIGlwKCYjMzk7bGluayBhZGQgZHVtbXkgdHlwZSBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7ICAgIHdpdGggZGVmZXIoaXAsICYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpOlxuJiM0MzsgICAgICAgIGlwKGYmIzM5O2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fSYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKVxuJiM0MzsgICAgICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTtcbiYjNDM7ICAgICAgICBub2RhZCA9ICYjMzk7bm9kYWQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5O1xuJiM0MzsgICAgICAgIGxvY2FsID0gJiMzOTtmZDAwOjoxLzY0JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7MTAuMC4wLjEvMjQmIzM5O1xuJiM0MzsgICAgICAgIHJlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTtcbiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfSYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCYjMzk7LCBucz1ucylcbiYjNDM7ICAgICAgICB5aWVsZFxuJiM0MztcbiYjNDM7XG4mIzQzO0Brc2Z0X3ZhcmlhbnRzKFtcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXG4mIzQzOyAgICAgICAgJiMzOTtpcHY2JiMzOTssXG4mIzQzOyAgICAgICAgVHJ1ZSxcbiYjNDM7ICAgICAgICBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcbiYjNDM7ICAgICAgICAmIzM5O2ZkMDA6OjImIzM5OyxcbiYjNDM7ICAgICAgICAmIzM5O3VkcF92Nl9zZW5kX3NrYiYjMzk7LFxuJiM0MzsgICAgKSxcbiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoXG4mIzQzOyAgICAgICAgJiMzOTtpcHY0JiMzOTssXG4mIzQzOyAgICAgICAgRmFsc2UsXG4mIzQzOyAgICAgICAgc29ja2V0LkFGX0lORVQsXG4mIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSxcbiYjNDM7ICAgICAgICAmIzM5OzEwLjAuMC4yJiMzOTssXG4mIzQzOyAgICAgICAgJiMzOTt1ZHBfc2VuZF9za2ImIzM5OyxcbiYjNDM7ICAgICksXG4mIzQzO10pXG4mIzQzO2RlZiB0ZXN0X3VkcChcbiYjNDM7ICAgIGlwdjY6IGJvb2wsXG4mIzQzOyAgICBhZjogc29ja2V0LkFkZHJlc3NGYW1pbHksXG4mIzQzOyAgICBzb2Nrb3B0czogdHVwbGVbaW50LCBpbnQsIGludF0sXG4mIzQzOyAgICBkZXN0aXA6IHN0cixcbiYjNDM7ICAgIGZ1bmM6IHN0clxuJiM0MzspIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MzsgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24mIzM5O3Qgb3ZlcmZsb3dcbiYjNDM7ICAgIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSBVRFAgaGVhZGVyLCB3aGljaCBjb3VsZCBoYXBwZW4gb24gb2xkZXJcbiYjNDM7ICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbiYjNDM7XG4mIzQzOyAgICBJUHY0OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFLCBidXQgdGhlIG92ZXJmbG93IGNvdWxkXG4mIzQzOyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb25cbiYjNDM7ICAgIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzIHRoYXQgaGF2ZSB1ZHBfc2V0X2xlbl9zaG9ydCB3aXRoIHRoZSB3YXJuaW5nLlxuJiM0MztcbiYjNDM7ICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmVcbiYjNDM7ICAgIHNlbnQgY29ycnVwdGVkIG9uIG9sZGVyIGtlcm5lbHMuIFRlc3QgYm90aDogc2VuZHRvIG11c3QgcmV0dXJuIEVNU0dTSVpFLCBhbmRcbiYjNDM7ICAgIGRtZXNnIG11c3QgYmUgY2xlYW4gb2Ygd2FybmluZ3Mgb24gQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMuXG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7XG4mIzQzOyAgICBpZiBub3QgaXB2NjpcbiYjNDM7ICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIChcbiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLFxuJiM0MzsgICAgICAgIGR1bW15X25ldGRldihucywgNjU1NTYgJiM0MzsgMjAgKiBpcHY2LCBpcHY2KSxcbiYjNDM7ICAgICAgICBOZXROU0VudGVyKG5zKSxcbiYjNDM7ICAgICAgICBzb2NrZXQuc29ja2V0KGFmLCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQsXG4mIzQzOyAgICApOlxuJiM0MzsgICAgICAgIGZkLnNldHNvY2tvcHQoKnNvY2tvcHRzKVxuJiM0MzsgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoZGVzdGlwLCAxMjM0KSlcbiYjNDM7ICAgICAgICAjIElQdjY6IEVNU0dTSVpFIGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4mIzQzOyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlXG4mIzQzOyAgICAgICAgIyAgICAgICBXQVJOIGlzIHByaW50ZWQgLSBpZ25vcmUgaXQgYW5kIHJlbHkgb24gdGhlIGRtZXNnIGNoZWNrLlxuJiM0MzsgICAgICAgIGlmIGUuZXhjZXB0aW9uIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSlcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oZnVuYyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICAmIzM5OyYjMzk7JiMzOTtcbiYjNDM7ICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGVcbiYjNDM7ICAgIGhhdmluZyB0aGUgZml4IGZvciBvdmVyc2l6ZWQgVURQIHBhY2tldHMuIHNlbmR0byBtdXN0IG5vdCByYWlzZSBhbiBPU0Vycm9yXG4mIzQzOyAgICBleGNlcHRpb24gKHdoZW4gcmFpc2VkLCB0aGUgdGVzdCBmYWlscyBhdXRvbWF0aWNhbGx5KS5cbiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggKFxuJiM0MzsgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4mIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU4NCwgVHJ1ZSksXG4mIzQzOyAgICAgICAgTmV0TlNFbnRlcihucyksXG4mIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCxcbiYjNDM7ICAgICk6XG4mIzQzOyAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4mIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjhcbiYjNDM7ICAgICAgICBmZC5zZW5kdG8odWRwLCAoJiMzOTtmZDAwOjoyJiMzOTssIDApKVxuJiM0MztcbiYjNDM7XG4mIzQzO2lmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAga3NmdF9ydW4oW1xuJiM0MzsgICAgICAgIHRlc3RfdWRwLFxuJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbiYjNDM7ICAgIF0pXG4mIzQzOyAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X210dSYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwOToxNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NCw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwogCXJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xMzAzLDYgJiM0MzsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yaywKIAogCWNvcmstJmd0O2ZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID8KIAkJCSBkc3Q0X210dSgmYW1wO3J0LSZndDtkc3QpIDogUkVBRF9PTkNFKHJ0LSZndDtkc3QuZGV2LSZndDttdHUpOwomIzQzOwljb3JrLSZndDtmcmFnc2l6ZSA9IG1pbihjb3JrLSZndDtmcmFnc2l6ZSwgSVBfTUFYX01UVSk7CiAKIAlpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstJmd0O2ZyYWdzaXplKSkKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC0xNDMyLDYgJiM0MzsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yaywKIAlpZiAoZnJhZ19zaXplICZhbXA7JmFtcDsgZnJhZ19zaXplICZsdDsgbXR1KQogCQltdHUgPSBmcmFnX3NpemU7CiAKJiM0MzsJaWYgKHNrX2lzX3VkcChzaykpCiYjNDM7CQltdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7CiAJY29yay0mZ3Q7YmFzZS5mcmFnc2l6ZSA9IG10dTsKIAljb3JrLSZndDtiYXNlLmdzb19zaXplID0gaXBjNi0mZ3Q7Z3NvX3NpemU7CiAJY29yay0mZ3Q7YmFzZS50eF9mbGFncyA9IDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKaW5kZXggNTE3YzA5ZDYwYmVmNy4uM2VlMzM3OGY4YjI2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMjUsNiAmIzQzOzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJY21zZ19zb19tYXJrLnNoIFwKIAljbXNnX3NvX3ByaW9yaXR5LnNoIFwKIAljbXNnX3RpbWUuc2ggXAomIzQzOwljb3JrX2ZyYWdzaXplLnB5IFwKIAlkb3VibGVfdWRwX2VuY2FwLnNoIFwKIAlkcm9wX21vbml0b3JfdGVzdHMuc2ggXAogCWVjbXBfcmVoYXNoLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5CkBAIC0wLDAgJiM0MzsxLDE4NyBAQAomIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7JiMzOTsmIzM5OyYjMzk7VGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7aW1wb3J0IGVycm5vCiYjNDM7aW1wb3J0IGd6aXAKJiM0MztpbXBvcnQgb3MKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCBzdWJwcm9jZXNzCiYjNDM7ZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCAoCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQsCiYjNDM7ICAgIEtzZnRTa2lwRXgsCiYjNDM7ICAgIE5ldE5TLAomIzQzOyAgICBOZXROU0VudGVyLAomIzQzOyAgICBkZWZlciwKJiM0MzsgICAgaXAsCiYjNDM7ICAgIGtzZnRfZXEsCiYjNDM7ICAgIGtzZnRfZXhpdCwKJiM0MzsgICAga3NmdF9wciwKJiM0MzsgICAga3NmdF9yYWlzZXMsCiYjNDM7ICAgIGtzZnRfcnVuLAomIzQzOyAgICBrc2Z0X3RydWUsCiYjNDM7ICAgIGtzZnRfdmFyaWFudHMsCiYjNDM7KQomIzQzOwomIzQzO0lQX01UVV9ESVNDT1ZFUiA9IDEwCiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzCiYjNDM7SVBWNl9NVFVfRElTQ09WRVIgPSAyMwomIzQzO0lQVjZfUE1UVURJU0NfRE8gPSAyCiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X1RMVl9KVU1CTyA9IDE5NAomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbjogc3RyKSAtJmd0OyBib29sIHwgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIENoZWNrIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjb25maWcgb2YgdGhlIHJ1bm5pbmcga2VybmVsLgomIzQzOyAgICBSZXR1cm5zIE5vbmUgaWYgdGhlIGNvbmZpZyBpcyBub3QgZm91bmQ7IG90aGVyd2lzZSByZXR1cm5zIFRydWUvRmFsc2UKJiM0MzsgICAgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGNvbmZpZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFsKJiM0MzsgICAgICAgICgmIzM5Oy9wcm9jL2NvbmZpZy5neiYjMzk7LCBnemlwLm9wZW4pLAomIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSwKJiM0MzsgICAgXToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6CiYjNDM7ICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZiYjMzk7e29wdGlvbn09eSYjMzk7OgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQomIzQzOyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgU2tpcCB0aGUgdGVzdCBpZiBDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCYjMzk7Q09ORklHX0RFQlVHX05FVCYjMzk7KQomIzQzOyAgICBpZiByZXMgaXMgTm9uZToKJiM0MzsgICAgICAgIGtzZnRfcHIoJiMzNDtXQVJOOiBDYW4mIzM5O3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0JiMzNDspCiYjNDM7ICAgIGVsaWYgbm90IHJlczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYzogc3RyKSAtJmd0OyBib29sOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIHByb2R1Y2VkIGEgV0FSTiBpbiBkbWVzZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6CiYjNDM7ICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJiMzOTtncmVwJiMzOTssICYjMzk7LXEmIzM5OywgZiYjMzk7V0FSTklORzouKntmdW5jfSYjMzk7XSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSkKJiM0MzsgICAgcmV0dXJuIHJlcy5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMAomIzQzOwomIzQzOwomIzQzO0Bjb250ZXh0bWFuYWdlcgomIzQzO2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIENyZWF0ZSBhIGR1bW15IG5ldGRldiBpbnNpZGUgdGhlIGdpdmVuIG5hbWVzcGFjZSwgYW5kIHR1bmUgaXQgZm9yIHRoZSB0ZXN0LgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgaXAoJiMzOTtsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOyAgICB3aXRoIGRlZmVyKGlwLCAmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKToKJiM0MzsgICAgICAgIGlwKGYmIzM5O2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fSYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBzZXQgZHVtbXkgdXAmIzM5OywgbnM9bnMpCiYjNDM7ICAgICAgICBmbGFnID0gJiMzOTstNiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgICAgICBub2RhZCA9ICYjMzk7bm9kYWQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5OwomIzQzOyAgICAgICAgbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7CiYjNDM7ICAgICAgICByZW1vdGUgPSAmIzM5O2ZkMDA6OjImIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMiYjMzk7CiYjNDM7ICAgICAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfSYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGlwKGYmIzM5O3tmbGFnfSBuZWlnaCBhZGQge3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgeWllbGQKJiM0MzsKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhbCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoCiYjNDM7ICAgICAgICAmIzM5O2lwdjYmIzM5OywKJiM0MzsgICAgICAgIFRydWUsCiYjNDM7ICAgICAgICBzb2NrZXQuQUZfSU5FVDYsCiYjNDM7ICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pLAomIzQzOyAgICAgICAgJiMzOTtmZDAwOjoyJiMzOTssCiYjNDM7ICAgICAgICAmIzM5O3VkcF92Nl9zZW5kX3NrYiYjMzk7LAomIzQzOyAgICApLAomIzQzOyAgICBLc2Z0TmFtZWRWYXJpYW50KAomIzQzOyAgICAgICAgJiMzOTtpcHY0JiMzOTssCiYjNDM7ICAgICAgICBGYWxzZSwKJiM0MzsgICAgICAgIHNvY2tldC5BRl9JTkVULAomIzQzOyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSwKJiM0MzsgICAgICAgICYjMzk7MTAuMC4wLjImIzM5OywKJiM0MzsgICAgICAgICYjMzk7dWRwX3NlbmRfc2tiJiMzOTssCiYjNDM7ICAgICksCiYjNDM7XSkKJiM0MztkZWYgdGVzdF91ZHAoCiYjNDM7ICAgIGlwdjY6IGJvb2wsCiYjNDM7ICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSwKJiM0MzsgICAgc29ja29wdHM6IHR1cGxlW2ludCwgaW50LCBpbnRdLAomIzQzOyAgICBkZXN0aXA6IHN0ciwKJiM0MzsgICAgZnVuYzogc3RyCiYjNDM7KSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24mIzM5O3Qgb3ZlcmZsb3cKJiM0MzsgICAgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGNvdWxkIGhhcHBlbiBvbiBvbGRlcgomIzQzOyAgICBrZXJuZWxzIGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuCiYjNDM7CiYjNDM7ICAgIElQdjQ6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUsIGJ1dCB0aGUgb3ZlcmZsb3cgY291bGQKJiM0MzsgICAgaGFwcGVuIGJlZm9yZSBpdCBoYXBwZW5zLiBUaGUgb25seSB3YXkgdG8gdGVzdCB0aGlzIGlzIHRvIGNoZWNrIGRtZXNnIG9uCiYjNDM7ICAgIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzIHRoYXQgaGF2ZSB1ZHBfc2V0X2xlbl9zaG9ydCB3aXRoIHRoZSB3YXJuaW5nLgomIzQzOwomIzQzOyAgICBJUHY2OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFIG9uIGZpeGVkIGtlcm5lbHMsIGFuZCB3aWxsIGJlCiYjNDM7ICAgIHNlbnQgY29ycnVwdGVkIG9uIG9sZGVyIGtlcm5lbHMuIFRlc3QgYm90aDogc2VuZHRvIG11c3QgcmV0dXJuIEVNU0dTSVpFLCBhbmQKJiM0MzsgICAgZG1lc2cgbXVzdCBiZSBjbGVhbiBvZiB3YXJuaW5ncyBvbiBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIGlmIG5vdCBpcHY2OgomIzQzOyAgICAgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggKAomIzQzOyAgICAgICAgTmV0TlMoKSBhcyBucywKJiM0MzsgICAgICAgIGR1bW15X25ldGRldihucywgNjU1NTYgJiM0MzsgMjAgKiBpcHY2LCBpcHY2KSwKJiM0MzsgICAgICAgIE5ldE5TRW50ZXIobnMpLAomIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLAomIzQzOyAgICApOgomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdCgqc29ja29wdHMpCiYjNDM7ICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6CiYjNDM7ICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoZGVzdGlwLCAxMjM0KSkKJiM0MzsgICAgICAgICMgSVB2NjogRU1TR1NJWkUgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC4KJiM0MzsgICAgICAgICMgSVB2NDogRU1TR1NJWkUgaGFwcGVucyBvbiBib3RoIGZpeGVkIGFuZCB1bmZpeGVkIGtlcm5lbHMsIGFmdGVyIHRoZQomIzQzOyAgICAgICAgIyAgICAgICBXQVJOIGlzIHByaW50ZWQgLSBpZ25vcmUgaXQgYW5kIHJlbHkgb24gdGhlIGRtZXNnIGNoZWNrLgomIzQzOyAgICAgICAgaWYgZS5leGNlcHRpb24gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShlLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU1TR1NJWkUpCiYjNDM7CiYjNDM7ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbihmdW5jKSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBUZXN0IHRoYXQgc2VuZGluZyBVRFAganVtYm9ncmFtcyBvdmVyIGEgcmF3IElQdjYgc29ja2V0IHdvcmtzLCBkZXNwaXRlCiYjNDM7ICAgIGhhdmluZyB0aGUgZml4IGZvciBvdmVyc2l6ZWQgVURQIHBhY2tldHMuIHNlbmR0byBtdXN0IG5vdCByYWlzZSBhbiBPU0Vycm9yCiYjNDM7ICAgIGV4Y2VwdGlvbiAod2hlbiByYWlzZWQsIHRoZSB0ZXN0IGZhaWxzIGF1dG9tYXRpY2FsbHkpLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgd2l0aCAoCiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLAomIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU4NCwgVHJ1ZSksCiYjNDM7ICAgICAgICBOZXROU0VudGVyKG5zKSwKJiM0MzsgICAgICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5JUFBST1RPX1VEUCkgYXMgZmQsCiYjNDM7ICAgICk6CiYjNDM7ICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNikKJiM0MzsgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygmIzM5OyFISEhIJiMzOTssIDEyMzQsIDEyMzQsIDAsIDApICYjNDM7IGImIzM5OyAmIzM5OyAqIDY1NTI4CiYjNDM7ICAgICAgICBmZC5zZW5kdG8odWRwLCAoJiMzOTtmZDAwOjoyJiMzOTssIDApKQomIzQzOwomIzQzOwomIzQzO2lmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKJiM0MzsgICAga3NmdF9ydW4oWwomIzQzOyAgICAgICAgdGVzdF91ZHAsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjZfanVtYm8sCiYjNDM7ICAgIF0pCiYjNDM7ICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgYXJlYXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCBsb29rcyBsaWtlIGl0IGZvY3VzZXMgb24gTVRVIChNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0KSBjYWxjdWxhdGlvbnMgYW5kIHBvdGVudGlhbGx5IFVEUCBmcmFnbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIElQdjQgYW5kIElQdjYgbmV0d29yayBzdGFja3MuIEkgc2VlIGNoYW5nZXMgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLCB3aGljaCBhcmUgYWxsIGNvZGUgcGF0aHMgdGhhdCBtaWdodCBpbnZvbHZlIGNydWNpYWwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgY29uc2lkZXJhdGlvbnMuIFRoZSBpbmNsdXNpb24gb2YgYGNvcmtfZnJhZ3NpemUucHlgIGluIHRoZSBzZWxmdGVzdHMgcmFpc2VzIGEgcmVkIGZsYWcgaW4gYSBnb29kIHdheSAtLSB0aGV5JiMzOTtyZSB0ZXN0aW5nLCBidXQgYXJlIHRoZXkgdGVzdGluZyB0aGUgcmlnaHQgdGhpbmc/CgpCZWZvcmUgSSBqdW1wIHRvIGEgZnV6emluZyBkZWNpc2lvbiwgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgYmVpbmcgYWRkZWQuIEFyZSB0aGV5IGJ1ZyBmaXhlcz8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucz8gU2VjdXJpdHkgaGFyZGVuaW5nPyBJdCBjb3VsZCBiZSBhbGwgb2YgdGhvc2UgdGhpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgcmVhZC1maWxlIGFuZCBncmVwcGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBpbmZsdWVuY2UgZnJhZ21lbnRhdGlvbiBiZWhhdmlvciwgY291bGQgKmFic29sdXRlbHkqIGJlIHdvcnRoIGZ1enppbmcsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgY2xhbXBpbmcgZG93biBvbiB1bmV4cGVjdGVkIHNpemVzLCBvciBlbmFibGluZyBzb21lIG5ldyBuZXR3b3JrIHBhdGggb3IgZmVhdHVyZSB0aGF0IGNvdWxkIHJldmVhbCBuZXcgZnV6emluZyB2ZWN0b3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldHVwX2NvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjkzLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI5NDpzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cdFx0XHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTM2MD1pbnQgaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM3My1cdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzc0Olx0XHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBcdTAwMjZpbmV0LVx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM3NS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Mi1cdGNvcmstXHUwMDNlb3B0ID0gTlVMTDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE1NzM6XHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGMsIHJ0cCk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIElQIE91dHB1dCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgSVAgb3V0cHV0IHBhdGhzLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZS1leGFtaW5lIGhvdyBwYWNrZXRzIGdldCBidWlsdCBhbmQgc2VudCBhdCB0aGUgSVAgbGF5ZXIuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHJvdXRpbmVzLCBzbyBJJiMzOTttIHB1bGxpbmcgdXAgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBoZWFkZXIgY29uc3RydWN0aW9uLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIChlLmcuLCB0aGUgZGV2aWNlIGRyaXZlcnMpLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IuCgpUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIElQdjYgcm91dGluZywgSSYjMzk7bSBnb2luZyB0byBjaGVjayBvdXQgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSByb3V0aW5nIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG91dHB1dCBwYXRoLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByb3V0ZSBsb29rdXAgcHJvY2Vzcywgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLCBhbmQgYW55IGNhY2hlIG1lY2hhbmlzbXMgaW52b2x2ZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgY29tcGxleGl0eSBvZiBJUHY2IHJvdXRpbmcsIHBhcnRpY3VsYXJseSB3aXRoIG11bHRpcGxlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXggcm91dGluZyBwb2xpY2llcy4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIGFuZCB1cGRhdGUgbXkgbWVudGFsIG1vZGVsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzay1cdTAwM2Vza190c2tleSk7XG4xMjkxOlx0XHRyZXR1cm4gZXJyO1xuMTI5MjpcdH1cbjEyOTM6XHRcbjEyOTQ6XHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuMTI5NTpcdFx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcbjEyOTg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuMTI5OTpcdFxuMTMwMDpcdFx0cnQgPSAqcnRwO1xuMTMwMTpcdFx0aWYgKHVubGlrZWx5KCFydCkpXG4xMzAyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMwMzpcdFxuMTMwNDpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4xMzA1Olx0XHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuMTMwNjpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbjEzMDc6XHRcbjEzMDg6XHRcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4xMzA5Olx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4xMzEwOlx0XG4xMzExOlx0XHQvKlxuMTMxMjpcdFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXG4xMzEzOlx0XHQgKi9cbjEzMTQ6XHRcdG9wdCA9IGlwYy1cdTAwM2VvcHQ7XG4xMzE1Olx0XHRpZiAob3B0KSB7XG4xMzE2Olx0XHRcdGlmICghY29yay1cdTAwM2VvcHQpIHtcbjEzMTc6XHRcdFx0XHRjb3JrLVx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MCxcbjEzMTg6XHRcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTMxOTpcdFx0XHRcdGlmICh1bmxpa2VseSghY29yay1cdTAwM2VvcHQpKVxuMTMyMDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTMyMTpcdFx0XHR9XG4xMzIyOlx0XHRcdG1lbWNweShjb3JrLVx1MDAzZW9wdCwgXHUwMDI2b3B0LVx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyBvcHQtXHUwMDNlb3B0Lm9wdGxlbik7XG4xMzIzOlx0XHRcdGNvcmstXHUwMDNlZmxhZ3MgfD0gSVBDT1JLX09QVDtcbjEzMjQ6XHRcdFx0Y29yay1cdTAwM2VhZGRyID0gaXBjLVx1MDAzZWFkZHI7XG4xMzI1Olx0XHR9XG4xMzI2Olx0XG4xMzI3Olx0XHRjb3JrLVx1MDAzZWdzb19zaXplID0gaXBjLVx1MDAzZWdzb19zaXplO1xuMTMyODpcdFxuMTMyOTpcdFx0Y29yay1cdTAwM2Vkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBJUHY2IE91dHB1dCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBJUHY2IG91dHB1dCBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBoYW5kbGVkLiBJdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHBhY2tldHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIHNwZWNpZmljIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFzIHRvIGRvIHdpdGggYW4gaW50ZXJhY3Rpb24sIG9yIHNvbWUgcXVpcmsgaW4gdGhlIG91dHB1dCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDE1Olx0XHRcdG5vcHQtXHUwMDNlc3JjcnQgPSBpcDZfcnRoZHJfZHVwKG9wdC1cdTAwM2VzcmNydCwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xNDE2Olx0XHRcdGlmIChvcHQtXHUwMDNlc3JjcnQgXHUwMDI2XHUwMDI2ICFub3B0LVx1MDAzZXNyY3J0KVxuMTQxNzpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbjE0MTg6XHRcbjE0MTk6XHRcdFx0LyogbmVlZCBzb3VyY2UgYWRkcmVzcyBhYm92ZSBtaXlhemF3YSovXG4xNDIwOlx0XHR9XG4xNDIxOlx0XHR2Nl9jb3JrLVx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXHUwMDNlaGxpbWl0O1xuMTQyMjpcdFx0djZfY29yay1cdTAwM2V0Y2xhc3MgPSBpcGM2LVx1MDAzZXRjbGFzcztcbjE0MjM6XHRcdHY2X2NvcmstXHUwMDNlZG9udGZyYWcgPSBpcGM2LVx1MDAzZWRvbnRmcmFnO1xuMTQyNDpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5mbGFncyBcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxuMTQyNTpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI2Olx0XHRcdCAgICAgIFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuMTQyNzpcdFx0ZWxzZVxuMTQyODpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI5Olx0XHRcdFx0UkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXHUwMDI2cnQtXHUwMDNlZHN0KSk7XG4xNDMwOlx0XG4xNDMxOlx0XHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplKTtcbjE0MzI6XHRcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuMTQzMzpcdFx0XHRtdHUgPSBmcmFnX3NpemU7XG4xNDM0Olx0XG4xNDM1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbjE0MzY6XHRcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuMTQzNzpcdFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuMTQzODpcdFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbjE0Mzk6XHRcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG4xNDQwOlx0XHRjb3JrLVx1MDAzZWJhc2UubWFyayA9IGlwYzYtXHUwMDNlc29ja2MubWFyaztcbjE0NDE6XHRcdGNvcmstXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXHUwMDNlc29ja2MucHJpb3JpdHk7XG4xNDQyOlx0XHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXHUwMDI2aXBjNi1cdTAwM2Vzb2NrYywgXHUwMDI2Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzKTtcbjE0NDM6XHRcdGlmIChpcGM2LVx1MDAzZXNvY2tjLnRzZmxhZ3MgXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xuMTQ0NDpcdFx0XHRjb3JrLVx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcbjE0NDU6XHRcdFx0Y29yay1cdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXHUwMDNlc29ja2MudHNfb3B0X2lkO1xuMTQ0NjpcdFx0fVxuMTQ0NzpcdFx0Y29yay1cdTAwM2ViYXNlLmxlbmd0aCA9IDA7XG4xNDQ4Olx0XHRjb3JrLVx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcbjE0NDk6XHRcbjE0NTA6XHRcdHJldHVybiAwO1xuMTQ1MTpcdH1cbjE0NTI6XHRcbjE0NTM6XHRzdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbjE0NTQ6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxuMTQ1NTpcdFx0XHRcdCAgICAgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrX2Z1bGwsXG4xNDU2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbjE0NTc6XHRcdFx0XHQgICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LFxuMTQ1ODpcdFx0XHRcdFx0XHQgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksXG4xNDU5Olx0XHRcdFx0ICAgICB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLCBpbnQgdHJhbnNoZHJsZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgUm91dGluZyBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IgbGllcyB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbi4gVGhlIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAgZmlsZSBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3QgYHJ0Nl9pbmZvYCwgaXRzIGZpZWxkcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVnYXJkaW5nIHRoZSBzcGVjaWZpYyByb3V0ZSBzZWxlY3Rpb24gcHJvY2VzcywgdGhlIGhhbmRsaW5nIG9mIGRpZmZlcmVudCByb3V0ZSB0eXBlcyAoZS5nLiwgY29ubmVjdGVkLCBzdGF0aWMsIGR5bmFtaWMpLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIHNwZWNpYWwgY2FzZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJvdXRpbmcgZW5naW5lIG1ha2VzIGl0cyBkZWNpc2lvbnMgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IGZsYWdzIG9yIHNwZWNpZmljIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHJvdXRlcywgc2luY2UgdGhlc2Ugb2Z0ZW4gZHJpdmUgdGhlIG1vcmUgbnVhbmNlZCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdH1cbiAzNjY6XHRcbiAzNjc6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiAzNjg6XHRcdFx0XHRcdFx0XHQgICAgIGJvb2wgZm9yd2FyZGluZylcbiAzNjk6XHR7XG4gMzcwOlx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDM3MTpcdFx0dW5zaWduZWQgaW50IG10dTtcbiAzNzI6XHRcbiAzNzM6XHRcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xuIDM3NDpcdFx0XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiAzNzU6XHRcdFx0aWYgKG10dSlcbiAzNzY6XHRcdFx0XHRnb3RvIG91dDtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiAzODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODE6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuIDM4MjpcdFx0aWYgKGlkZXYpXG4gMzgzOlx0XHRcdG10dSA9IFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KTtcbiAzODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM4NTpcdFxuIDM4NjpcdG91dDpcbiAzODc6XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIDM5MDpcdH1cbiAzOTE6XHRcbiAzOTI6XHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4gMzkzOlx0ICpcbiAzOTQ6XHQgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiAzOTU6XHQgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbiAzOTY6XHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuIDM5NzpcdCAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiAzOTg6XHQgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbiAzOTk6XHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBWYWx1ZXMgaW4gSVAgYW5kIElQdjYqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBUaG9zZSBjb25zdGFudCBkZWZpbml0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBoYW5kbGluZyBmcmFnbWVudGF0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHdpdGggdGhlbS4gSSBjb3VsZCBsb29rIHRoZW0gdXAgaW4gdGhlIGRvY3VtZW50YXRpb24sIGJ1dCBJJiMzOTtsbCB0cnkgYSBxdWljayBncmVwIHRocm91Z2ggcmVsZXZhbnQgc291cmNlIGNvZGUgZmlyc3QuIEl0JiMzOTtzIG9mdGVuIGZhc3RlciB0byBzZWUgdGhlIHVzYWdlIGNvbnRleHQgYWxvbmdzaWRlIHRoZSBkZWZpbml0aW9uLiBBIHF1aWNrIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljay4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlx0MTAwXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXHRcdDY1NTM1XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVx0NDAwMFxuLS1cbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTIzLVx0c3NpLVx1MDAzZW5ldGRldi1cdTAwM2VtaW5fbXR1ID0gUEhPTkVUX01JTl9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XHRzc2ktXHUwMDNlbmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU4OC1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjU4OTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU5MC1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA4MzItXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcdFx0XHQgICAgdWxfcmlmLVx1MDAzZXJpZl9pbmRleCwgdWxfcmlmLVx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVx0bWx4c3dfcmVnX3JpdHJfbG9vcGJhY2tfcHJvdG9jb2xfc2V0KHJpdHJfcGwsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVx0ICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODYxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jPTE1OD1zdGF0aWMgdm9pZCBvdnBuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTY0MzAtXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcdHVuc2lnbmVkIGludCBwYWNrZXRfbGVuID0gdmktXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXHUwMDNlZGV2LVx1MDAzZW1heF9tdHU7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgcGFja2V0X2xlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaXAuaC01Mi0vKiBJUHY0IGRhdGFncmFtIGxlbmd0aCBpcyBzdG9yZWQgaW50byAxNmJpdCBmaWVsZCAodG90X2xlbikgKi9cbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcdDB4RkZGRlVcbmluY2x1ZGUvbGludXgvaXAuaC01NC1cbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xuaW5jbHVkZS9saW51eC9pcC5oOjU3Olx0aXBoLVx1MDAzZXRvdF9sZW4gPSBsZW4gXHUwMDNjPSBJUF9NQVhfTVRVID8gaHRvbnMobGVuKSA6IDA7XG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxuLS1cbmluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxuaW5jbHVkZS9uZXQvaXAuaDo1MDA6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUyOC1cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01NDUtXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVx1MDAzZW10dSksIElQX01BWF9NVFUpO1xuaW5jbHVkZS9uZXQvaXAuaC01NDctXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcdDY4XHRcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVx0MHhGRkZGVVx0XHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtNDItXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMxOS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzIwOlx0aWYgKGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zMjEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zNDktXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjQvZXNwNC5jOjM1MDpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2NC9lc3A0LmMtMzUxLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy00MDgtXG5uZXQvaXB2NC9pZ21wLmM6NDA5Olx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaWdtcC5jLTQxMC1cdHdoaWxlICgxKSB7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVx0ZXh0aGRybGVuID0gIXNrYiA/IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cdTAwM2VmcmFnc2l6ZTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4NS1cdHBhZ2VkID0gISFjb3JrLVx1MDAzZWdzb19zaXplO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFx1MDAyNiB+NykgJiM0MzsgZnJhZ2hlYWRlcmxlbjtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk5MTpcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDUtXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA3LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3Olx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE4LVx0fVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTMyOT1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgaXBfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cdGludCB0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVx0aWYgKHRiW0lGTEFfTVRVXSkge1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIxNDpcdFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjE1LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVx0aWYgKGxpa2VseSghbXR1KSlcbm5ldC9pcHY0L3JvdXRlLmM6MTQ2NTpcdFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM3MT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYzozODE6XHRpZiAobGVuIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlx0XHRpZiAobmV3X210dSBcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVx0ZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXHRkZXYtXHUwMDNlbWluX210dVx0XHQ9IEVUSF9NSU5fTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjc0NjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVBfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXHRkZXYtXHUwMDNlZmxhZ3MgXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cdGlmICgheHRmcy1cdTAwM2VjZmcuZG9udF9mcmFnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XHRcdHJldHVybiB4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVx0XHR4LVx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xubmV0L3hmcm0veGZybV91c2VyLmM6OTU3Olx0XHRpZiAoeC1cdTAwM2V0ZmNwYWQgXHUwMDNlIElQX01BWF9NVFUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0V4Y2Vzc2l2ZSBURkMgcGFkZGluZ1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDgxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBNVFUgY2xhbXBpbmcgYW5kIFVEUCBwYWNrZXQgc2l6ZXMgaW4gSVB2NCBhbmQgSVB2Ni4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2X3JvdXRlLmhgIChmb3IgTVRVKSwgYGlwX291dHB1dC5jYCAoSVB2NCBjb3JrIHNldHVwKSwgYW5kIGBpcDZfb3V0cHV0LmNgIChJUHY2IGNvcmsgc2V0dXApLgoKTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyAqd2h5KiB0aGlzIGNoYW5nZT8gVGhlIGNvbW1pdCBtZXNzYWdlIHBvaW50cyB0byBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3csIGVzcGVjaWFsbHkgaW4gb2xkZXIga2VybmVscywgd2l0aGluIGB1ZHBfc2VuZF9za2JgIGFuZCBgdWRwX3Y2X3NlbmRfc2tiYC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGNvbmZpcm1zIHRoZSBpbnRlbnQgaXMgdG8gbGltaXQgdGhlIHBhY2tldCBzaXplIHRvIHByZXZlbnQgdGhhdCBvdmVyZmxvdy4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY3JpdGljYWwgcGF0aHMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzICpXb3J0aEZ1enppbmcqPyBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGRvY3VtZW50YXRpb24sIGNvc21ldGljIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIExldCYjMzk7cyBsb29rOgoKKiAgIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLgoqICAgSXQmIzM5O3Mgbm90IHB1cmVseSBsb2dnaW5nIG9yIGRlY29yYXRpdmUuCiogICBJdCBtb2RpZmllcyAqbnVtZXJpYyBjb25zdGFudHMqIGluIGEgd2F5IHRoYXQgKmZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cqIGJ5IGNsYW1waW5nIE1UVXMgYW5kIHNpemVzIHRvIHByZXZlbnQgb3ZlcmZsb3cuCiogICBJdCYjMzk7cyBkZWZpbml0ZWx5ICpub3QqIGNvZGUgc3BlY2lmaWMgdG8gaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgY29tbW9ubHkgYXZhaWxhYmxlLCBhbmQgaXQgaXMgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZy4KKiAgIEl0IGlzIG1vZGlmeWluZyByZWFjaGFibGUsIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgbG9naWM7IFNwZWNpZmljYWxseSwgdGhlIFVEUCBvdXRwdXQgcGF0aHMgaW4gSVB2NCBhbmQgSVB2NiBhbmQgTVRVIGNhbGN1bGF0aW9ucy4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhIGhlcmU6IFRoaXMgaXMgYSBzb2xpZCAmIzM0O1llcyYjMzQ7LgoKTmV4dCwgaG93IGRvIHdlIHRhcmdldCBmdXp6aW5nIGVmZm9ydHMgbW9zdCBlZmZlY3RpdmVseT8gSXQmIzM5O3MgdGltZSB0byByZWZpbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBBUEkgZW50cnlwb2ludHMuIEkgbmVlZCB0byBmaW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgcmVxdWlyZXMgbWUgdG8gZG8gc29tZSBjb2RlIGFyY2hhZW9sb2d5IGFuZCBmaW5kIHRoZSBBUEkgZW50cnkgcG9pbnRzIHRoYXQgYXJlIHJlbGV2YW50LiBTbywgSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBhbmQgaWRlbnRpZnkgdGhvc2UgY2FsbGVycy4gVGhhdCB3aWxsIGd1aWRlIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldHVwX2NvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyOTQ6c3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTUtXHRcdFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTEzNjA9aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTM3NDpcdFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UsIGlwYywgcnRwKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXHRcdGlmIChlcnIpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTU1ND1zdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXHRjb3JrLVx1MDAzZW9wdCA9IE5VTEw7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgY29yaywgaXBjLCBydHApO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3NC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIElQNiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYGlwNl9zZXR1cF9jb3JrYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMsIG9wdGltaXphdGlvbnMsIG9yIGV2ZW4gZGVidWdnaW5nIGVmZm9ydHMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcHJvYmUgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgZnVydGhlciwgbGlrZWx5IGR1ZSB0byBhIHNwZWNpZmljIG5lZWQgdGhhdCB0aGUgbmFtZSBpbXBsaWVzIHN1Y2ggYXMgSVB2NiBzZXR1cCB0YXNrcy4gU28sIEkmIzM5O2xsIGFkZCB0aGF0IGZ1bmN0aW9uIHRvIG15IHNlYXJjaCBjcml0ZXJpYSBhbmQgZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9zZXR1cF9jb3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vdXRwdXQuYz0xMzUwPXN0YXRpYyB2b2lkIGlwNl9hcHBlbmRfZGF0YV9tdHUodW5zaWduZWQgaW50ICptdHUsXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzMtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTM3NDpzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXHRcdFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xODYwPWludCBpcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc3LVx0XHRkc3RfaG9sZChcdTAwMjZydC1cdTAwM2Vkc3QpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XHRcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBcdTAwMjZpbmV0LVx1MDAzZWNvcmssXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3OS1cdFx0XHRcdCAgICAgaXBjNiwgcnQpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yMDY2PXN0cnVjdCBza19idWZmICppcDZfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yMDg3LVx0Y29yay1cdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjIwODg6XHRlcnIgPSBpcDZfc2V0dXBfY29yayhzaywgY29yaywgaXBjNiwgcnQpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBJUHY2IE1UVSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgSVB2NCBhbmQgSVB2NiBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmcmFnbWVudGF0aW9uIGFuZCBNVFUgZGlzY292ZXJ5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyByZWxhdGVkIHRvICYjMzQ7Y29ya2luZywmIzM0OyB0aGF0IG9wdGltaXphdGlvbiB3aGVyZSB5b3UgZGVsYXkgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQgdW50aWwgeW91IGhhdmUgZW5vdWdoIGRhdGEgdG8gZmlsbCBhIGJ1ZmZlci4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgaXBfc2V0dXBfY29ya2AgZ2V0cyBpbnZva2VkIGJ5IGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcF9tYWtlX3NrYmAgaW4gdGhlIElQdjQgcGF0aCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIFNpbWlsYXJseSwgYGlwNl9zZXR1cF9jb3JrYCBpcyBjYWxsZWQgYnkgYGlwNl9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfbWFrZV9za2JgIGluIHRoZSBJUHY2IHBhdGguIFN0YW5kYXJkIHN0dWZmLCBzbyBmYXIuCgpOb3cgSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gSVB2Ni4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgcG90ZW50aWFsbHkgZm9yd2FyZGluZyBwYWNrZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTVRVIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbiB0byBidWlsZCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNTM9c3RhdGljIGlubGluZSBib29sIHJ0Nl9kdXBsaWNhdGVfbmV4dGhvcChzdHJ1Y3QgZmliNl9pbmZvICphLCBzdHJ1Y3QgZmliNl9pbmZvICpiKVxuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2Ni1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM2NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2OC1cdFx0XHRcdFx0XHQgICAgIGJvb2wgZm9yd2FyZGluZylcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTMtICpcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NDogKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5NS0gKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2Zcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTIxPWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjQtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjY1Olx0bXR1ID0gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIHRydWUpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2Ni1cdGlmIChtdHUgXHUwMDNjIElQVjZfTUlOX01UVSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyODg9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgdW5zaWduZWQgaW50IGlwNl9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjg5LXtcbm5ldC9pcHY2L3JvdXRlLmM6MzI5MDpcdHJldHVybiBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgZmFsc2UpO1xubmV0L2lwdjYvcm91dGUuYy0zMjkxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwOS1cdGNhc2UgTkZQUk9UT19JUFY2OlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMTA6XHRcdGZsb3dfdHVwbGUtXHUwMDNlbXR1ID0gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIHRydWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMTEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNQoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBNVFUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJUHY2IE1UVSBpcyBtYW5hZ2VkIGFuZCBJJiMzOTt2ZSBub3RpY2VkIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBpbnRlcmFjdGluZyBoZXJlOiBgaXA2X210dWAgY2FsbHMgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCBmYWxzZSlgIGFuZCBgaXA2X2ZvcndhcmRgIGNhbGxzIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSlgLiBTZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHNoYXJpbmcgc29tZSBjb3JlIGxvZ2ljLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBkdXBsaWNhdGlvbi4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnIHBpY3R1cmUgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCkkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Yga2V5IHN5bWJvbHMgSSB3YW50IHRvIHVuZGVyc3RhbmQgaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBvZiBjb3Vyc2UgYGlwNl9tdHVgIGFuZCBgaXA2X2ZvcndhcmRgIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZTsgYXJlIHRoZXkgaW50ZXJuYWwsIG9yIGFyZSB0aGV5IGdsb2JhbGx5IHZpc2libGU/IElmIHRoZXkmIzM5O3JlIGdsb2JhbCwgdGhhdCByZWFsbHkgY2hhbmdlcyB0aGUgZ2FtZSBpbiB0ZXJtcyBvZiBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgpUbyB2ZXJpZnkgdGhlaXIgc2NvcGUsIEkgbmVlZCB0byBjaGVjayB3aGVyZSB0aGV5JiMzOTtyZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYG5ldC9pcHY0L2lwX291dHB1dC5jYCwgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiB0aGV5JiMzOTtyZSBzdGF0aWMgb3Igbm90IGZyb20gdGhlIHNvdXJjZSBjb2RlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGV4dGVybmFsIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlwX2FwcGVuZF9kYXRhfEVYUE9SVF9TWU1CT0wuKmlwX21ha2Vfc2tifEVYUE9SVF9TWU1CT0wuKmlwNl9hcHBlbmRfZGF0YXxFWFBPUlRfU1lNQk9MLippcDZfbWFrZV9za2J8RVhQT1JUX1NZTUJPTC4qaXA2X210dSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTg2MD1pbnQgaXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5NC19XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTg5NTpFWFBPUlRfU1lNQk9MX0dQTChpcDZfYXBwZW5kX2RhdGEpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIElQdjQgT3V0cHV0KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBJUHY0IHBhY2tldHMgYXJlIGFzc2VtYmxlZCBhbmQgc2VudCBvdXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXBfbWFrZV9za2JgLiBUaGVzZSBhcmUgdGhlIGtleSBidWlsZGluZyBibG9ja3MuIGBpcF9hcHBlbmRfZGF0YWAgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgYXR0YWNoaW5nIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpLCBhbmQgZW5zdXJpbmcgdGhhdCB0aGlzIGlzIGRvbmUgc2FmZWx5LCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbi4gYGlwX21ha2Vfc2tiYCwgb24gdGhlIG90aGVyIGhhbmQsIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgU0tCIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBzdGFydHMgdGhlIElQdjQgaGVhZGVyIGFzc2VtYmx5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG91dHB1dCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBNVFUgY29uc2lkZXJhdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZyYWdtZW50YXRpb24gbG9naWMuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhYm92ZSBhbmQgYmVsb3cgdGhlbS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRcdGNvcmstXHUwMDNlb3B0ID0gTlVMTDtcbjEzOTE6XHRcdGRzdF9yZWxlYXNlKGNvcmstXHUwMDNlZHN0KTtcbjEzOTI6XHRcdGNvcmstXHUwMDNlZHN0ID0gTlVMTDtcbjEzOTM6XHR9XG4xMzk0Olx0XG4xMzk1Olx0LypcbjEzOTY6XHQgKlx0Q29tYmluZWQgYWxsIHBlbmRpbmcgSVAgZnJhZ21lbnRzIG9uIHRoZSBzb2NrZXQgYXMgb25lIElQIGRhdGFncmFtXG4xMzk3Olx0ICpcdGFuZCBwdXNoIHRoZW0gb3V0LlxuMTM5ODpcdCAqL1xuMTM5OTpcdHN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbjE0MDA6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4xNDAxOlx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4xNDAyOlx0XHRcdFx0ICAgICAgc3RydWN0IGluZXRfY29yayAqY29yaylcbjE0MDM6XHR7XG4xNDA0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wX3NrYjtcbjE0MDU6XHRcdHN0cnVjdCBza19idWZmICoqdGFpbF9za2I7XG4xNDA2Olx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4xNDA3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4xNDA4Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDtcbjE0MDk6XHRcdHN0cnVjdCBydGFibGUgKnJ0ID0gZHN0X3J0YWJsZShjb3JrLVx1MDAzZWRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY0L0lQdjYgT3V0cHV0IFBhdGggRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAgKElQdjQpIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAgKElQdjYpLiBJIGtub3cgdGhlc2UgYXJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhleSYjMzk7cmUgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHBvdGVudGlhbGx5IHVzZWQgYmV5b25kIHRoZSBkaXJlY3Qgc2NvcGUgb2YgdGhvc2UgZmlsZXMuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIHRoZSBjYWxsZXJzIG9mIHRob3NlIGZ1bmN0aW9ucyBmcm9tIFVEUCwgYW5kIFJBVy4gSSBrbm93IHRoYXQgYHVkcF9zZW5kbXNnYCBhbmQgYHVkcHY2X3NlbmRtc2dgIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBVRFAsIGFuZCB0aGV5IGluZGVlZCBjYWxsIHRoZSBJUHY0L0lQdjYgZnVuY3Rpb25zLiBUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgd2hpbGUgYHVkcF9zZW5kbXNnYCBhbmQgYHVkcHY2X3NlbmRtc2dgIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbCAmIzM0O2hvdCBwYXRocyYjMzQ7LCB0aGUgYGlwX2FwcGVuZF9kYXRhYCBhbmQgYGlwX21ha2Vfc2tiYCBhcmUgc3BlY2lmaWMgdG8gY29ya2luZy9vdXRwdXQgcGF0aC4gU28sIEkgaGF2ZSB0byBtZW50YWxseSBzZXBhcmF0ZSB0aG9zZSBwYXRocy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGFib3V0IGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYD8gQXJlIHRoZXkgc3RhdGljLCBhbmQgaW5kZWVkIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKC4uLilgIGFuZCBgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayguLi4pYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgc2V0dXAgZnVuY3Rpb25zLiBHb29kLgoKSSYjMzk7bSBhbHNvIG5vdGluZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIHdoaWNoIGlzIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSXRzIGNhbGxlcnMgYXJlIGBpcDZfbXR1YCAoaW4gYG5ldC9pcHY2L3JvdXRlLmNgKSwgYGlwNl9mb3J3YXJkYCAoaW4gYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2ApLCBldGMuIFRoaXMgaXMgdXNlZnVsIGZvciBNVFUtcmVsYXRlZCBhZGp1c3RtZW50cywgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW5saW5lIGltcGxpZXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgZm9yd2FyZGluZyBwYXRoLCB0b28uCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiBJUHY0IGFuZCBJUHY2IGZlYXR1cmVzLiBBbmQgYWxzbyB3aGVyZSBgbmV0L2lwdjQvaXBfb3V0cHV0LmNgIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCBhcmUgYnVpbHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkIGFuZCB3aGljaCBtb2R1bGVzIGRlcGVuZCBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfb3V0cHV0Lm98aXA2X291dHB1dC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTktXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxubmV0L2lwdjYvTWFrZWZpbGU6ODppcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvcmUgSVB2NCBhbmQgSVB2Ni1yZWxhdGVkIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHByb3RvY29sIHN0YWNrcyBhcmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIEV4YW1pbmluZyB0aGVzZSBmaWxlcyB3aWxsIGxpa2VseSBwcm92aWRlIG1lIHdpdGggaW5zaWdodHMgaW50byB0aGUgdmFyaW91cyBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gSVAgbmV0d29ya2luZy4gS25vd2luZyB0aGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVHxjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cbm5ldC9pcHY0L0tjb25maWc6MzM5OmNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzUzLVxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5My1cbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MDMtXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXG5uZXQvaXB2NC9LY29uZmlnLTQwNS1cdGludCBcJiMzNDtJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MTMtXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDE4LVxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQyMC1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDM0LVxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDM2LVx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzOC1cbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NDYtXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDgtXHR0cmlzdGF0ZSBcJiMzNDtSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDU0LVxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cdGJvb2wgXCYjMzQ7SU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy00Ni1cbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDAtXG5uZXQvaXB2Ni9LY29uZmlnOjE0MTpjb25maWcgSU5FVDZfWEZSTV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTQyLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cbm5ldC9pcHY2L0tjb25maWc6MTQ2OmNvbmZpZyBJTkVUNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTQ3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDM4CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIC0gSVAgU3RhY2sgQ29yZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGdvbmUgdGhyb3VnaCB0aGUga2V5IHN0ZXBzIGZvciB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHRoZSBtYWluIGNvbmZpZyBvcHRpb25zIGRyaXZpbmcgdGhpcywgYW5kIEkgYnJpZWZseSBzY2FubmVkIGZvciBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYnV0IHRob3NlIGFyZSB0aGUgcHJpbWFyeSB0d28uCgpOZXh0LCBJIHJlLWNvbmZpcm1lZCB0aGUgYEZvY3VzU3ltYm9sc2AsIHdoaWNoIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmc6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAsIGBpcDZfYXBwZW5kX2RhdGFgLCBgaXA2X21ha2Vfc2tiYCwgYGlwNl9tdHVgLCBhbmQgYGlwNl9mb3J3YXJkYC4KCkkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIHRoZXNlIGBGb2N1c1N5bWJvbHNgIGhhZCBhbnkgcmVsYXRlZCBzeW1ib2xzLiBJIGNoZWNrZWQgaG93IGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBhcmUgY2FsbGVkLCB3aGljaCB3ZXJlIGluZGVlZCBjYWxsZWQgYnkgdGhvc2UgYEZvY3VzU3ltYm9sc2AsIGFzIGV4cGVjdGVkLiBJIGRpZCBhIHRob3JvdWdoIGdyZXAgYW5kIGNyb3NzLXJlZmVyZW5jZSwgc28gSSBjYW4gY29uZmlkZW50bHkgc2F5IEkmIzM5O3ZlIGNvdmVyZWQgYWxsIGNhbGwgc2l0ZXMuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3QsIGBFbmFibGVDb25maWdzYCBhcmUgYElORVRgIGFuZCBgSVBWNmAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbXR1JiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbXR1JiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg0LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdAogCXJjdV9yZWFkX3VubG9jaygpOwogCiBvdXQ6CiYjNDM7CW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7CiYjNDM7CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCiAJY29yay0mZ3Q7ZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgPwogCQkJIGRzdDRfbXR1KCZhbXA7cnQtJmd0O2RzdCkgOiBSRUFEX09OQ0UocnQtJmd0O2RzdC5kZXYtJmd0O210dSk7CiYjNDM7CWNvcmstJmd0O2ZyYWdzaXplID0gbWluKGNvcmstJmd0O2ZyYWdzaXplLCBJUF9NQVhfTVRVKTsKIAogCWlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay0mZ3Q7ZnJhZ3NpemUpKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAogCWlmIChmcmFnX3NpemUgJmFtcDsmYW1wOyBmcmFnX3NpemUgJmx0OyBtdHUpCiAJCW10dSA9IGZyYWdfc2l6ZTsKIAomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCW10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTsKIAljb3JrLSZndDtiYXNlLmZyYWdzaXplID0gbXR1OwogCWNvcmstJmd0O2Jhc2UuZ3NvX3NpemUgPSBpcGM2LSZndDtnc29fc2l6ZTsKIAljb3JrLSZndDtiYXNlLnR4X2ZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQppbmRleCA1MTdjMDlkNjBiZWY3Li4zZWUzMzc4ZjhiMjZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBURVNUX1BST0dTIDo9IFwKIAljbXNnX3NvX21hcmsuc2ggXAogCWNtc2dfc29fcHJpb3JpdHkuc2ggXAogCWNtc2dfdGltZS5zaCBcCiYjNDM7CWNvcmtfZnJhZ3NpemUucHkgXAogCWRvdWJsZV91ZHBfZW5jYXAuc2ggXAogCWRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcCiAJZWNtcF9yZWhhc2guc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi43YWZkNjQzZDA3ZWMyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKQEAgLTAsMCAmIzQzOzEsMTg3IEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsmIzM5OyYjMzk7JiMzOTtUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4mIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MztpbXBvcnQgZXJybm8KJiM0MztpbXBvcnQgZ3ppcAomIzQzO2ltcG9ydCBvcwomIzQzO2ltcG9ydCBzb2NrZXQKJiM0MztpbXBvcnQgc3RydWN0CiYjNDM7aW1wb3J0IHN1YnByb2Nlc3MKJiM0Mztmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiYjNDM7CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0ICgKJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCwKJiM0MzsgICAgS3NmdFNraXBFeCwKJiM0MzsgICAgTmV0TlMsCiYjNDM7ICAgIE5ldE5TRW50ZXIsCiYjNDM7ICAgIGRlZmVyLAomIzQzOyAgICBpcCwKJiM0MzsgICAga3NmdF9lcSwKJiM0MzsgICAga3NmdF9leGl0LAomIzQzOyAgICBrc2Z0X3ByLAomIzQzOyAgICBrc2Z0X3JhaXNlcywKJiM0MzsgICAga3NmdF9ydW4sCiYjNDM7ICAgIGtzZnRfdHJ1ZSwKJiM0MzsgICAga3NmdF92YXJpYW50cywKJiM0MzspCiYjNDM7CiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTAKJiM0MztJUF9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X01UVV9ESVNDT1ZFUiA9IDIzCiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDIKJiM0MztJUFY2X1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfVExWX0pVTUJPID0gMTk0CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uOiBzdHIpIC0mZ3Q7IGJvb2wgfCBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuCiYjNDM7ICAgIFJldHVybnMgTm9uZSBpZiB0aGUgY29uZmlnIGlzIG5vdCBmb3VuZDsgb3RoZXJ3aXNlIHJldHVybnMgVHJ1ZS9GYWxzZQomIzQzOyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gWwomIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksCiYjNDM7ICAgICAgICAoZiYjMzk7L2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9JiMzOTssIG9wZW4pLAomIzQzOyAgICBdOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAmIzM5O3J0JiMzOTspIGFzIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy4KJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7CiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspCiYjNDM7ICAgIGlmIHJlcyBpcyBOb25lOgomIzQzOyAgICAgICAga3NmdF9wcigmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3QmIzM0OykKJiM0MzsgICAgZWxpZiBub3QgcmVzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC0mZ3Q7IGJvb2w6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBDaGVjayBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcHJvZHVjZWQgYSBXQVJOIGluIGRtZXNnLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFsmIzM5O2RtZXNnJiMzOTtdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzoKJiM0MzsgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MucnVuKFsmIzM5O2dyZXAmIzM5OywgJiMzOTstcSYjMzk7LCBmJiMzOTtXQVJOSU5HOi4qe2Z1bmN9JiMzOTtdLCBzdGRpbj1kbWVzZy5zdGRvdXQsIGNoZWNrPUZhbHNlKQomIzQzOyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwCiYjNDM7CiYjNDM7CiYjNDM7QGNvbnRleHRtYW5hZ2VyCiYjNDM7ZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsgICAgQ3JlYXRlIGEgZHVtbXkgbmV0ZGV2IGluc2lkZSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLCBhbmQgdHVuZSBpdCBmb3IgdGhlIHRlc3QuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICBpcCgmIzM5O2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7ICAgIHdpdGggZGVmZXIoaXAsICYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpOgomIzQzOyAgICAgICAgaXAoZiYjMzk7bGluayBzZXQgZHVtbXkgbXR1IHttdHV9JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIHNldCBkdW1teSB1cCYjMzk7LCBucz1ucykKJiM0MzsgICAgICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgICAgIG5vZGFkID0gJiMzOTtub2RhZCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgICAgICBsb2NhbCA9ICYjMzk7ZmQwMDo6MS82NCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4xLzI0JiMzOTsKJiM0MzsgICAgICAgIHJlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTsKJiM0MzsgICAgICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7bG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JiMzOTssIG5zPW5zKQomIzQzOyAgICAgICAgaXAoZiYjMzk7e2ZsYWd9IG5laWdoIGFkZCB7cmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQmIzM5OywgbnM9bnMpCiYjNDM7ICAgICAgICB5aWVsZAomIzQzOwomIzQzOwomIzQzO0Brc2Z0X3ZhcmlhbnRzKFsKJiM0MzsgICAgS3NmdE5hbWVkVmFyaWFudCgKJiM0MzsgICAgICAgICYjMzk7aXB2NiYjMzk7LAomIzQzOyAgICAgICAgVHJ1ZSwKJiM0MzsgICAgICAgIHNvY2tldC5BRl9JTkVUNiwKJiM0MzsgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETyksCiYjNDM7ICAgICAgICAmIzM5O2ZkMDA6OjImIzM5OywKJiM0MzsgICAgICAgICYjMzk7dWRwX3Y2X3NlbmRfc2tiJiMzOTssCiYjNDM7ICAgICksCiYjNDM7ICAgIEtzZnROYW1lZFZhcmlhbnQoCiYjNDM7ICAgICAgICAmIzM5O2lwdjQmIzM5OywKJiM0MzsgICAgICAgIEZhbHNlLAomIzQzOyAgICAgICAgc29ja2V0LkFGX0lORVQsCiYjNDM7ICAgICAgICAoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpLAomIzQzOyAgICAgICAgJiMzOTsxMC4wLjAuMiYjMzk7LAomIzQzOyAgICAgICAgJiMzOTt1ZHBfc2VuZF9za2ImIzM5OywKJiM0MzsgICAgKSwKJiM0MztdKQomIzQzO2RlZiB0ZXN0X3VkcCgKJiM0MzsgICAgaXB2NjogYm9vbCwKJiM0MzsgICAgYWY6IHNvY2tldC5BZGRyZXNzRmFtaWx5LAomIzQzOyAgICBzb2Nrb3B0czogdHVwbGVbaW50LCBpbnQsIGludF0sCiYjNDM7ICAgIGRlc3RpcDogc3RyLAomIzQzOyAgICBmdW5jOiBzdHIKJiM0MzspIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOyAgICBUZXN0IHRoYXQgc2VuZGluZyBhbiBvdmVyc2l6ZWQgVURQIHBhY2tldCBvdmVyIGEgVURQIHNvY2tldCBkb2VzbiYjMzk7dCBvdmVyZmxvdwomIzQzOyAgICB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggY291bGQgaGFwcGVuIG9uIG9sZGVyCiYjNDM7ICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4KJiM0MzsKJiM0MzsgICAgSVB2NDogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSwgYnV0IHRoZSBvdmVyZmxvdyBjb3VsZAomIzQzOyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb24KJiM0MzsgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuCiYjNDM7CiYjNDM7ICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmUKJiM0MzsgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZAomIzQzOyAgICBkbWVzZyBtdXN0IGJlIGNsZWFuIG9mIHdhcm5pbmdzIG9uIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzLgomIzQzOyAgICAmIzM5OyYjMzk7JiMzOTsKJiM0MzsKJiM0MzsgICAgaWYgbm90IGlwdjY6CiYjNDM7ICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCAoCiYjNDM7ICAgICAgICBOZXROUygpIGFzIG5zLAomIzQzOyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiAmIzQzOyAyMCAqIGlwdjYsIGlwdjYpLAomIzQzOyAgICAgICAgTmV0TlNFbnRlcihucyksCiYjNDM7ICAgICAgICBzb2NrZXQuc29ja2V0KGFmLCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQsCiYjNDM7ICAgICk6CiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KCpzb2Nrb3B0cykKJiM0MzsgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgZToKJiM0MzsgICAgICAgICAgICBmZC5zZW5kdG8oYiYjMzk7ICYjMzk7ICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKQomIzQzOyAgICAgICAgIyBJUHY2OiBFTVNHU0laRSBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LgomIzQzOyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlCiYjNDM7ICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suCiYjNDM7ICAgICAgICBpZiBlLmV4Y2VwdGlvbiBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSkKJiM0MzsKJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzOTsmIzM5OyYjMzk7CiYjNDM7ICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGUKJiM0MzsgICAgaGF2aW5nIHRoZSBmaXggZm9yIG92ZXJzaXplZCBVRFAgcGFja2V0cy4gc2VuZHRvIG11c3Qgbm90IHJhaXNlIGFuIE9TRXJyb3IKJiM0MzsgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuCiYjNDM7ICAgICYjMzk7JiMzOTsmIzM5OwomIzQzOwomIzQzOyAgICB3aXRoICgKJiM0MzsgICAgICAgIE5ldE5TKCkgYXMgbnMsCiYjNDM7ICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTg0LCBUcnVlKSwKJiM0MzsgICAgICAgIE5ldE5TRW50ZXIobnMpLAomIzQzOyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCwKJiM0MzsgICAgKToKJiM0MzsgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSSYjMzk7LCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpCiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpCiYjNDM7ICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KQomIzQzOyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSkKJiM0MzsgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjgKJiM0MzsgICAgICAgIGZkLnNlbmR0byh1ZHAsICgmIzM5O2ZkMDA6OjImIzM5OywgMCkpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBrc2Z0X3J1bihbCiYjNDM7ICAgICAgICB0ZXN0X3VkcCwKJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibywKJiM0MzsgICAgXSkKJiM0MzsgICAga3NmdF9leGl0KCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFjdHVhbCBjaGFuZ2VzOiB3ZSYjMzk7dmUgZ290IGEgZmV3IGFkanVzdG1lbnRzIHJlbGF0ZWQgdG8gTVRVIGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIGBtaW5fdGAgb3IgYG1pbmAgY2FsbHMgY29uc3RyYWluaW5nIHZhbHVlcyAoTVRVIG9yIGBmcmFnc2l6ZWApIHRvIGVpdGhlciBgSVA2X01BWF9NVFVgIG9yIGBJUF9NQVhfTVRVYCBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgKElQdjYgcm91dGluZyksIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCBvdXRwdXQpLCBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiBvdXRwdXQpLCBhcyB3ZWxsIGFzIHNvbWUgdXBkYXRlcyB0byBzZWxmdGVzdHMuCgpOb3csIHdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGB1ZHBfc2VuZF9za2JgIGFuZCBgdWRwX3Y2X3NlbmRfc2tiYCwgYW5kIGVuc3VyaW5nIHRoYXQgc2VuZGluZyBvdmVyc2l6ZWQgVURQIHBhY2tldHMgZG9lc24mIzM5O3QgY29ycnVwdCB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggYXBwYXJlbnRseSBjb3VsZCBiZSBhbiBpc3N1ZSBvbiBvbGRlciBrZXJuZWxzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCByZWxhdGVkIHRvIGNvbnN0cmFpbmluZyBNVFUgYW5kIGZyYWdtZW50IHNpemVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0cyB3aGVyZSB0aGVzZSBsaW1pdHMgYXJlIGFwcGxpZWQuIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGBJUDZfTUFYX01UVWAgYW5kIGBJUF9NQVhfTVRVYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpbWl0cyBpbnRlcmFjdCB3aXRoIG90aGVyIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YWx1ZXMgYXJlIHVzZWQgYWZ0ZXIgdGhlc2UgYG1pbmAgY2FsbHMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGlzIG9uZTsgdGhlcmUgY291bGQgYmUgc3VidGxlIGlzc3Vlcy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgaW4gdGhvc2UgY29kZSBzbmlwcGV0cywgaXQgY291bGQgdmVyeSB3ZWxsIHdhcnJhbnQgYSBmdXp6aW5nIHNlc3Npb24uIFRoZSBmaXggaXRzZWxmIHNlZW1zIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIGEgVURQIGxlbmd0aCBvdmVyZmxvdyBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NQVhfTVRVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDQuYzozMjA6XHRpZiAobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjQvZXNwNC5jLTMyMS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTM0OS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzUwOlx0aWYgKGxlbiBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zNTEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTM5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTQwOC1cbm5ldC9pcHY0L2lnbXAuYzo0MDk6XHRzaXplID0gbWluKG10dSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pZ21wLmMtNDEwLVx0d2hpbGUgKDEpIHtcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODMtXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTg0Olx0bXR1ID0gY29yay1cdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVx1MDAzZWZyYWdzaXplO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTg1LVx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXHUwMDI2IH43KSAmIzQzOyBmcmFnaGVhZGVybGVuO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTkxOlx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5Mi1cbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNS1cdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzA2Olx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDctXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVx0XHRobGVuID0gdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gJiM0MzsgdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb207XG5uZXQvaXB2NC9pcF90dW5uZWwuYzozMTc6XHRcdG10dSA9IG1pbih0ZGV2LVx1MDAzZW10dSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMTgtXHR9XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNTAtXHRkZXYtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzUxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUyLVx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYwLVx0aW50IHRfaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcdGludCBtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjItXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTE4Mj1pbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXHRpZiAodGJbSUZMQV9NVFVdKSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjE0Olx0XHR1bnNpZ25lZCBpbnQgbWF4ID0gSVBfTUFYX01UVSAtIChudC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTUtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNDQ1PXUzMiBpcF9tdHVfZnJvbV9maWJfcmVzdWx0KHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIF9fYmUzMiBkYWRkcilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXHRpZiAobGlrZWx5KCFtdHUpKVxubmV0L2lwdjQvcm91dGUuYzoxNDY1Olx0XHRtdHUgPSBtaW4oUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MzcxPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zODAtXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjYvZXNwNi5jOjM4MTpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2Ni9lc3A2LmMtMzgyLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzUzPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjktXHR9IGVsc2Uge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XHRcdGlmIChuZXdfbXR1IFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHRfaGxlbilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzcxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz05MTE9c3RhdGljIHZvaWQgdnRpNl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXHRkZXYtXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz03Mzk9c3RhdGljIHZvaWQgeGZybWlfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cdGRldi1cdTAwM2VtaW5fbXR1XHRcdD0gRVRIX01JTl9NVFU7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6NzQ2Olx0ZGV2LVx1MDAzZW1heF9tdHVcdFx0PSBJUF9NQVhfTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0Ny1cdGRldi1cdTAwM2VmbGFncyBcdFx0PSBJRkZfTk9BUlA7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVx0aWYgKCF4dGZzLVx1MDAzZWNmZy5kb250X2ZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcdFx0cmV0dXJuIHgtXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXHRcdHgtXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYzo5NTc6XHRcdGlmICh4LVx1MDAzZXRmY3BhZCBcdTAwM2UgSVBfTUFYX01UVSkge1xubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RXhjZXNzaXZlIFRGQyBwYWRkaW5nXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiByb3V0aW5nIGlzIGhhbmRsZWQuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzg0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcm91dGUgc3RydWN0dXJlcyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21lIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSByb3V0aW5nIHRhYmxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyByb3V0ZXMgYXJlIHJlcHJlc2VudGVkLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBsb29rIGF0IHRoZSBhY3R1YWwgb3V0cHV0IHBhdGgg4oCTIGhvdyB0aGUga2VybmVsICp1c2VzKiB0aG9zZSByb3V0ZXMuIE15IGd1dCBzYXlzIHRvIGNoZWNrIG91dCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDE0MzIuIFRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IElQdjYgcGFja2V0cyBhZnRlciB0aGUgcm91dGluZyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGtlcm5lbCBzZWxlY3RzIHRoZSBvdXRnb2luZyBpbnRlcmZhY2UsIHNldHMgdGhlIG5leHQgaG9wLCBhbmQgaGFuZGxlcyBhbnkgbmVjZXNzYXJ5IGZyYWdtZW50YXRpb24gb3IgaGVhZGVyIGFkanVzdG1lbnRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIOKAkyB0aGUgcm91dGUgaW5mb3JtYXRpb24gYW5kIHRoZSBvdXRwdXQgcHJvY2Vzc2luZyDigJMgYXJlIHRpZWQgdG9nZXRoZXIuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgcG9saWN5IHJvdXRpbmcgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFx0bmhhID0gYS1cdTAwM2VmaWI2X25oO1xuIDM2MTpcdFx0bmhiID0gYi1cdTAwM2VmaWI2X25oO1xuIDM2MjpcdFx0cmV0dXJuIG5oYS1cdTAwM2VmaWJfbmhfZGV2ID09IG5oYi1cdTAwM2VmaWJfbmhfZGV2IFx1MDAyNlx1MDAyNlxuIDM2MzpcdFx0ICAgICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZuaGEtXHUwMDNlZmliX25oX2d3NiwgXHUwMDI2bmhiLVx1MDAzZWZpYl9uaF9ndzYpIFx1MDAyNlx1MDAyNlxuIDM2NDpcdFx0ICAgICAgICFsd3R1bm5lbF9jbXBfZW5jYXAobmhhLVx1MDAzZWZpYl9uaF9sd3MsIG5oYi1cdTAwM2VmaWJfbmhfbHdzKTtcbiAzNjU6XHR9XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gMzY4Olx0XHRcdFx0XHRcdFx0ICAgICBib29sIGZvcndhcmRpbmcpXG4gMzY5Olx0e1xuIDM3MDpcdFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiAzNzE6XHRcdHVuc2lnbmVkIGludCBtdHU7XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcbiAzNzQ6XHRcdFx0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XG4gMzc1Olx0XHRcdGlmIChtdHUpXG4gMzc2Olx0XHRcdFx0Z290byBvdXQ7XG4gMzc3Olx0XHR9XG4gMzc4Olx0XG4gMzc5Olx0XHRtdHUgPSBJUFY2X01JTl9NVFU7XG4gMzgwOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzgxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbiAzODI6XHRcdGlmIChpZGV2KVxuIDM4MzpcdFx0XHRtdHUgPSBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1Nik7XG4gMzg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzODU6XHRcbiAzODY6XHRvdXQ6XG4gMzg3Olx0XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuIDM4ODpcdFxuIDM4OTpcdFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuIDM5MzpcdCAqXG4gMzk0Olx0ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gSVB2NiBPdXRwdXQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IElQdjYgb3V0cHV0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgZmlsZS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDE0MzIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24gb2YgdGhlIG91dHB1dCBwYXRoLiBJdCYjMzk7cyBvZnRlbiBpbiB0aG9zZSBkZWVwIGNvZGUgc2VnbWVudHMgd2hlcmUgeW91IHVuY292ZXIgdGhlIHJlYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgZGF0YSBoYW5kbGluZyBwcm9jZWR1cmVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggcGFucyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0XG4xNDExOlx0XHRcdG5vcHQtXHUwMDNlaG9wb3B0ID0gaXA2X29wdF9kdXAob3B0LVx1MDAzZWhvcG9wdCwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xNDEyOlx0XHRcdGlmIChvcHQtXHUwMDNlaG9wb3B0IFx1MDAyNlx1MDAyNiAhbm9wdC1cdTAwM2Vob3BvcHQpXG4xNDEzOlx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTQxNDpcdFxuMTQxNTpcdFx0XHRub3B0LVx1MDAzZXNyY3J0ID0gaXA2X3J0aGRyX2R1cChvcHQtXHUwMDNlc3JjcnQsIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTQxNjpcdFx0XHRpZiAob3B0LVx1MDAzZXNyY3J0IFx1MDAyNlx1MDAyNiAhbm9wdC1cdTAwM2VzcmNydClcbjE0MTc6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xNDE4Olx0XG4xNDE5Olx0XHRcdC8qIG5lZWQgc291cmNlIGFkZHJlc3MgYWJvdmUgbWl5YXphd2EqL1xuMTQyMDpcdFx0fVxuMTQyMTpcdFx0djZfY29yay1cdTAwM2Vob3BfbGltaXQgPSBpcGM2LVx1MDAzZWhsaW1pdDtcbjE0MjI6XHRcdHY2X2NvcmstXHUwMDNldGNsYXNzID0gaXBjNi1cdTAwM2V0Y2xhc3M7XG4xNDIzOlx0XHR2Nl9jb3JrLVx1MDAzZWRvbnRmcmFnID0gaXBjNi1cdTAwM2Vkb250ZnJhZztcbjE0MjQ6XHRcdGlmIChydC1cdTAwM2Vkc3QuZmxhZ3MgXHUwMDI2IERTVF9YRlJNX1RVTk5FTClcbjE0MjU6XHRcdFx0bXR1ID0gUkVBRF9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjKSBcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xuMTQyNjpcdFx0XHQgICAgICBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpIDogZHN0Nl9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbjE0Mjc6XHRcdGVsc2VcbjE0Mjg6XHRcdFx0bXR1ID0gUkVBRF9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjKSBcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xuMTQyOTpcdFx0XHRcdFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dSh4ZnJtX2RzdF9wYXRoKFx1MDAyNnJ0LVx1MDAzZWRzdCkpO1xuMTQzMDpcdFxuMTQzMTpcdFx0ZnJhZ19zaXplID0gUkVBRF9PTkNFKG5wLVx1MDAzZWZyYWdfc2l6ZSk7XG4xNDMyOlx0XHRpZiAoZnJhZ19zaXplIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUgXHUwMDNjIG10dSlcbjE0MzM6XHRcdFx0bXR1ID0gZnJhZ19zaXplO1xuMTQzNDpcdFxuMTQzNTpcdFx0aWYgKHNrX2lzX3VkcChzaykpXG4xNDM2Olx0XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbjE0Mzc6XHRcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbjE0Mzg6XHRcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4xNDM5Olx0XHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuMTQ0MDpcdFx0Y29yay1cdTAwM2ViYXNlLm1hcmsgPSBpcGM2LVx1MDAzZXNvY2tjLm1hcms7XG4xNDQxOlx0XHRjb3JrLVx1MDAzZWJhc2UucHJpb3JpdHkgPSBpcGM2LVx1MDAzZXNvY2tjLnByaW9yaXR5O1xuMTQ0MjpcdFx0c29ja190eF90aW1lc3RhbXAoc2ssIFx1MDAyNmlwYzYtXHUwMDNlc29ja2MsIFx1MDAyNmNvcmstXHUwMDNlYmFzZS50eF9mbGFncyk7XG4xNDQzOlx0XHRpZiAoaXBjNi1cdTAwM2Vzb2NrYy50c2ZsYWdzIFx1MDAyNiBTT0NLQ01fRkxBR19UU19PUFRfSUQpIHtcbjE0NDQ6XHRcdFx0Y29yay1cdTAwM2ViYXNlLmZsYWdzIHw9IElQQ09SS19UU19PUFRfSUQ7XG4xNDQ1Olx0XHRcdGNvcmstXHUwMDNlYmFzZS50c19vcHRfaWQgPSBpcGM2LVx1MDAzZXNvY2tjLnRzX29wdF9pZDtcbjE0NDY6XHRcdH1cbjE0NDc6XHRcdGNvcmstXHUwMDNlYmFzZS5sZW5ndGggPSAwO1xuMTQ0ODpcdFx0Y29yay1cdTAwM2ViYXNlLnRyYW5zbWl0X3RpbWUgPSBpcGM2LVx1MDAzZXNvY2tjLnRyYW5zbWl0X3RpbWU7XG4xNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDkwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIElQdjQgT3V0cHV0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgb3V0cHV0LCBhbmQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgYSBncmFudWxhciBsZXZlbC4mIzM0OyBUaGUgZmlyc3QgcGxhY2UgdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgYG5ldC9pcHY0L2lwX291dHB1dC5jYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlcmUmIzM5O3Mgc29tZSBjcnVjaWFsIGxvZ2ljIGFyb3VuZCBsaW5lIDEzMDMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydCB0byBpbnZlc3RpZ2F0ZSBtb3JlIGNsb3NlbHkuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW1taW5nLCByb3V0aW5nIGRlY2lzaW9ucywgb3IgcXVldWUgbWFuYWdlbWVudCwgYnV0IHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdXNwZWN0IHdlJiMzOTtkIGZpbmQgdGhlIGNvcmUgcHJvY2Vzc2luZyBvZiBvdXRib3VuZCBJUHY0IHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzay1cdTAwM2Vza190c2tleSk7XG4xMjkxOlx0XHRyZXR1cm4gZXJyO1xuMTI5MjpcdH1cbjEyOTM6XHRcbjEyOTQ6XHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuMTI5NTpcdFx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcbjEyOTg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuMTI5OTpcdFxuMTMwMDpcdFx0cnQgPSAqcnRwO1xuMTMwMTpcdFx0aWYgKHVubGlrZWx5KCFydCkpXG4xMzAyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMwMzpcdFxuMTMwNDpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4xMzA1Olx0XHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuMTMwNjpcdFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbjEzMDc6XHRcbjEzMDg6XHRcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4xMzA5Olx0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4xMzEwOlx0XG4xMzExOlx0XHQvKlxuMTMxMjpcdFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXG4xMzEzOlx0XHQgKi9cbjEzMTQ6XHRcdG9wdCA9IGlwYy1cdTAwM2VvcHQ7XG4xMzE1Olx0XHRpZiAob3B0KSB7XG4xMzE2Olx0XHRcdGlmICghY29yay1cdTAwM2VvcHQpIHtcbjEzMTc6XHRcdFx0XHRjb3JrLVx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MCxcbjEzMTg6XHRcdFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuMTMxOTpcdFx0XHRcdGlmICh1bmxpa2VseSghY29yay1cdTAwM2VvcHQpKVxuMTMyMDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTMyMTpcdFx0XHR9XG4xMzIyOlx0XHRcdG1lbWNweShjb3JrLVx1MDAzZW9wdCwgXHUwMDI2b3B0LVx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyBvcHQtXHUwMDNlb3B0Lm9wdGxlbik7XG4xMzIzOlx0XHRcdGNvcmstXHUwMDNlZmxhZ3MgfD0gSVBDT1JLX09QVDtcbjEzMjQ6XHRcdFx0Y29yay1cdTAwM2VhZGRyID0gaXBjLVx1MDAzZWFkZHI7XG4xMzI1Olx0XHR9XG4xMzI2Olx0XG4xMzI3Olx0XHRjb3JrLVx1MDAzZWdzb19zaXplID0gaXBjLVx1MDAzZWdzb19zaXplO1xuMTMyODpcdFxuMTMyOTpcdFx0Y29yay1cdTAwM2Vkc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDIxOAoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIFNhZmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gQW5hbHl6aW5nIHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBjbGFtcHMgdGhlIE1heGltdW0gVHJhbnNtaXNzaW9uIFVuaXQgKE1UVSkgYW5kIGZyYWdtZW50IHNpemUgdG8gdGhlIG1heGltdW0gZGVmaW5lZCB2YWx1ZXMgZm9yIElQdjQgYW5kIElQdjYgKGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCwgcmVzcGVjdGl2ZWx5KSBkdXJpbmcgY29yayBzZXR1cCBhbmQgcm91dGUgTVRVIGNhbGN1bGF0aW9ucy4gVGhlIGdvYWw/IFRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBVRFAgaGVhZGVyJiMzOTtzIGxlbmd0aCBmaWVsZCwgd2hlbiBhIGRldmljZSBNVFUgaXMgdW51c3VhbGx5IGxhcmdlICh0aGluayBhbnl0aGluZyBleGNlZWRpbmcgNjU1MzUsIGxpa2UgeW91IG1pZ2h0IHNlZSB3aXRoIGEgZHVtbXkgZGV2aWNlKS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlOioqIE5vcGUuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHVzZXItc3BhY2Ugc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgZXhwb3NlZCB2aWEgY29weV90b191c2VyLCBOZXRsaW5rIG1lc3NhZ2VzLCBvciBzb2NrZXQgb3B0aW9ucy4gV2UmIzM5O3JlIG5vdCBzZW5kaW5nIGFueXRoaW5nIG5ldyBvdXQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgY29kZSB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcy4gTVRVIGFuZCBgY29yay0mZ3Q7ZnJhZ3NpemVgIGFyZSBleHBsaWNpdGx5IHNldCwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIEFnYWluLCBuby4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uCjQuICAqKkJvdW5kcyBDaGVja3M6KiogSW4gZmFjdCwgaXQmIzM5O3MgdGhlIG9wcG9zaXRlISBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tzLiBXZSBhcmUgKmRlY3JlYXNpbmcqIG9yIGNhcHBpbmcgdGhlIE1UVSB2YWx1ZXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3ZlcnNpemVkIHBhY2tldHMsIG5vdCBpbmNyZWFzaW5nIHRoZW0uCgpTbywgYW0gSSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICYjMzQ7bm8mIzM0Oy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgZml4aW5nIGEgc3BlY2lmaWMgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBpbiBVRFAgbGVuZ3RoIGNhbGN1bGF0aW9uIHdoZW4gdGhlIGRldmljZSBNVFUgZXhjZWVkcyA2NEtCLiBUaGlzIHBhdGNoIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXguCgpUaGVyZWZvcmUsIEtNU0FOIHNob3VsZG4mIzM5O3QgYmUgY29uY2VybmVkIGhlcmUuIFdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgdGhlIHR5cGljYWwgZGVidWdnaW5nIGFzc2VydGlvbnMgc2hvdWxkIGhhbmRsZSB0aGUgZXhwZWN0ZWQgaXNzdWVzLiBLTVNBTiYjMzk7cyBwdXJwb3NlLCBpbiB0aGlzIGNhc2UsIGlzIG5vdCBuZWNlc3NhcnkuIFdlIHNob3VsZCBiZSBnb29kIHRvIG1hcmsgYE5lZWRzS01TQU5gIGFzIGZhbHNlLCBhbmQgZ2V0IHJlYWR5IHRvIGRvY3VtZW50IHRoZSByZWFzb25pbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXHUwMDNlIDY1NTM1KS5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjbGFtcHMgdGhlIE1UVSBhbmQgY29yayBmcmFnbWVudGF0aW9uIHNpemUgdG8gSVBfTUFYX01UVSAoSVB2NCkgYW5kIElQNl9NQVhfTVRVIChJUHY2KSBpbiBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGFsb25nc2lkZSBhZGRpbmcgYSBzZWxmdGVzdC4gVGhpcyBwcmV2ZW50cyBpbnRlZ2VyIG92ZXJmbG93IG9mIHRoZSAxNi1iaXQgVURQIGhlYWRlciBsZW5ndGggZmllbGQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCB2ZXJ5IGxhcmdlIE1UVSB2YWx1ZXMgKFx1MDAzZSA2NTUzNSkuXG5cbktNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi9wYWRkaW5nLCBjaGFuZ2UgdXNlci1zcGFjZSBjb3B5IGxvZ2ljLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDbGFtcGluZyBNVFUgdmFsdWVzIGVuc3VyZXMgcGFja2V0IGxlbmd0aCBib3VuZHMgc3RheSB3aXRoaW4gcHJvdG9jb2wgbGltaXRzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDowNy41MjMzMTkyNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ3ODE2MDg1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9tdHVcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjbGFtcHMgdGhlIE1UVSBhbmQgY29yayBmcmFnbWVudGF0aW9uIHNpemUgdG8gSVBfTUFYX01UVSAoSVB2NCkgYW5kIElQNl9NQVhfTVRVIChJUHY2KSBpbiBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGFsb25nc2lkZSBhZGRpbmcgYSBzZWxmdGVzdC4gVGhpcyBwcmV2ZW50cyBpbnRlZ2VyIG92ZXJmbG93IG9mIHRoZSAxNi1iaXQgVURQIGhlYWRlciBsZW5ndGggZmllbGQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCB2ZXJ5IGxhcmdlIE1UVSB2YWx1ZXMgKFxcdTAwM2UgNjU1MzUpLlxcblxcbktNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi9wYWRkaW5nLCBjaGFuZ2UgdXNlci1zcGFjZSBjb3B5IGxvZ2ljLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDbGFtcGluZyBNVFUgdmFsdWVzIGVuc3VyZXMgcGFja2V0IGxlbmd0aCBib3VuZHMgc3RheSB3aXRoaW4gcHJvdG9jb2wgbGltaXRzLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuZm9yY2VzIE1UVSBsaW1pdHMgKElQX01BWF9NVFUgLyBJUDZfTUFYX01UVSkgZHVyaW5nIGNvcmtpbmcgYW5kIElQdjYgZGVzdGluYXRpb24gTVRVIGxvb2t1cCBpbiBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpIHRvIHByZXZlbnQgMTYtYml0IFVEUCBkYXRhZ3JhbSBsZW5ndGggb3ZlcmZsb3cuIFRoaXMgYWx0ZXJzIGZ1bmN0aW9uYWwgcGFja2V0IGNvcmtpbmcgYW5kIHJvdXRlIE1UVSBoYW5kbGluZyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDcuNTIzMzI0ODczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE4NTQyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTQ6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBvdXQ6XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuK1xcbiBcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbiBcXG4gXFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbiBcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuIFxcbiBcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4gXFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuIFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4gXFxuK1xcdGlmIChza19pc191ZHAoc2spKVxcbitcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4gXFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGNtc2dfc29fbWFyay5zaCBcXFxcXFxuIFxcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcXFxcbiBcXHRjbXNnX3RpbWUuc2ggXFxcXFxcbitcXHRjb3JrX2ZyYWdzaXplLnB5IFxcXFxcXG4gXFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxcXFxuIFxcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxcXFxuIFxcdGVjbXBfcmVoYXNoLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbkBAIC0wLDAgKzEsMTg3IEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rJycnVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJycnXFxuK1xcbitpbXBvcnQgZXJybm9cXG4raW1wb3J0IGd6aXBcXG4raW1wb3J0IG9zXFxuK2ltcG9ydCBzb2NrZXRcXG4raW1wb3J0IHN0cnVjdFxcbitpbXBvcnQgc3VicHJvY2Vzc1xcbitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXFxuK1xcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxcbisgICAgS3NmdE5hbWVkVmFyaWFudCxcXG4rICAgIEtzZnRTa2lwRXgsXFxuKyAgICBOZXROUyxcXG4rICAgIE5ldE5TRW50ZXIsXFxuKyAgICBkZWZlcixcXG4rICAgIGlwLFxcbisgICAga3NmdF9lcSxcXG4rICAgIGtzZnRfZXhpdCxcXG4rICAgIGtzZnRfcHIsXFxuKyAgICBrc2Z0X3JhaXNlcyxcXG4rICAgIGtzZnRfcnVuLFxcbisgICAga3NmdF90cnVlLFxcbisgICAga3NmdF92YXJpYW50cyxcXG4rKVxcbitcXG4rSVBfTVRVX0RJU0NPVkVSID0gMTBcXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXFxuK0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcXG4rSVBWNl9QTVRVRElTQ19ETyA9IDJcXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcXG4rSVBWNl9UTFZfSlVNQk8gPSAxOTRcXG4rXFxuK1xcbitkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb246IHN0cikgLVxcdTAwM2UgYm9vbCB8IE5vbmU6XFxuKyAgICAnJydcXG4rICAgIENoZWNrIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjb25maWcgb2YgdGhlIHJ1bm5pbmcga2VybmVsLlxcbisgICAgUmV0dXJucyBOb25lIGlmIHRoZSBjb25maWcgaXMgbm90IGZvdW5kOyBvdGhlcndpc2UgcmV0dXJucyBUcnVlL0ZhbHNlXFxuKyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLlxcbisgICAgJycnXFxuK1xcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xcbisgICAgICAgICgnL3Byb2MvY29uZmlnLmd6JywgZ3ppcC5vcGVuKSxcXG4rICAgICAgICAoZicvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0nLCBvcGVuKSxcXG4rICAgIF06XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJ3J0JykgYXMgY29uZmlnOlxcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxcbisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZid7b3B0aW9ufT15JzpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVcXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitcXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cXG4rICAgICcnJ1xcbitcXG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxcbisgICAgaWYgcmVzIGlzIE5vbmU6XFxuKyAgICAgICAga3NmdF9wcihcXFwiV0FSTjogQ2FuJ3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XFxcIilcXG4rICAgIGVsaWYgbm90IHJlczpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQnKVxcbitcXG4rXFxuK2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cXHUwMDNlIGJvb2w6XFxuKyAgICAnJydcXG4rICAgIENoZWNrIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBwcm9kdWNlZCBhIFdBUk4gaW4gZG1lc2cuXFxuKyAgICAnJydcXG4rXFxuKyAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzpcXG4rICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSlcXG4rICAgIHJldHVybiByZXMucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDBcXG4rXFxuK1xcbitAY29udGV4dG1hbmFnZXJcXG4rZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cXG4rICAgICcnJ1xcbitcXG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXFxuKyAgICB3aXRoIGRlZmVyKGlwLCAnbGluayBkZWwgZHVtbXknLCBucz1ucyk6XFxuKyAgICAgICAgaXAoZidsaW5rIHNldCBkdW1teSBtdHUge210dX0nLCBucz1ucylcXG4rICAgICAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcXG4rICAgICAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcXG4rICAgICAgICBub2RhZCA9ICdub2RhZCcgaWYgaXB2NiBlbHNlICcnXFxuKyAgICAgICAgbG9jYWwgPSAnZmQwMDo6MS82NCcgaWYgaXB2NiBlbHNlICcxMC4wLjAuMS8yNCdcXG4rICAgICAgICByZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcXG4rICAgICAgICBpcChmJ3tmbGFnfSBhZGRyIGFkZCB7bG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JywgbnM9bnMpXFxuKyAgICAgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCcsIG5zPW5zKVxcbisgICAgICAgIHlpZWxkXFxuK1xcbitcXG4rQGtzZnRfdmFyaWFudHMoW1xcbisgICAgS3NmdE5hbWVkVmFyaWFudChcXG4rICAgICAgICAnaXB2NicsXFxuKyAgICAgICAgVHJ1ZSxcXG4rICAgICAgICBzb2NrZXQuQUZfSU5FVDYsXFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcXG4rICAgICAgICAnZmQwMDo6MicsXFxuKyAgICAgICAgJ3VkcF92Nl9zZW5kX3NrYicsXFxuKyAgICApLFxcbisgICAgS3NmdE5hbWVkVmFyaWFudChcXG4rICAgICAgICAnaXB2NCcsXFxuKyAgICAgICAgRmFsc2UsXFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQsXFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKSxcXG4rICAgICAgICAnMTAuMC4wLjInLFxcbisgICAgICAgICd1ZHBfc2VuZF9za2InLFxcbisgICAgKSxcXG4rXSlcXG4rZGVmIHRlc3RfdWRwKFxcbisgICAgaXB2NjogYm9vbCxcXG4rICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSxcXG4rICAgIHNvY2tvcHRzOiB0dXBsZVtpbnQsIGludCwgaW50XSxcXG4rICAgIGRlc3RpcDogc3RyLFxcbisgICAgZnVuYzogc3RyXFxuKykgLVxcdTAwM2UgTm9uZTpcXG4rICAgICcnJ1xcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24ndCBvdmVyZmxvd1xcbisgICAgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGNvdWxkIGhhcHBlbiBvbiBvbGRlclxcbisgICAga2VybmVscyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxcbitcXG4rICAgIElQdjQ6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUsIGJ1dCB0aGUgb3ZlcmZsb3cgY291bGRcXG4rICAgIGhhcHBlbiBiZWZvcmUgaXQgaGFwcGVucy4gVGhlIG9ubHkgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byBjaGVjayBkbWVzZyBvblxcbisgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuXFxuK1xcbisgICAgSVB2NjogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSBvbiBmaXhlZCBrZXJuZWxzLCBhbmQgd2lsbCBiZVxcbisgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZFxcbisgICAgZG1lc2cgbXVzdCBiZSBjbGVhbiBvZiB3YXJuaW5ncyBvbiBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscy5cXG4rICAgICcnJ1xcbitcXG4rICAgIGlmIG5vdCBpcHY2OlxcbisgICAgICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxcbitcXG4rICAgIHdpdGggKFxcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXFxuKyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiArIDIwICogaXB2NiwgaXB2NiksXFxuKyAgICAgICAgTmV0TlNFbnRlcihucyksXFxuKyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLFxcbisgICAgKTpcXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KCpzb2Nrb3B0cylcXG4rICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6XFxuKyAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKVxcbisgICAgICAgICMgSVB2NjogRU1TR1NJWkUgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC5cXG4rICAgICAgICAjIElQdjQ6IEVNU0dTSVpFIGhhcHBlbnMgb24gYm90aCBmaXhlZCBhbmQgdW5maXhlZCBrZXJuZWxzLCBhZnRlciB0aGVcXG4rICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suXFxuKyAgICAgICAgaWYgZS5leGNlcHRpb24gaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGtzZnRfZXEoZS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVNU0dTSVpFKVxcbitcXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbihmdW5jKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxcbitcXG4rXFxuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgJycnXFxuKyAgICBUZXN0IHRoYXQgc2VuZGluZyBVRFAganVtYm9ncmFtcyBvdmVyIGEgcmF3IElQdjYgc29ja2V0IHdvcmtzLCBkZXNwaXRlXFxuKyAgICBoYXZpbmcgdGhlIGZpeCBmb3Igb3ZlcnNpemVkIFVEUCBwYWNrZXRzLiBzZW5kdG8gbXVzdCBub3QgcmFpc2UgYW4gT1NFcnJvclxcbisgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuXFxuKyAgICAnJydcXG4rXFxuKyAgICB3aXRoIChcXG4rICAgICAgICBOZXROUygpIGFzIG5zLFxcbisgICAgICAgIGR1bW15X25ldGRldihucywgNjU1ODQsIFRydWUpLFxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxcbisgICAgICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5JUFBST1RPX1VEUCkgYXMgZmQsXFxuKyAgICApOlxcbisgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpXFxuKyAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJyFISEhIJywgMTIzNCwgMTIzNCwgMCwgMCkgKyBiJyAnICogNjU1MjhcXG4rICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcXG4rXFxuK1xcbitpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcbisgICAga3NmdF9ydW4oW1xcbisgICAgICAgIHRlc3RfdWRwLFxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcXG4rICAgIF0pXFxuKyAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDowNy45MjU4NzI4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxMzI0NjQxOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X210dVwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxOTJmODQzYzc4ZDEwNjc2YmFkYjM2OWEwYzY0MWFlZmVmYTcxZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjE0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NCw2ICszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbitcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuIFxuIFx0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XG4gXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xuK1x0Y29yay1cdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcbiBcbiBcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cdTAwM2VmcmFnc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5pbmRleCA4ZmM0NzY2YzhkYTkwLi41NTA5NjUwNTg5OTE1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbkBAIC0xNDMyLDYgKzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxuIFx0aWYgKGZyYWdfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZ19zaXplIFx1MDAzYyBtdHUpXG4gXHRcdG10dSA9IGZyYWdfc2l6ZTtcbiBcbitcdGlmIChza19pc191ZHAoc2spKVxuK1x0XHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XG4gXHRjb3JrLVx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVx1MDAzZWdzb19zaXplO1xuIFx0Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDUxN2MwOWQ2MGJlZjcuLjNlZTMzNzhmOGIyNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0Y21zZ19zb19tYXJrLnNoIFxcXG4gXHRjbXNnX3NvX3ByaW9yaXR5LnNoIFxcXG4gXHRjbXNnX3RpbWUuc2ggXFxcbitcdGNvcmtfZnJhZ3NpemUucHkgXFxcbiBcdGRvdWJsZV91ZHBfZW5jYXAuc2ggXFxcbiBcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxuIFx0ZWNtcF9yZWhhc2guc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FmZDY0M2QwN2VjMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbkBAIC0wLDAgKzEsMTg3IEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisnJydUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi4nJydcbitcbitpbXBvcnQgZXJybm9cbitpbXBvcnQgZ3ppcFxuK2ltcG9ydCBvc1xuK2ltcG9ydCBzb2NrZXRcbitpbXBvcnQgc3RydWN0XG4raW1wb3J0IHN1YnByb2Nlc3Ncbitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyXG4rXG4rZnJvbSBsaWIucHkgaW1wb3J0IChcbisgICAgS3NmdE5hbWVkVmFyaWFudCxcbisgICAgS3NmdFNraXBFeCxcbisgICAgTmV0TlMsXG4rICAgIE5ldE5TRW50ZXIsXG4rICAgIGRlZmVyLFxuKyAgICBpcCxcbisgICAga3NmdF9lcSxcbisgICAga3NmdF9leGl0LFxuKyAgICBrc2Z0X3ByLFxuKyAgICBrc2Z0X3JhaXNlcyxcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbisgICAga3NmdF92YXJpYW50cyxcbispXG4rXG4rSVBfTVRVX0RJU0NPVkVSID0gMTBcbitJUF9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X01UVV9ESVNDT1ZFUiA9IDIzXG4rSVBWNl9QTVRVRElTQ19ETyA9IDJcbitJUFY2X1BNVFVESVNDX1BST0JFID0gM1xuK0lQVjZfVExWX0pVTUJPID0gMTk0XG4rXG4rXG4rZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uOiBzdHIpIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4rICAgICcnJ1xuKyAgICBDaGVjayB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZW5hYmxlZCBpbiB0aGUgY29uZmlnIG9mIHRoZSBydW5uaW5nIGtlcm5lbC5cbisgICAgUmV0dXJucyBOb25lIGlmIHRoZSBjb25maWcgaXMgbm90IGZvdW5kOyBvdGhlcndpc2UgcmV0dXJucyBUcnVlL0ZhbHNlXG4rICAgIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9uIHZhbHVlIGluIHRoZSBjb25maWcuXG4rICAgICcnJ1xuK1xuKyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4rICAgICAgICAoJy9wcm9jL2NvbmZpZy5neicsIGd6aXAub3BlbiksXG4rICAgICAgICAoZicvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0nLCBvcGVuKSxcbisgICAgXTpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJ3J0JykgYXMgY29uZmlnOlxuKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4rICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYne29wdGlvbn09eSc6XG4rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVcbisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbisgICAgJycnXG4rICAgIFNraXAgdGhlIHRlc3QgaWYgQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnLlxuKyAgICAnJydcbitcbisgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygnQ09ORklHX0RFQlVHX05FVCcpXG4rICAgIGlmIHJlcyBpcyBOb25lOlxuKyAgICAgICAga3NmdF9wcihcIldBUk46IENhbid0IHJlYWQga2VybmVsIGNvbmZpZzsgYXNzdW1pbmcgZGVidWcga2VybmVsLCBhbmQgcnVubmluZyB0aGUgdGVzdFwiKVxuKyAgICBlbGlmIG5vdCByZXM6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQnKVxuK1xuK1xuK2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jOiBzdHIpIC1cdTAwM2UgYm9vbDpcbisgICAgJycnXG4rICAgIENoZWNrIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBwcm9kdWNlZCBhIFdBUk4gaW4gZG1lc2cuXG4rICAgICcnJ1xuK1xuKyAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBkbWVzZzpcbisgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MucnVuKFsnZ3JlcCcsICctcScsIGYnV0FSTklORzouKntmdW5jfSddLCBzdGRpbj1kbWVzZy5zdGRvdXQsIGNoZWNrPUZhbHNlKVxuKyAgICByZXR1cm4gcmVzLnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwXG4rXG4rXG4rQGNvbnRleHRtYW5hZ2VyXG4rZGVmIGR1bW15X25ldGRldihuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBDcmVhdGUgYSBkdW1teSBuZXRkZXYgaW5zaWRlIHRoZSBnaXZlbiBuYW1lc3BhY2UsIGFuZCB0dW5lIGl0IGZvciB0aGUgdGVzdC5cbisgICAgJycnXG4rXG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXG4rICAgIHdpdGggZGVmZXIoaXAsICdsaW5rIGRlbCBkdW1teScsIG5zPW5zKTpcbisgICAgICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXG4rICAgICAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcbisgICAgICAgIGZsYWcgPSAnLTYnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICAgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICAgICAgbG9jYWwgPSAnZmQwMDo6MS82NCcgaWYgaXB2NiBlbHNlICcxMC4wLjAuMS8yNCdcbisgICAgICAgIHJlbW90ZSA9ICdmZDAwOjoyJyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4yJ1xuKyAgICAgICAgaXAoZid7ZmxhZ30gYWRkciBhZGQge2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxuKyAgICAgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHtyZW1vdGV9IGxsYWRkciAwMjowMDowMDowMDowMDowMiBkZXYgZHVtbXkgbnVkIHBlcm1hbmVudCcsIG5zPW5zKVxuKyAgICAgICAgeWllbGRcbitcbitcbitAa3NmdF92YXJpYW50cyhbXG4rICAgIEtzZnROYW1lZFZhcmlhbnQoXG4rICAgICAgICAnaXB2NicsXG4rICAgICAgICBUcnVlLFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQ2LFxuKyAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKSxcbisgICAgICAgICdmZDAwOjoyJyxcbisgICAgICAgICd1ZHBfdjZfc2VuZF9za2InLFxuKyAgICApLFxuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxuKyAgICAgICAgJ2lwdjQnLFxuKyAgICAgICAgRmFsc2UsXG4rICAgICAgICBzb2NrZXQuQUZfSU5FVCxcbisgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCBJUF9QTVRVRElTQ19QUk9CRSksXG4rICAgICAgICAnMTAuMC4wLjInLFxuKyAgICAgICAgJ3VkcF9zZW5kX3NrYicsXG4rICAgICksXG4rXSlcbitkZWYgdGVzdF91ZHAoXG4rICAgIGlwdjY6IGJvb2wsXG4rICAgIGFmOiBzb2NrZXQuQWRkcmVzc0ZhbWlseSxcbisgICAgc29ja29wdHM6IHR1cGxlW2ludCwgaW50LCBpbnRdLFxuKyAgICBkZXN0aXA6IHN0cixcbisgICAgZnVuYzogc3RyXG4rKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBUZXN0IHRoYXQgc2VuZGluZyBhbiBvdmVyc2l6ZWQgVURQIHBhY2tldCBvdmVyIGEgVURQIHNvY2tldCBkb2Vzbid0IG92ZXJmbG93XG4rICAgIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSBVRFAgaGVhZGVyLCB3aGljaCBjb3VsZCBoYXBwZW4gb24gb2xkZXJcbisgICAga2VybmVscyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxuK1xuKyAgICBJUHY0OiBUaGUgcGFja2V0IHdpbGwgYmUgZHJvcHBlZCB3aXRoIEVNU0dTSVpFLCBidXQgdGhlIG92ZXJmbG93IGNvdWxkXG4rICAgIGhhcHBlbiBiZWZvcmUgaXQgaGFwcGVucy4gVGhlIG9ubHkgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byBjaGVjayBkbWVzZyBvblxuKyAgICBDT05GSUdfREVCVUdfTkVUPXkga2VybmVscyB0aGF0IGhhdmUgdWRwX3NldF9sZW5fc2hvcnQgd2l0aCB0aGUgd2FybmluZy5cbitcbisgICAgSVB2NjogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSBvbiBmaXhlZCBrZXJuZWxzLCBhbmQgd2lsbCBiZVxuKyAgICBzZW50IGNvcnJ1cHRlZCBvbiBvbGRlciBrZXJuZWxzLiBUZXN0IGJvdGg6IHNlbmR0byBtdXN0IHJldHVybiBFTVNHU0laRSwgYW5kXG4rICAgIGRtZXNnIG11c3QgYmUgY2xlYW4gb2Ygd2FybmluZ3Mgb24gQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMuXG4rICAgICcnJ1xuK1xuKyAgICBpZiBub3QgaXB2NjpcbisgICAgICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxuK1xuKyAgICB3aXRoIChcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4rICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTU2ICsgMjAgKiBpcHY2LCBpcHY2KSxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxuKyAgICAgICAgc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkLFxuKyAgICApOlxuKyAgICAgICAgZmQuc2V0c29ja29wdCgqc29ja29wdHMpXG4rICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGU6XG4rICAgICAgICAgICAgZmQuc2VuZHRvKGInICcgKiA2NTUyOCwgKGRlc3RpcCwgMTIzNCkpXG4rICAgICAgICAjIElQdjY6IEVNU0dTSVpFIGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4rICAgICAgICAjIElQdjQ6IEVNU0dTSVpFIGhhcHBlbnMgb24gYm90aCBmaXhlZCBhbmQgdW5maXhlZCBrZXJuZWxzLCBhZnRlciB0aGVcbisgICAgICAgICMgICAgICAgV0FSTiBpcyBwcmludGVkIC0gaWdub3JlIGl0IGFuZCByZWx5IG9uIHRoZSBkbWVzZyBjaGVjay5cbisgICAgICAgIGlmIGUuZXhjZXB0aW9uIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoZS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVNU0dTSVpFKVxuK1xuKyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oZnVuYyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgVURQIGp1bWJvZ3JhbXMgb3ZlciBhIHJhdyBJUHY2IHNvY2tldCB3b3JrcywgZGVzcGl0ZVxuKyAgICBoYXZpbmcgdGhlIGZpeCBmb3Igb3ZlcnNpemVkIFVEUCBwYWNrZXRzLiBzZW5kdG8gbXVzdCBub3QgcmFpc2UgYW4gT1NFcnJvclxuKyAgICBleGNlcHRpb24gKHdoZW4gcmFpc2VkLCB0aGUgdGVzdCBmYWlscyBhdXRvbWF0aWNhbGx5KS5cbisgICAgJycnXG4rXG4rICAgIHdpdGggKFxuKyAgICAgICAgTmV0TlMoKSBhcyBucyxcbisgICAgICAgIGR1bW15X25ldGRldihucywgNjU1ODQsIFRydWUpLFxuKyAgICAgICAgTmV0TlNFbnRlcihucyksXG4rICAgICAgICBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkLFxuKyAgICApOlxuKyAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4rICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCchSEhISCcsIDEyMzQsIDEyMzQsIDAsIDApICsgYicgJyAqIDY1NTI4XG4rICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcbitcbitcbitpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4rICAgIGtzZnRfcnVuKFtcbisgICAgICAgIHRlc3RfdWRwLFxuKyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLFxuKyAgICBdKVxuKyAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDcuOTI1ODc0Mjk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMjA1NTk3MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWwgYXJlYXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCdzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0IGxvb2tzIGxpa2UgaXQgZm9jdXNlcyBvbiBNVFUgKE1heGltdW0gVHJhbnNtaXNzaW9uIFVuaXQpIGNhbGN1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgVURQIGZyYWdtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gSVB2NCBhbmQgSVB2NiBuZXR3b3JrIHN0YWNrcy4gSSBzZWUgY2hhbmdlcyBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGBpcF9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfc2V0dXBfY29ya2AsIHdoaWNoIGFyZSBhbGwgY29kZSBwYXRocyB0aGF0IG1pZ2h0IGludm9sdmUgY3J1Y2lhbCBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBjb25zaWRlcmF0aW9ucy4gVGhlIGluY2x1c2lvbiBvZiBgY29ya19mcmFnc2l6ZS5weWAgaW4gdGhlIHNlbGZ0ZXN0cyByYWlzZXMgYSByZWQgZmxhZyBpbiBhIGdvb2Qgd2F5IC0tIHRoZXkncmUgdGVzdGluZywgYnV0IGFyZSB0aGV5IHRlc3RpbmcgdGhlIHJpZ2h0IHRoaW5nP1xuXG5CZWZvcmUgSSBqdW1wIHRvIGEgZnV6emluZyBkZWNpc2lvbiwgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGVzZSBgbWluKClgIGNvbnN0cmFpbnRzIGFyZSBiZWluZyBhZGRlZC4gQXJlIHRoZXkgYnVnIGZpeGVzPyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zPyBTZWN1cml0eSBoYXJkZW5pbmc/IEl0IGNvdWxkIGJlIGFsbCBvZiB0aG9zZSB0aGluZ3MuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSByZWxhdGVkIGNvbW1pdCBtZXNzYWdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1c2UgcmVhZC1maWxlIGFuZCBncmVwcGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBpbmZsdWVuY2UgZnJhZ21lbnRhdGlvbiBiZWhhdmlvciwgY291bGQgKmFic29sdXRlbHkqIGJlIHdvcnRoIGZ1enppbmcsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlc2UgYG1pbigpYCBjb25zdHJhaW50cyBhcmUgY2xhbXBpbmcgZG93biBvbiB1bmV4cGVjdGVkIHNpemVzLCBvciBlbmFibGluZyBzb21lIG5ldyBuZXR3b3JrIHBhdGggb3IgZmVhdHVyZSB0aGF0IGNvdWxkIHJldmVhbCBuZXcgZnV6emluZyB2ZWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTU6NTguMTMxNDc0Njg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTEwMzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXR1cF9jb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XFx0XFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE1OjU4LjQ2NjU4MzE0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjk1MjkyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBJUCBPdXRwdXQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgSVAgb3V0cHV0IHBhdGhzLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlLWV4YW1pbmUgaG93IHBhY2tldHMgZ2V0IGJ1aWx0IGFuZCBzZW50IGF0IHRoZSBJUCBsYXllci4gSSdsbCBzdGFydCB3aXRoIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCByb3V0aW5lcywgc28gSSdtIHB1bGxpbmcgdXAgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBoZWFkZXIgY29uc3RydWN0aW9uLCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIChlLmcuLCB0aGUgZGV2aWNlIGRyaXZlcnMpLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci5cblxuVGhlbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IHJvdXRpbmcsIEknbSBnb2luZyB0byBjaGVjayBvdXQgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSByb3V0aW5nIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG91dHB1dCBwYXRoLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJvdXRlIGxvb2t1cCBwcm9jZXNzLCBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24sIGFuZCBhbnkgY2FjaGUgbWVjaGFuaXNtcyBpbnZvbHZlZC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb21wbGV4aXR5IG9mIElQdjYgcm91dGluZywgcGFydGljdWxhcmx5IHdpdGggbXVsdGlwbGUgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsbHkgY29tcGxleCByb3V0aW5nIHBvbGljaWVzLiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBhbmQgdXBkYXRlIG15IG1lbnRhbCBtb2RlbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjAwOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjAwLjk5NjExNTIyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNrLVxcdTAwM2Vza190c2tleSk7XFxuMTI5MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjEyOTI6XFx0fVxcbjEyOTM6XFx0XFxuMTI5NDpcXHRzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbjEyOTU6XFx0XFx0XFx0XFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxcbjEyOTY6XFx0e1xcbjEyOTc6XFx0XFx0c3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7XFxuMTI5ODpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0cnQgPSAqcnRwO1xcbjEzMDE6XFx0XFx0aWYgKHVubGlrZWx5KCFydCkpXFxuMTMwMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMzAzOlxcdFxcbjEzMDQ6XFx0XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbjEzMDU6XFx0XFx0XFx0XFx0IGRzdDRfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KTtcXG4xMzA2OlxcdFxcdGNvcmstXFx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXFx1MDAzZWZyYWdzaXplLCBJUF9NQVhfTVRVKTtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVxcdTAwM2VmcmFnc2l6ZSkpXFxuMTMwOTpcXHRcXHRcXHRyZXR1cm4gLUVORVRVTlJFQUNIO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHQvKlxcbjEzMTI6XFx0XFx0ICogc2V0dXAgZm9yIGNvcmtpbmcuXFxuMTMxMzpcXHRcXHQgKi9cXG4xMzE0OlxcdFxcdG9wdCA9IGlwYy1cXHUwMDNlb3B0O1xcbjEzMTU6XFx0XFx0aWYgKG9wdCkge1xcbjEzMTY6XFx0XFx0XFx0aWYgKCFjb3JrLVxcdTAwM2VvcHQpIHtcXG4xMzE3OlxcdFxcdFxcdFxcdGNvcmstXFx1MDAzZW9wdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIDQwLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4xMzE5OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghY29yay1cXHUwMDNlb3B0KSlcXG4xMzIwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMzIxOlxcdFxcdFxcdH1cXG4xMzIyOlxcdFxcdFxcdG1lbWNweShjb3JrLVxcdTAwM2VvcHQsIFxcdTAwMjZvcHQtXFx1MDAzZW9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC1cXHUwMDNlb3B0Lm9wdGxlbik7XFxuMTMyMzpcXHRcXHRcXHRjb3JrLVxcdTAwM2VmbGFncyB8PSBJUENPUktfT1BUO1xcbjEzMjQ6XFx0XFx0XFx0Y29yay1cXHUwMDNlYWRkciA9IGlwYy1cXHUwMDNlYWRkcjtcXG4xMzI1OlxcdFxcdH1cXG4xMzI2OlxcdFxcbjEzMjc6XFx0XFx0Y29yay1cXHUwMDNlZ3NvX3NpemUgPSBpcGMtXFx1MDAzZWdzb19zaXplO1xcbjEzMjg6XFx0XFxuMTMyOTpcXHRcXHRjb3JrLVxcdTAwM2Vkc3QgPSBcXHUwMDI2cnQtXFx1MDAzZWRzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDAuOTk2MzkwOTk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0Mjg2OTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIElQdjYgT3V0cHV0KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBJUHY2IG91dHB1dCBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBoYW5kbGVkLiBJdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyBJUHY2IHBhY2tldHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdtIGFzc3VtaW5nIGl0IGhhcyB0byBkbyB3aXRoIGFuIGludGVyYWN0aW9uLCBvciBzb21lIHF1aXJrIGluIHRoZSBvdXRwdXQgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDUuNDM5MjYzNjk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcdFxcdG5vcHQtXFx1MDAzZXNyY3J0ID0gaXA2X3J0aGRyX2R1cChvcHQtXFx1MDAzZXNyY3J0LCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuMTQxNjpcXHRcXHRcXHRpZiAob3B0LVxcdTAwM2VzcmNydCBcXHUwMDI2XFx1MDAyNiAhbm9wdC1cXHUwMDNlc3JjcnQpXFxuMTQxNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTQxODpcXHRcXG4xNDE5OlxcdFxcdFxcdC8qIG5lZWQgc291cmNlIGFkZHJlc3MgYWJvdmUgbWl5YXphd2EqL1xcbjE0MjA6XFx0XFx0fVxcbjE0MjE6XFx0XFx0djZfY29yay1cXHUwMDNlaG9wX2xpbWl0ID0gaXBjNi1cXHUwMDNlaGxpbWl0O1xcbjE0MjI6XFx0XFx0djZfY29yay1cXHUwMDNldGNsYXNzID0gaXBjNi1cXHUwMDNldGNsYXNzO1xcbjE0MjM6XFx0XFx0djZfY29yay1cXHUwMDNlZG9udGZyYWcgPSBpcGM2LVxcdTAwM2Vkb250ZnJhZztcXG4xNDI0OlxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmZsYWdzIFxcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxcbjE0MjU6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgXFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XFxuMTQyNjpcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSkgOiBkc3Q2X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuMTQyNzpcXHRcXHRlbHNlXFxuMTQyODpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZXBtdHVkaXNjKSBcXHUwMDNlPSBJUFY2X1BNVFVESVNDX1BST0JFID9cXG4xNDI5OlxcdFxcdFxcdFxcdFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpKTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0ZnJhZ19zaXplID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VmcmFnX3NpemUpO1xcbjE0MzI6XFx0XFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuMTQzMzpcXHRcXHRcXHRtdHUgPSBmcmFnX3NpemU7XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGlmIChza19pc191ZHAoc2spKVxcbjE0MzY6XFx0XFx0XFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xcbjE0Mzc6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcXG4xNDM4OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4xNDM5OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xcbjE0NDA6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5tYXJrID0gaXBjNi1cXHUwMDNlc29ja2MubWFyaztcXG4xNDQxOlxcdFxcdGNvcmstXFx1MDAzZWJhc2UucHJpb3JpdHkgPSBpcGM2LVxcdTAwM2Vzb2NrYy5wcmlvcml0eTtcXG4xNDQyOlxcdFxcdHNvY2tfdHhfdGltZXN0YW1wKHNrLCBcXHUwMDI2aXBjNi1cXHUwMDNlc29ja2MsIFxcdTAwMjZjb3JrLVxcdTAwM2ViYXNlLnR4X2ZsYWdzKTtcXG4xNDQzOlxcdFxcdGlmIChpcGM2LVxcdTAwM2Vzb2NrYy50c2ZsYWdzIFxcdTAwMjYgU09DS0NNX0ZMQUdfVFNfT1BUX0lEKSB7XFxuMTQ0NDpcXHRcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmZsYWdzIHw9IElQQ09SS19UU19PUFRfSUQ7XFxuMTQ0NTpcXHRcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXFx1MDAzZXNvY2tjLnRzX29wdF9pZDtcXG4xNDQ2OlxcdFxcdH1cXG4xNDQ3OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UubGVuZ3RoID0gMDtcXG4xNDQ4OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXFx1MDAzZXNvY2tjLnRyYW5zbWl0X3RpbWU7XFxuMTQ0OTpcXHRcXG4xNDUwOlxcdFxcdHJldHVybiAwO1xcbjE0NTE6XFx0fVxcbjE0NTI6XFx0XFxuMTQ1MzpcXHRzdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4xNDU0OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuMTQ1NTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29ya19mdWxsLFxcbjE0NTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4xNDU3OlxcdFxcdFxcdFxcdCAgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsXFxuMTQ1ODpcXHRcXHRcXHRcXHRcXHRcXHQgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksXFxuMTQ1OTpcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmZyb20sIHNpemVfdCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MDUuNDM5Mzg0NjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzOTc1NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBSb3V0aW5nIERldGFpbHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yIGxpZXMgd2l0aGluIHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgaGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsaWtlbHkgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdHJ1Y3QgYHJ0Nl9pbmZvYCwgaXRzIGZpZWxkcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyByZWdhcmRpbmcgdGhlIHNwZWNpZmljIHJvdXRlIHNlbGVjdGlvbiBwcm9jZXNzLCB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IHJvdXRlIHR5cGVzIChlLmcuLCBjb25uZWN0ZWQsIHN0YXRpYywgZHluYW1pYyksIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3Igc3BlY2lhbCBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcm91dGluZyBlbmdpbmUgbWFrZXMgaXRzIGRlY2lzaW9ucyBpcyBwYXJhbW91bnQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIGFueSBmbGFncyBvciBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCByb3V0ZXMsIHNpbmNlIHRoZXNlIG9mdGVuIGRyaXZlIHRoZSBtb3JlIG51YW5jZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoxMC40NzkxNDI4ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdH1cXG4gMzY2OlxcdFxcbiAzNjc6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuIDM2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZm9yd2FyZGluZylcXG4gMzY5OlxcdHtcXG4gMzcwOlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDM3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1O1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcXG4gMzc0OlxcdFxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbiAzNzU6XFx0XFx0XFx0aWYgKG10dSlcXG4gMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzNzc6XFx0XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRtdHUgPSBJUFY2X01JTl9NVFU7XFxuIDM4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM4MTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG4gMzgyOlxcdFxcdGlmIChpZGV2KVxcbiAzODM6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KTtcXG4gMzg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRvdXQ6XFxuIDM4NzpcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbiAzOTM6XFx0ICpcXG4gMzk0OlxcdCAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxcbiAzOTU6XFx0ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuIDM5NjpcXHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbiAzOTc6XFx0ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxcbiAzOTg6XFx0ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXFxuIDM5OTpcXHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTAuNDc5MjE2NzY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTYzODExOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBWYWx1ZXMgaW4gSVAgYW5kIElQdjYqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0IHZhbHVlcywgc3BlY2lmaWNhbGx5IGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYC4gVGhvc2UgY29uc3RhbnQgZGVmaW5pdGlvbnMgYXJlIGNydWNpYWwgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgaGFuZGxpbmcgZnJhZ21lbnRhdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gb24gc29saWQgZ3JvdW5kIHdpdGggdGhlbS4gSSBjb3VsZCBsb29rIHRoZW0gdXAgaW4gdGhlIGRvY3VtZW50YXRpb24sIGJ1dCBJJ2xsIHRyeSBhIHF1aWNrIGdyZXAgdGhyb3VnaCByZWxldmFudCBzb3VyY2UgY29kZSBmaXJzdC4gSXQncyBvZnRlbiBmYXN0ZXIgdG8gc2VlIHRoZSB1c2FnZSBjb250ZXh0IGFsb25nc2lkZSB0aGUgZGVmaW5pdGlvbi4gQSBxdWljayBncmVwIHNob3VsZCBkbyB0aGUgdHJpY2suIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTQuNzM1NjAwNjY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMjY4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX01BWF9NVFVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0zNC0jZGVmaW5lIFNTSVBfVFhRVUVVRV9MRU5cXHQxMDBcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXFx0XFx0NjU1MzVcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVxcdDQwMDBcXG4tLVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjMtXFx0c3NpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1pbl9tdHUgPSBQSE9ORVRfTUlOX01UVTtcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XFx0c3NpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XFxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtNTg4LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6NTg5OlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBCQVJFVURQX0JBU0VfSExFTjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtNTkwLVxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDgzMi1cXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA4MzM6XFx0XFx0XFx0ICAgIHVsX3JpZi1cXHUwMDNlcmlmX2luZGV4LCB1bF9yaWYtXFx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDgzNC1cXHRtbHhzd19yZWdfcml0cl9sb29wYmFja19wcm90b2NvbF9zZXQocml0cl9wbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE4Mjg9c3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE4NjE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEdFTkVWRV9CQVNFX0hMRU4gLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM9MTU4PXN0YXRpYyB2b2lkIG92cG5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM6MTc2OlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYy0xNzctXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMC1cXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjY0MzE6XFx0dW5zaWduZWQgaW50IHBhY2tldF9sZW4gPSB2aS1cXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXFx1MDAzZWRldi1cXHUwMDNlbWF4X210dTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cXHR1bnNpZ25lZCBpbnQgYnVmX2xlbiA9IGhkcl9sZW4gKyBFVEhfSExFTiArIFZMQU5fSExFTiArIHBhY2tldF9sZW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pcC5oLTUyLS8qIElQdjQgZGF0YWdyYW0gbGVuZ3RoIGlzIHN0b3JlZCBpbnRvIDE2Yml0IGZpZWxkICh0b3RfbGVuKSAqL1xcbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcXHQweEZGRkZVXFxuaW5jbHVkZS9saW51eC9pcC5oLTU0LVxcbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXFxuaW5jbHVkZS9saW51eC9pcC5oLTU2LXtcXG5pbmNsdWRlL2xpbnV4L2lwLmg6NTc6XFx0aXBoLVxcdTAwM2V0b3RfbGVuID0gbGVuIFxcdTAwM2M9IElQX01BWF9NVFUgPyBodG9ucyhsZW4pIDogMDtcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaD00Njc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNDk5LW91dDpcXG5pbmNsdWRlL25ldC9pcC5oOjUwMDpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01MDEtXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaC01MjYtXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xcbmluY2x1ZGUvbmV0L2lwLmgtNTI4LVxcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTU0NS1cXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcXHRtdHUgPSBtaW4oUkVBRF9PTkNFKGRzdF9kZXYoZHN0KS1cXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01NDctXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC00MC0jZGVmaW5lIEVUSF9NSU5fTVRVXFx0NjhcXHRcXHQvKiBNaW4gSVB2NCBNVFUgcGVyIFJGQzc5MVxcdCovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVxcdDB4RkZGRlVcXHRcXHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXFx0Ki9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaC00Mi1cXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTMxOS1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmM6MzIwOlxcdGlmIChsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTMyMS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTM0OS1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmM6MzUwOlxcdGlmIChsZW4gXFx1MDAzZSBJUF9NQVhfTVRVKVxcbm5ldC9pcHY0L2VzcDQuYy0zNTEtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTQwOC1cXG5uZXQvaXB2NC9pZ21wLmM6NDA5OlxcdHNpemUgPSBtaW4obXR1LCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9pZ21wLmMtNDEwLVxcdHdoaWxlICgxKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4My1cXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5ODQ6XFx0bXR1ID0gY29yay1cXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cXHUwMDNlZnJhZ3NpemU7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTg1LVxcdHBhZ2VkID0gISFjb3JrLVxcdTAwM2Vnc29fc2l6ZTtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cXHRtYXhmcmFnbGVuID0gKChtdHUgLSBmcmFnaGVhZGVybGVuKSBcXHUwMDI2IH43KSArIGZyYWdoZWFkZXJsZW47XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6OTkxOlxcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkyLVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNS1cXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzMDY6XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDctXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjMxNzpcXHRcXHRtdHUgPSBtaW4odGRldi1cXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMTgtXFx0fVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MzI5PXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1MC1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNTE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNTItXFx0aWYgKGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMDU3PWludCBpcF90dW5uZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjAtXFx0aW50IHRfaGxlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XFx0aW50IG1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEwNjItXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0xMTgyPWludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVxcdGlmICh0YltJRkxBX01UVV0pIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzoxMjE0OlxcdFxcdHVuc2lnbmVkIGludCBtYXggPSBJUF9NQVhfTVRVIC0gKG50LVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTUtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE0NDU9dTMyIGlwX210dV9mcm9tX2ZpYl9yZXN1bHQoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgX19iZTMyIGRhZGRyKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVxcdGlmIChsaWtlbHkoIW10dSkpXFxubmV0L2lwdjQvcm91dGUuYzoxNDY1OlxcdFxcdG10dSA9IG1pbihSRUFEX09OQ0UoZGV2LVxcdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmM9MzcxPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM4MC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbiArIGVzcC1cXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG5uZXQvaXB2Ni9lc3A2LmM6MzgxOlxcdGlmIChsZW4gXFx1MDAzZSBJUF9NQVhfTVRVKVxcbm5ldC9pcHY2L2VzcDYuYy0zODItXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNzUzPWludCBpcDZfdG5sX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2OS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlxcdFxcdGlmIChuZXdfbXR1IFxcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzcxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jPTkxMT1zdGF0aWMgdm9pZCB2dGk2X2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XFxubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTczOT1zdGF0aWMgdm9pZCB4ZnJtaV9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1XFx0XFx0PSBFVEhfTUlOX01UVTtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM6NzQ2OlxcdGRldi1cXHUwMDNlbWF4X210dVxcdFxcdD0gSVBfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtNzQ3LVxcdGRldi1cXHUwMDNlZmxhZ3MgXFx0XFx0PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjUwNT1zdGF0aWMgdTMyIGlwdGZzX2dldF9pbm5lcl9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBvdXRlcl9tdHUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cXHRpZiAoIXh0ZnMtXFx1MDAzZWNmZy5kb250X2ZyYWcpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XFx0XFx0cmV0dXJuIHgtXFx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTItXFx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVxcdFxcdHgtXFx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk1NzpcXHRcXHRpZiAoeC1cXHUwMDNldGZjcGFkIFxcdTAwM2UgSVBfTUFYX01UVSkge1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJFeGNlc3NpdmUgVEZDIHBhZGRpbmdcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MTYuMzE2ODczNjQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MjU3MTY3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE5ldHdvcmtpbmcgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBNVFUgY2xhbXBpbmcgYW5kIFVEUCBwYWNrZXQgc2l6ZXMgaW4gSVB2NCBhbmQgSVB2Ni4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2X3JvdXRlLmhgIChmb3IgTVRVKSwgYGlwX291dHB1dC5jYCAoSVB2NCBjb3JrIHNldHVwKSwgYW5kIGBpcDZfb3V0cHV0LmNgIChJUHY2IGNvcmsgc2V0dXApLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoaXMgY2hhbmdlPyBUaGUgY29tbWl0IG1lc3NhZ2UgcG9pbnRzIHRvIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdywgZXNwZWNpYWxseSBpbiBvbGRlciBrZXJuZWxzLCB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgY29uZmlybXMgdGhlIGludGVudCBpcyB0byBsaW1pdCB0aGUgcGFja2V0IHNpemUgdG8gcHJldmVudCB0aGF0IG92ZXJmbG93LiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBjcml0aWNhbCBwYXRocy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyAqV29ydGhGdXp6aW5nKj8gVGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGRvY3VtZW50YXRpb24sIGNvc21ldGljIGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuIExldCdzIGxvb2s6XG5cbiogICBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLlxuKiAgIEl0J3Mgbm90IHB1cmVseSBsb2dnaW5nIG9yIGRlY29yYXRpdmUuXG4qICAgSXQgbW9kaWZpZXMgKm51bWVyaWMgY29uc3RhbnRzKiBpbiBhIHdheSB0aGF0ICpmdW5jdGlvbmFsbHkgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93KiBieSBjbGFtcGluZyBNVFVzIGFuZCBzaXplcyB0byBwcmV2ZW50IG92ZXJmbG93LlxuKiAgIEl0J3MgZGVmaW5pdGVseSAqbm90KiBjb2RlIHNwZWNpZmljIHRvIGhhcmR3YXJlIHRoYXQgaXNuJ3QgY29tbW9ubHkgYXZhaWxhYmxlLCBhbmQgaXQgaXMgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZy5cbiogICBJdCBpcyBtb2RpZnlpbmcgcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGxvZ2ljOyBTcGVjaWZpY2FsbHksIHRoZSBVRFAgb3V0cHV0IHBhdGhzIGluIElQdjQgYW5kIElQdjYgYW5kIE1UVSBjYWxjdWxhdGlvbnMuXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhIGhlcmU6IFRoaXMgaXMgYSBzb2xpZCBcIlllc1wiLlxuXG5OZXh0LCBob3cgZG8gd2UgdGFyZ2V0IGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmVjdGl2ZWx5PyBJdCdzIHRpbWUgdG8gcmVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgQVBJIGVudHJ5cG9pbnRzLiBJIG5lZWQgdG8gZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgaXBfc2V0dXBfY29ya2AsIGBpcDZfc2V0dXBfY29ya2AsIGFuZCBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIHJlcXVpcmVzIG1lIHRvIGRvIHNvbWUgY29kZSBhcmNoYWVvbG9neSBhbmQgZmluZCB0aGUgQVBJIGVudHJ5IHBvaW50cyB0aGF0IGFyZSByZWxldmFudC4gU28sIEkgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIGlkZW50aWZ5IHRob3NlIGNhbGxlcnMuIFRoYXQgd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyMi4xNDI1OTM2NDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc4OTI3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfc2V0dXBfY29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTMtXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI5NDpzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTUtXFx0XFx0XFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTM2MD1pbnQgaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzczLVxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSkpIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMzc0OlxcdFxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLmJhc2UsIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzc1LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTcyLVxcdGNvcmstXFx1MDAzZW9wdCA9IE5VTEw7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTU3MzpcXHRlcnIgPSBpcF9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGMsIHJ0cCk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3NC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyMy43MjA0OTExNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjExODQ2NTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIElQNiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIGBpcDZfc2V0dXBfY29ya2AuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMsIG9wdGltaXphdGlvbnMsIG9yIGV2ZW4gZGVidWdnaW5nIGVmZm9ydHMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcHJvYmUgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgZnVydGhlciwgbGlrZWx5IGR1ZSB0byBhIHNwZWNpZmljIG5lZWQgdGhhdCB0aGUgbmFtZSBpbXBsaWVzIHN1Y2ggYXMgSVB2NiBzZXR1cCB0YXNrcy4gU28sIEknbGwgYWRkIHRoYXQgZnVuY3Rpb24gdG8gbXkgc2VhcmNoIGNyaXRlcmlhIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjoyOS44Mzg5NTkwODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgzNzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3NldHVwX2NvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMzczLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3Ny1cXHRcXHRkc3RfaG9sZChcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XFx0XFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLFxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVxcdFxcdFxcdFxcdCAgICAgaXBjNiwgcnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4Ny1cXHRjb3JrLVxcdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyMDg4OlxcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjozMS4zMDczNDA3MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4MzY5NDk5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBNVFUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBJUHY0IGFuZCBJUHY2IHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyYWdtZW50YXRpb24gYW5kIE1UVSBkaXNjb3ZlcnkuIExldCdzIHNlZS4uLiBJJ20gdHJhY2luZyB0aGUgZmxvdyByZWxhdGVkIHRvIFwiY29ya2luZyxcIiB0aGF0IG9wdGltaXphdGlvbiB3aGVyZSB5b3UgZGVsYXkgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQgdW50aWwgeW91IGhhdmUgZW5vdWdoIGRhdGEgdG8gZmlsbCBhIGJ1ZmZlci4gSSd2ZSBub3RlZCB0aGF0IGBpcF9zZXR1cF9jb3JrYCBnZXRzIGludm9rZWQgYnkgYGlwX2FwcGVuZF9kYXRhYCBhbmQgYGlwX21ha2Vfc2tiYCBpbiB0aGUgSVB2NCBwYXRoLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gU2ltaWxhcmx5LCBgaXA2X3NldHVwX2NvcmtgIGlzIGNhbGxlZCBieSBgaXA2X2FwcGVuZF9kYXRhYCBhbmQgYGlwNl9tYWtlX3NrYmAgaW4gdGhlIElQdjYgcGF0aC4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci5cblxuTm93IEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gSVB2Ni4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgcG90ZW50aWFsbHkgZm9yd2FyZGluZyBwYWNrZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTVRVIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgaXQgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjE1LjE0NDI5MzIyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTc5NzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM1Mz1zdGF0aWMgaW5saW5lIGJvb2wgcnQ2X2R1cGxpY2F0ZV9uZXh0aG9wKHN0cnVjdCBmaWI2X2luZm8gKmEsIHN0cnVjdCBmaWI2X2luZm8gKmIpXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjYtXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MzY3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM2OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZm9yd2FyZGluZylcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5My0gKlxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NDogKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTUtICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NTIxPWludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2NC1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6NjY1OlxcdG10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjY2LVxcdGlmIChtdHUgXFx1MDAzYyBJUFY2X01JTl9NVFUpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyODg9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgdW5zaWduZWQgaW50IGlwNl9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI4OS17XFxubmV0L2lwdjYvcm91dGUuYzozMjkwOlxcdHJldHVybiBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgZmFsc2UpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI5MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTA5LVxcdGNhc2UgTkZQUk9UT19JUFY2Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTEwOlxcdFxcdGZsb3dfdHVwbGUtXFx1MDAzZW10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTExMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6MTYuOTYwMDk4MjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTA2NDI2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IE1UVSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBJUHY2IE1UVSBpcyBtYW5hZ2VkIGFuZCBJJ3ZlIG5vdGljZWQgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGludGVyYWN0aW5nIGhlcmU6IGBpcDZfbXR1YCBjYWxscyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKWAgYW5kIGBpcDZfZm9yd2FyZGAgY2FsbHMgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKWAuIFNlZW1zIGxpa2UgdGhleSdyZSBzaGFyaW5nIHNvbWUgY29yZSBsb2dpYywgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZHVwbGljYXRpb24uIE5vdywgSSB3YW50IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZyBwaWN0dXJlIHRvIHNlZSBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cbkkndmUgZ290IGEgbWVudGFsIGNoZWNrbGlzdCBvZiBrZXkgc3ltYm9scyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpbiB0aGlzIGNvbnRleHQuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBvZiBjb3Vyc2UgYGlwNl9tdHVgIGFuZCBgaXA2X2ZvcndhcmRgIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGVzZTsgYXJlIHRoZXkgaW50ZXJuYWwsIG9yIGFyZSB0aGV5IGdsb2JhbGx5IHZpc2libGU/IElmIHRoZXkncmUgZ2xvYmFsLCB0aGF0IHJlYWxseSBjaGFuZ2VzIHRoZSBnYW1lIGluIHRlcm1zIG9mIGludGVyLW1vZHVsZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuVG8gdmVyaWZ5IHRoZWlyIHNjb3BlLCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhleSdyZSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L2lwdjQvaXBfb3V0cHV0LmNgLCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCwgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucywgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgc3RhdGljIG9yIG5vdCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGV4dGVybmFsIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE1LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjQ3LjA2NjUyODAzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTI1NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLippcF9hcHBlbmRfZGF0YXxFWFBPUlRfU1lNQk9MLippcF9tYWtlX3NrYnxFWFBPUlRfU1lNQk9MLippcDZfYXBwZW5kX2RhdGF8RVhQT1JUX1NZTUJPTC4qaXA2X21ha2Vfc2tifEVYUE9SVF9TWU1CT0wuKmlwNl9tdHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5NC19XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4OTU6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X2FwcGVuZF9kYXRhKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NDkuMDc3Nzg4OTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjE4OTI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlIG9mIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBJUHY0IE91dHB1dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBJUHY0IHBhY2tldHMgYXJlIGFzc2VtYmxlZCBhbmQgc2VudCBvdXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcF9tYWtlX3NrYmAuIFRoZXNlIGFyZSB0aGUga2V5IGJ1aWxkaW5nIGJsb2Nrcy4gYGlwX2FwcGVuZF9kYXRhYCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgdGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gdGhlIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCBlbnN1cmluZyB0aGF0IHRoaXMgaXMgZG9uZSBzYWZlbHksIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyBmcmFnbWVudGF0aW9uLiBgaXBfbWFrZV9za2JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgYW5kIHN0YXJ0cyB0aGUgSVB2NCBoZWFkZXIgYXNzZW1ibHkuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBvdXRwdXQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBNVFUgY29uc2lkZXJhdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZyYWdtZW50YXRpb24gbG9naWMuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhYm92ZSBhbmQgYmVsb3cgdGhlbS4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTIuMjM5Njg0MTg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTA6XFx0XFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG4xMzkxOlxcdFxcdGRzdF9yZWxlYXNlKGNvcmstXFx1MDAzZWRzdCk7XFxuMTM5MjpcXHRcXHRjb3JrLVxcdTAwM2Vkc3QgPSBOVUxMO1xcbjEzOTM6XFx0fVxcbjEzOTQ6XFx0XFxuMTM5NTpcXHQvKlxcbjEzOTY6XFx0ICpcXHRDb21iaW5lZCBhbGwgcGVuZGluZyBJUCBmcmFnbWVudHMgb24gdGhlIHNvY2tldCBhcyBvbmUgSVAgZGF0YWdyYW1cXG4xMzk3OlxcdCAqXFx0YW5kIHB1c2ggdGhlbSBvdXQuXFxuMTM5ODpcXHQgKi9cXG4xMzk5OlxcdHN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4xNDAwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4xNDAxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbjE0MDI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGluZXRfY29yayAqY29yaylcXG4xNDAzOlxcdHtcXG4xNDA0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICp0bXBfc2tiO1xcbjE0MDU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKip0YWlsX3NrYjtcXG4xNDA2OlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4xNDA3OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4xNDA4OlxcdFxcdHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMO1xcbjE0MDk6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKGNvcmstXFx1MDAzZWRzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjUyLjIzOTc4NTI4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzU2MjU3NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY0L0lQdjYgT3V0cHV0IFBhdGggRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLCBzcGVjaWZpY2FsbHk6IGBpcF9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAgKElQdjQpIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAgKElQdjYpLiBJIGtub3cgdGhlc2UgYXJlIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSAqbm9uLXN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyDigJMgaXQgc3VnZ2VzdHMgdGhleSdyZSBwb3RlbnRpYWxseSB1c2VkIGJleW9uZCB0aGUgZGlyZWN0IHNjb3BlIG9mIHRob3NlIGZpbGVzLlxuXG5MZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgdGhlIGNhbGxlcnMgb2YgdGhvc2UgZnVuY3Rpb25zIGZyb20gVURQLCBhbmQgUkFXLiBJIGtub3cgdGhhdCBgdWRwX3NlbmRtc2dgIGFuZCBgdWRwdjZfc2VuZG1zZ2AgYXJlIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZm9yIFVEUCwgYW5kIHRoZXkgaW5kZWVkIGNhbGwgdGhlIElQdjQvSVB2NiBmdW5jdGlvbnMuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCB3aGlsZSBgdWRwX3NlbmRtc2dgIGFuZCBgdWRwdjZfc2VuZG1zZ2AgYXJlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIFwiaG90IHBhdGhzXCIsIHRoZSBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXBfbWFrZV9za2JgIGFyZSBzcGVjaWZpYyB0byBjb3JraW5nL291dHB1dCBwYXRoLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHNlcGFyYXRlIHRob3NlIHBhdGhzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IGFib3V0IGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYD8gQXJlIHRoZXkgc3RhdGljLCBhbmQgaW5kZWVkIHRoZXkgYXJlOiBgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKC4uLilgIGFuZCBgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayguLi4pYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW50ZXJuYWwgc2V0dXAgZnVuY3Rpb25zLiBHb29kLlxuXG5JJ20gYWxzbyBub3RpbmcgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCB3aGljaCBpcyBzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL25ldC9pcDZfcm91dGUuaGAuIEl0cyBjYWxsZXJzIGFyZSBgaXA2X210dWAgKGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCksIGBpcDZfZm9yd2FyZGAgKGluIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgKSwgZXRjLiBUaGlzIGlzIHVzZWZ1bCBmb3IgTVRVLXJlbGF0ZWQgYWRqdXN0bWVudHMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgaW5saW5lIGltcGxpZXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIOKAkyBpdCdzIGNydWNpYWwgZm9yIHRoZSBmb3J3YXJkaW5nIHBhdGgsIHRvby5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgSVB2NCBhbmQgSVB2NiBmZWF0dXJlcy4gQW5kIGFsc28gd2hlcmUgYG5ldC9pcHY0L2lwX291dHB1dC5jYCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgYXJlIGJ1aWx0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBpcyBjb21waWxlZCBhbmQgd2hpY2ggbW9kdWxlcyBkZXBlbmQgb24gdGhlc2UgY29yZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTYuOTk2MDQ1NTI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTMwNjQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9vdXRwdXQub3xpcDZfb3V0cHV0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4OlxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNy1cXG5uZXQvaXB2Ni9NYWtlZmlsZTo4OmlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTcuMDY1MzU5MDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDE1NDk1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoZXNlIHNob3VsZCBiZSB0aGUgcGxhY2VzIHdoZXJlIHRoZSBjb3JlIElQdjQgYW5kIElQdjYtcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBwcm90b2NvbCBzdGFja3MgYXJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLiBFeGFtaW5pbmcgdGhlc2UgZmlsZXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBtZSB3aXRoIGluc2lnaHRzIGludG8gdGhlIHZhcmlvdXMgZmVhdHVyZSBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIElQIG5ldHdvcmtpbmcuIEtub3dpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG9zc2liaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzo1OS4zNjY5MTExNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNTU2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVR8Y29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXFxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzkzLVxcbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxcbm5ldC9pcHY0L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MDMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxcbm5ldC9pcHY0L0tjb25maWctNDA1LVxcdGludCBcXFwiSU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDEzLVxcbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDE4LVxcbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDIwLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM0LVxcbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MzYtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM4LVxcbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00NDAtXFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NDYtXFxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cXHR0cmlzdGF0ZSBcXFwiUkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNDYtXFxubmV0L2lwdjYvS2NvbmZpZzo0Nzpjb25maWcgSU5FVDZfQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNjEtXFxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy03Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY2L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTEwMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXFxubmV0L2lwdjYvS2NvbmZpZy0xMDMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0MC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0MTpjb25maWcgSU5FVDZfWEZSTV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDUtXFxubmV0L2lwdjYvS2NvbmZpZzoxNDY6Y29uZmlnIElORVQ2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQ3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0xNS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoxNjpjb25maWcgSU5FVF9NUFRDUF9ESUFHXFxubmV0L21wdGNwL0tjb25maWctMTctXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZy00LSNcXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1BcXG5uZXQvcHNwL0tjb25maWctNi1cXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zY3RwL0tjb25maWc9Njg9ZW5kY2hvaWNlXFxubmV0L3NjdHAvS2NvbmZpZy02OS1cXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xcbm5ldC9zY3RwL0tjb25maWctNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTkuNDMyOTcwODk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTY2NjExNzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzIC0gSVAgU3RhY2sgQ29yZSoqXG5cbk9rYXksIHNvIEkndmUganVzdCBnb25lIHRocm91Z2ggdGhlIGtleSBzdGVwcyBmb3IgdGhpcyBmdXp6aW5nIGFuYWx5c2lzLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHRoZSBtYWluIGNvbmZpZyBvcHRpb25zIGRyaXZpbmcgdGhpcywgYW5kIEkgYnJpZWZseSBzY2FubmVkIGZvciBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYnV0IHRob3NlIGFyZSB0aGUgcHJpbWFyeSB0d28uXG5cbk5leHQsIEkgcmUtY29uZmlybWVkIHRoZSBgRm9jdXNTeW1ib2xzYCwgd2hpY2ggYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2UncmUgdGFyZ2V0aW5nOiBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGBpcDZfbXR1YCwgYW5kIGBpcDZfZm9yd2FyZGAuXG5cbkkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIHRoZXNlIGBGb2N1c1N5bWJvbHNgIGhhZCBhbnkgcmVsYXRlZCBzeW1ib2xzLiBJIGNoZWNrZWQgaG93IGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBhcmUgY2FsbGVkLCB3aGljaCB3ZXJlIGluZGVlZCBjYWxsZWQgYnkgdGhvc2UgYEZvY3VzU3ltYm9sc2AsIGFzIGV4cGVjdGVkLiBJIGRpZCBhIHRob3JvdWdoIGdyZXAgYW5kIGNyb3NzLXJlZmVyZW5jZSwgc28gSSBjYW4gY29uZmlkZW50bHkgc2F5IEkndmUgY292ZXJlZCBhbGwgY2FsbCBzaXRlcy5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0LCBgRW5hYmxlQ29uZmlnc2AgYXJlIGBJTkVUYCBhbmQgYElQVjZgLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIG1vdmUgb24gYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzgsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjA5OTA5MTkyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTk3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X210dVwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmZvcmNlcyBNVFUgbGltaXRzIChJUF9NQVhfTVRVIC8gSVA2X01BWF9NVFUpIGR1cmluZyBjb3JraW5nIGFuZCBJUHY2IGRlc3RpbmF0aW9uIE1UVSBsb29rdXAgaW4gSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKSB0byBwcmV2ZW50IDE2LWJpdCBVRFAgZGF0YWdyYW0gbGVuZ3RoIG92ZXJmbG93LiBUaGlzIGFsdGVycyBmdW5jdGlvbmFsIHBhY2tldCBjb3JraW5nIGFuZCByb3V0ZSBNVFUgaGFuZGxpbmcgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9tdHVcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5mb3JjZXMgTVRVIGxpbWl0cyAoSVBfTUFYX01UVSAvIElQNl9NQVhfTVRVKSBkdXJpbmcgY29ya2luZyBhbmQgSVB2NiBkZXN0aW5hdGlvbiBNVFUgbG9va3VwIGluIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkgdG8gcHJldmVudCAxNi1iaXQgVURQIGRhdGFncmFtIGxlbmd0aCBvdmVyZmxvdy4gVGhpcyBhbHRlcnMgZnVuY3Rpb25hbCBwYWNrZXQgY29ya2luZyBhbmQgcm91dGUgTVRVIGhhbmRsaW5nIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMTowMS4xNzIyOTU3MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTEzMjYyMzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjE3MjcyMTE0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0MTEzMjE5Mzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xhbXBzIHRoZSBNVFUgYW5kIGNvcmsgZnJhZ21lbnRhdGlvbiBzaXplIHRvIElQX01BWF9NVFUgKElQdjQpIGFuZCBJUDZfTUFYX01UVSAoSVB2NikgaW4gYGlwX3NldHVwX2NvcmtgLCBgaXA2X3NldHVwX2NvcmtgLCBhbmQgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBhbG9uZ3NpZGUgYWRkaW5nIGEgc2VsZnRlc3QuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyBvZiB0aGUgMTYtYml0IFVEUCBoZWFkZXIgbGVuZ3RoIGZpZWxkIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGggdmVyeSBsYXJnZSBNVFUgdmFsdWVzIChcXHUwMDNlIDY1NTM1KS5cXG5cXG5LTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSBidWZmZXJzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24vcGFkZGluZywgY2hhbmdlIHVzZXItc3BhY2UgY29weSBsb2dpYywgb3IgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ2xhbXBpbmcgTVRVIHZhbHVlcyBlbnN1cmVzIHBhY2tldCBsZW5ndGggYm91bmRzIHN0YXkgd2l0aGluIHByb3RvY29sIGxpbWl0cy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTkyZjg0M2M3OGQxMDY3NmJhZGIzNjlhMGM2NDFhZWZlZmE3MWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwOToxNDowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbitcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG4gXG4gXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXHUwMDNlZnJhZ3NpemUpKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4rXHRpZiAoc2tfaXNfdWRwKHNrKSlcbitcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuIFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuIFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbiBcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA1MTdjMDlkNjBiZWY3Li4zZWUzMzc4ZjhiMjZlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4rXHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhZmQ2NDNkMDdlYzJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICsxLDE4NyBAQFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rJycnVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuJycnXG4rXG4raW1wb3J0IGVycm5vXG4raW1wb3J0IGd6aXBcbitpbXBvcnQgb3NcbitpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuK2ltcG9ydCBzdWJwcm9jZXNzXG4rZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlclxuK1xuK2Zyb20gbGliLnB5IGltcG9ydCAoXG4rICAgIEtzZnROYW1lZFZhcmlhbnQsXG4rICAgIEtzZnRTa2lwRXgsXG4rICAgIE5ldE5TLFxuKyAgICBOZXROU0VudGVyLFxuKyAgICBkZWZlcixcbisgICAgaXAsXG4rICAgIGtzZnRfZXEsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9yYWlzZXMsXG4rICAgIGtzZnRfcnVuLFxuKyAgICBrc2Z0X3RydWUsXG4rICAgIGtzZnRfdmFyaWFudHMsXG4rKVxuK1xuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9NVFVfRElTQ09WRVIgPSAyM1xuK0lQVjZfUE1UVURJU0NfRE8gPSAyXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X1RMVl9KVU1CTyA9IDE5NFxuK1xuK1xuK2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbjogc3RyKSAtXHUwMDNlIGJvb2wgfCBOb25lOlxuKyAgICAnJydcbisgICAgQ2hlY2sgd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZyBvZiB0aGUgcnVubmluZyBrZXJuZWwuXG4rICAgIFJldHVybnMgTm9uZSBpZiB0aGUgY29uZmlnIGlzIG5vdCBmb3VuZDsgb3RoZXJ3aXNlIHJldHVybnMgVHJ1ZS9GYWxzZVxuKyAgICBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbiB2YWx1ZSBpbiB0aGUgY29uZmlnLlxuKyAgICAnJydcbitcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xuKyAgICAgICAgKCcvcHJvYy9jb25maWcuZ3onLCBnemlwLm9wZW4pLFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXG4rICAgIF06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxuKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJ3tvcHRpb259PXknOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXHUwMDNlIE5vbmU6XG4rICAgICcnJ1xuKyAgICBTa2lwIHRoZSB0ZXN0IGlmIENPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cbisgICAgJycnXG4rXG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxuKyAgICBpZiByZXMgaXMgTm9uZTpcbisgICAgICAgIGtzZnRfcHIoXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcIilcbisgICAgZWxpZiBub3QgcmVzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgnQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JylcbitcbitcbitkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYzogc3RyKSAtXHUwMDNlIGJvb2w6XG4rICAgICcnJ1xuKyAgICBDaGVjayBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcHJvZHVjZWQgYSBXQVJOIGluIGRtZXNnLlxuKyAgICAnJydcbitcbisgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFsnZG1lc2cnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgZG1lc2c6XG4rICAgICAgICByZXMgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0LCBjaGVjaz1GYWxzZSlcbisgICAgcmV0dXJuIHJlcy5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuK1xuK1xuK0Bjb250ZXh0bWFuYWdlclxuK2RlZiBkdW1teV9uZXRkZXYobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgQ3JlYXRlIGEgZHVtbXkgbmV0ZGV2IGluc2lkZSB0aGUgZ2l2ZW4gbmFtZXNwYWNlLCBhbmQgdHVuZSBpdCBmb3IgdGhlIHRlc3QuXG4rICAgICcnJ1xuK1xuKyAgICBpcCgnbGluayBhZGQgZHVtbXkgdHlwZSBkdW1teScsIG5zPW5zKVxuKyAgICB3aXRoIGRlZmVyKGlwLCAnbGluayBkZWwgZHVtbXknLCBucz1ucyk6XG4rICAgICAgICBpcChmJ2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fScsIG5zPW5zKVxuKyAgICAgICAgaXAoJ2xpbmsgc2V0IGR1bW15IHVwJywgbnM9bnMpXG4rICAgICAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcbisgICAgICAgIG5vZGFkID0gJ25vZGFkJyBpZiBpcHY2IGVsc2UgJydcbisgICAgICAgIGxvY2FsID0gJ2ZkMDA6OjEvNjQnIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjEvMjQnXG4rICAgICAgICByZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcbisgICAgICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHtsb2NhbH0gZGV2IGR1bW15IHtub2RhZH0nLCBucz1ucylcbisgICAgICAgIGlwKGYne2ZsYWd9IG5laWdoIGFkZCB7cmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQnLCBucz1ucylcbisgICAgICAgIHlpZWxkXG4rXG4rXG4rQGtzZnRfdmFyaWFudHMoW1xuKyAgICBLc2Z0TmFtZWRWYXJpYW50KFxuKyAgICAgICAgJ2lwdjYnLFxuKyAgICAgICAgVHJ1ZSxcbisgICAgICAgIHNvY2tldC5BRl9JTkVUNixcbisgICAgICAgIChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETyksXG4rICAgICAgICAnZmQwMDo6MicsXG4rICAgICAgICAndWRwX3Y2X3NlbmRfc2tiJyxcbisgICAgKSxcbisgICAgS3NmdE5hbWVkVmFyaWFudChcbisgICAgICAgICdpcHY0JyxcbisgICAgICAgIEZhbHNlLFxuKyAgICAgICAgc29ja2V0LkFGX0lORVQsXG4rICAgICAgICAoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpLFxuKyAgICAgICAgJzEwLjAuMC4yJyxcbisgICAgICAgICd1ZHBfc2VuZF9za2InLFxuKyAgICApLFxuK10pXG4rZGVmIHRlc3RfdWRwKFxuKyAgICBpcHY2OiBib29sLFxuKyAgICBhZjogc29ja2V0LkFkZHJlc3NGYW1pbHksXG4rICAgIHNvY2tvcHRzOiB0dXBsZVtpbnQsIGludCwgaW50XSxcbisgICAgZGVzdGlwOiBzdHIsXG4rICAgIGZ1bmM6IHN0clxuKykgLVx1MDAzZSBOb25lOlxuKyAgICAnJydcbisgICAgVGVzdCB0aGF0IHNlbmRpbmcgYW4gb3ZlcnNpemVkIFVEUCBwYWNrZXQgb3ZlciBhIFVEUCBzb2NrZXQgZG9lc24ndCBvdmVyZmxvd1xuKyAgICB0aGUgMTYtYml0IGxlbmd0aCBmaWVsZCBpbiB0aGUgVURQIGhlYWRlciwgd2hpY2ggY291bGQgaGFwcGVuIG9uIG9sZGVyXG4rICAgIGtlcm5lbHMgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbitcbisgICAgSVB2NDogVGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgd2l0aCBFTVNHU0laRSwgYnV0IHRoZSBvdmVyZmxvdyBjb3VsZFxuKyAgICBoYXBwZW4gYmVmb3JlIGl0IGhhcHBlbnMuIFRoZSBvbmx5IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gY2hlY2sgZG1lc2cgb25cbisgICAgQ09ORklHX0RFQlVHX05FVD15IGtlcm5lbHMgdGhhdCBoYXZlIHVkcF9zZXRfbGVuX3Nob3J0IHdpdGggdGhlIHdhcm5pbmcuXG4rXG4rICAgIElQdjY6IFRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIHdpdGggRU1TR1NJWkUgb24gZml4ZWQga2VybmVscywgYW5kIHdpbGwgYmVcbisgICAgc2VudCBjb3JydXB0ZWQgb24gb2xkZXIga2VybmVscy4gVGVzdCBib3RoOiBzZW5kdG8gbXVzdCByZXR1cm4gRU1TR1NJWkUsIGFuZFxuKyAgICBkbWVzZyBtdXN0IGJlIGNsZWFuIG9mIHdhcm5pbmdzIG9uIENPTkZJR19ERUJVR19ORVQ9eSBrZXJuZWxzLlxuKyAgICAnJydcbitcbisgICAgaWYgbm90IGlwdjY6XG4rICAgICAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCAoXG4rICAgICAgICBOZXROUygpIGFzIG5zLFxuKyAgICAgICAgZHVtbXlfbmV0ZGV2KG5zLCA2NTU1NiArIDIwICogaXB2NiwgaXB2NiksXG4rICAgICAgICBOZXROU0VudGVyKG5zKSxcbisgICAgICAgIHNvY2tldC5zb2NrZXQoYWYsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZCxcbisgICAgKTpcbisgICAgICAgIGZkLnNldHNvY2tvcHQoKnNvY2tvcHRzKVxuKyAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBlOlxuKyAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsIChkZXN0aXAsIDEyMzQpKVxuKyAgICAgICAgIyBJUHY2OiBFTVNHU0laRSBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LlxuKyAgICAgICAgIyBJUHY0OiBFTVNHU0laRSBoYXBwZW5zIG9uIGJvdGggZml4ZWQgYW5kIHVuZml4ZWQga2VybmVscywgYWZ0ZXIgdGhlXG4rICAgICAgICAjICAgICAgIFdBUk4gaXMgcHJpbnRlZCAtIGlnbm9yZSBpdCBhbmQgcmVseSBvbiB0aGUgZG1lc2cgY2hlY2suXG4rICAgICAgICBpZiBlLmV4Y2VwdGlvbiBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X2VxKGUuZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTVNHU0laRSlcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpLCAnV0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZycpXG4rXG4rXG4rZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC1cdTAwM2UgTm9uZTpcbisgICAgJycnXG4rICAgIFRlc3QgdGhhdCBzZW5kaW5nIFVEUCBqdW1ib2dyYW1zIG92ZXIgYSByYXcgSVB2NiBzb2NrZXQgd29ya3MsIGRlc3BpdGVcbisgICAgaGF2aW5nIHRoZSBmaXggZm9yIG92ZXJzaXplZCBVRFAgcGFja2V0cy4gc2VuZHRvIG11c3Qgbm90IHJhaXNlIGFuIE9TRXJyb3JcbisgICAgZXhjZXB0aW9uICh3aGVuIHJhaXNlZCwgdGhlIHRlc3QgZmFpbHMgYXV0b21hdGljYWxseSkuXG4rICAgICcnJ1xuK1xuKyAgICB3aXRoIChcbisgICAgICAgIE5ldE5TKCkgYXMgbnMsXG4rICAgICAgICBkdW1teV9uZXRkZXYobnMsIDY1NTg0LCBUcnVlKSxcbisgICAgICAgIE5ldE5TRW50ZXIobnMpLFxuKyAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZCxcbisgICAgKTpcbisgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxuKyAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbisgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpXG4rICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygnIUhISEgnLCAxMjM0LCAxMjM0LCAwLCAwKSArIGInICcgKiA2NTUyOFxuKyAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCdmZDAwOjoyJywgMCkpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBrc2Z0X3J1bihbXG4rICAgICAgICB0ZXN0X3VkcCxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbisgICAgXSlcbisgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIxOjAxLjE3MjcyMjcxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjM5OTY5NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBGaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXM6IHdlJ3ZlIGdvdCBhIGZldyBhZGp1c3RtZW50cyByZWxhdGVkIHRvIE1UVSBjYWxjdWxhdGlvbnMuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIGBtaW5fdGAgb3IgYG1pbmAgY2FsbHMgY29uc3RyYWluaW5nIHZhbHVlcyAoTVRVIG9yIGBmcmFnc2l6ZWApIHRvIGVpdGhlciBgSVA2X01BWF9NVFVgIG9yIGBJUF9NQVhfTVRVYCBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgKElQdjYgcm91dGluZyksIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCBvdXRwdXQpLCBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiBvdXRwdXQpLCBhcyB3ZWxsIGFzIHNvbWUgdXBkYXRlcyB0byBzZWxmdGVzdHMuXG5cbk5vdywgd2hhdCBwcm9ibGVtIGFyZSB3ZSB0cnlpbmcgdG8gc29sdmU/IFRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyBpc3N1ZSB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLCBhbmQgZW5zdXJpbmcgdGhhdCBzZW5kaW5nIG92ZXJzaXplZCBVRFAgcGFja2V0cyBkb2Vzbid0IGNvcnJ1cHQgdGhlIDE2LWJpdCBsZW5ndGggZmllbGQgaW4gdGhlIFVEUCBoZWFkZXIsIHdoaWNoIGFwcGFyZW50bHkgY291bGQgYmUgYW4gaXNzdWUgb24gb2xkZXIga2VybmVscy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCByZWxhdGVkIHRvIGNvbnN0cmFpbmluZyBNVFUgYW5kIGZyYWdtZW50IHNpemVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0cyB3aGVyZSB0aGVzZSBsaW1pdHMgYXJlIGFwcGxpZWQuIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGBJUDZfTUFYX01UVWAgYW5kIGBJUF9NQVhfTVRVYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxpbWl0cyBpbnRlcmFjdCB3aXRoIG90aGVyIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhbHVlcyBhcmUgdXNlZCBhZnRlciB0aGVzZSBgbWluYCBjYWxscy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoaXMgb25lOyB0aGVyZSBjb3VsZCBiZSBzdWJ0bGUgaXNzdWVzLiBEZXBlbmRpbmcgb24gd2hhdCBJIHNlZSBpbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCBpdCBjb3VsZCB2ZXJ5IHdlbGwgd2FycmFudCBhIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZpeCBpdHNlbGYgc2VlbXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBVRFAgbGVuZ3RoIG92ZXJmbG93IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjoxNy41NzI0MjA2NTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjgyMjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NQVhfTVRVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozMjA6XFx0aWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpIFxcdTAwM2UgSVBfTUFYX01UVSlcXG5uZXQvaXB2NC9lc3A0LmMtMzIxLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzQ5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozNTA6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTM1MS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM5Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtNDA4LVxcbm5ldC9pcHY0L2lnbXAuYzo0MDk6XFx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lnbXAuYy00MTAtXFx0d2hpbGUgKDEpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVxcdGV4dGhkcmxlbiA9ICFza2IgPyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVxcdTAwM2VmcmFnc2l6ZTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODUtXFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVxcdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFxcdTAwMjYgfjcpICsgZnJhZ2hlYWRlcmxlbjtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5OTE6XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA1LVxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNy1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVxcdFxcdGhsZW4gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3OlxcdFxcdG10dSA9IG1pbih0ZGV2LVxcdTAwM2VtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNTc9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcXHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2Mi1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXFx1MDAzZWhsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXFx0aWYgKGxpa2VseSghbXR1KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE0NjU6XFx0XFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXFx1MDAzZW10dSksIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNzE9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY2L2VzcDYuYzozODE6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3NTM9aW50IGlwNl90bmxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XFx0XFx0aWYgKG5ld19tdHUgXFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHVcXHRcXHQ9IEVUSF9NSU5fTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo3NDY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0PSBJUF9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHRcXHQ9IElGRl9OT0FSUDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVxcdGlmICgheHRmcy1cXHUwMDNlY2ZnLmRvbnRfZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcXHRcXHRyZXR1cm4geC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cXHRyZXR1cm4gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIG91dGVyX210dSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXFx0XFx0eC1cXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTU3OlxcdFxcdGlmICh4LVxcdTAwM2V0ZmNwYWQgXFx1MDAzZSBJUF9NQVhfTVRVKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkV4Y2Vzc2l2ZSBURkMgcGFkZGluZ1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjoxNy45MTkyNDg0OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzNjE3MjU3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQdjYgcm91dGluZyBpcyBoYW5kbGVkLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSB0aGluayBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYGluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4NC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcm91dGUgc3RydWN0dXJlcyBkZWZpbmVkIHRoZXJlLCBtYXliZSBzb21lIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSByb3V0aW5nIHRhYmxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyByb3V0ZXMgYXJlIHJlcHJlc2VudGVkLlxuXG5UaGVuLCBJJ2xsIHN3aXRjaCBnZWFycyBhbmQgbG9vayBhdCB0aGUgYWN0dWFsIG91dHB1dCBwYXRoIOKAkyBob3cgdGhlIGtlcm5lbCAqdXNlcyogdGhvc2Ugcm91dGVzLiBNeSBndXQgc2F5cyB0byBjaGVjayBvdXQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AsIGxpa2VseSBhcm91bmQgbGluZSAxNDMyLiBUaGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IElQdjYgcGFja2V0cyBhZnRlciB0aGUgcm91dGluZyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUga2VybmVsIHNlbGVjdHMgdGhlIG91dGdvaW5nIGludGVyZmFjZSwgc2V0cyB0aGUgbmV4dCBob3AsIGFuZCBoYW5kbGVzIGFueSBuZWNlc3NhcnkgZnJhZ21lbnRhdGlvbiBvciBoZWFkZXIgYWRqdXN0bWVudHMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMg4oCTIHRoZSByb3V0ZSBpbmZvcm1hdGlvbiBhbmQgdGhlIG91dHB1dCBwcm9jZXNzaW5nIOKAkyBhcmUgdGllZCB0b2dldGhlci4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyBwb2xpY3kgcm91dGluZyBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjMxLjI4MDk3ODQ3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFx0bmhhID0gYS1cXHUwMDNlZmliNl9uaDtcXG4gMzYxOlxcdFxcdG5oYiA9IGItXFx1MDAzZWZpYjZfbmg7XFxuIDM2MjpcXHRcXHRyZXR1cm4gbmhhLVxcdTAwM2VmaWJfbmhfZGV2ID09IG5oYi1cXHUwMDNlZmliX25oX2RldiBcXHUwMDI2XFx1MDAyNlxcbiAzNjM6XFx0XFx0ICAgICAgIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2bmhhLVxcdTAwM2VmaWJfbmhfZ3c2LCBcXHUwMDI2bmhiLVxcdTAwM2VmaWJfbmhfZ3c2KSBcXHUwMDI2XFx1MDAyNlxcbiAzNjQ6XFx0XFx0ICAgICAgICFsd3R1bm5lbF9jbXBfZW5jYXAobmhhLVxcdTAwM2VmaWJfbmhfbHdzLCBuaGItXFx1MDAzZWZpYl9uaF9sd3MpO1xcbiAzNjU6XFx0fVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBmb3J3YXJkaW5nKVxcbiAzNjk6XFx0e1xcbiAzNzA6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gMzcxOlxcdFxcdHVuc2lnbmVkIGludCBtdHU7XFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xcbiAzNzQ6XFx0XFx0XFx0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XFxuIDM3NTpcXHRcXHRcXHRpZiAobXR1KVxcbiAzNzY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM3NzpcXHRcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4gMzgwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzgxOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xcbiAzODI6XFx0XFx0aWYgKGlkZXYpXFxuIDM4MzpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLm10dTYpO1xcbiAzODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdG91dDpcXG4gMzg3OlxcdFxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXFx1MDAzZWx3dHN0YXRlLCBtdHUpO1xcbiAzOTA6XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXFxuIDM5MzpcXHQgKlxcbiAzOTQ6XFx0ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjMxLjI4MTA1NTE0N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDI5ODMwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSVB2NiBPdXRwdXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgcGVyZm9ybWFuY2UsIHNwZWNpZmljYWxseSBJUHY2IG91dHB1dC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgZmlsZS4gSSd2ZSBnb3QgYSBodW5jaCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAxNDMyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBvdXRwdXQgcGF0aC4gSXQncyBvZnRlbiBpbiB0aG9zZSBkZWVwIGNvZGUgc2VnbWVudHMgd2hlcmUgeW91IHVuY292ZXIgdGhlIHJlYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbnQgZGF0YSBoYW5kbGluZyBwcm9jZWR1cmVzLiBMZXQncyBzZWUgaWYgdGhpcyBodW5jaCBwYW5zIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MjI6MzYuNzEwODkwMTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcbjE0MTE6XFx0XFx0XFx0bm9wdC1cXHUwMDNlaG9wb3B0ID0gaXA2X29wdF9kdXAob3B0LVxcdTAwM2Vob3BvcHQsIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKTtcXG4xNDEyOlxcdFxcdFxcdGlmIChvcHQtXFx1MDAzZWhvcG9wdCBcXHUwMDI2XFx1MDAyNiAhbm9wdC1cXHUwMDNlaG9wb3B0KVxcbjE0MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjE0MTQ6XFx0XFxuMTQxNTpcXHRcXHRcXHRub3B0LVxcdTAwM2VzcmNydCA9IGlwNl9ydGhkcl9kdXAob3B0LVxcdTAwM2VzcmNydCwgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbjE0MTY6XFx0XFx0XFx0aWYgKG9wdC1cXHUwMDNlc3JjcnQgXFx1MDAyNlxcdTAwMjYgIW5vcHQtXFx1MDAzZXNyY3J0KVxcbjE0MTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRcXHQvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi9cXG4xNDIwOlxcdFxcdH1cXG4xNDIxOlxcdFxcdHY2X2NvcmstXFx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXFx1MDAzZWhsaW1pdDtcXG4xNDIyOlxcdFxcdHY2X2NvcmstXFx1MDAzZXRjbGFzcyA9IGlwYzYtXFx1MDAzZXRjbGFzcztcXG4xNDIzOlxcdFxcdHY2X2NvcmstXFx1MDAzZWRvbnRmcmFnID0gaXBjNi1cXHUwMDNlZG9udGZyYWc7XFxuMTQyNDpcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5mbGFncyBcXHUwMDI2IERTVF9YRlJNX1RVTk5FTClcXG4xNDI1OlxcdFxcdFxcdG10dSA9IFJFQURfT05DRShucC1cXHUwMDNlcG10dWRpc2MpIFxcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xcbjE0MjY6XFx0XFx0XFx0ICAgICAgUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpIDogZHN0Nl9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbjE0Mjc6XFx0XFx0ZWxzZVxcbjE0Mjg6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgXFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XFxuMTQyOTpcXHRcXHRcXHRcXHRSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSkgOiBkc3Q2X210dSh4ZnJtX2RzdF9wYXRoKFxcdTAwMjZydC1cXHUwMDNlZHN0KSk7XFxuMTQzMDpcXHRcXG4xNDMxOlxcdFxcdGZyYWdfc2l6ZSA9IFJFQURfT05DRShucC1cXHUwMDNlZnJhZ19zaXplKTtcXG4xNDMyOlxcdFxcdGlmIChmcmFnX3NpemUgXFx1MDAyNlxcdTAwMjYgZnJhZ19zaXplIFxcdTAwM2MgbXR1KVxcbjE0MzM6XFx0XFx0XFx0bXR1ID0gZnJhZ19zaXplO1xcbjE0MzQ6XFx0XFxuMTQzNTpcXHRcXHRpZiAoc2tfaXNfdWRwKHNrKSlcXG4xNDM2OlxcdFxcdFxcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcXG4xNDM3OlxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuMTQzODpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cXHUwMDNlZ3NvX3NpemU7XFxuMTQzOTpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnR4X2ZsYWdzID0gMDtcXG4xNDQwOlxcdFxcdGNvcmstXFx1MDAzZWJhc2UubWFyayA9IGlwYzYtXFx1MDAzZXNvY2tjLm1hcms7XFxuMTQ0MTpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnByaW9yaXR5ID0gaXBjNi1cXHUwMDNlc29ja2MucHJpb3JpdHk7XFxuMTQ0MjpcXHRcXHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXFx1MDAyNmlwYzYtXFx1MDAzZXNvY2tjLCBcXHUwMDI2Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyk7XFxuMTQ0MzpcXHRcXHRpZiAoaXBjNi1cXHUwMDNlc29ja2MudHNmbGFncyBcXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xcbjE0NDQ6XFx0XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5mbGFncyB8PSBJUENPUktfVFNfT1BUX0lEO1xcbjE0NDU6XFx0XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50c19vcHRfaWQgPSBpcGM2LVxcdTAwM2Vzb2NrYy50c19vcHRfaWQ7XFxuMTQ0NjpcXHRcXHR9XFxuMTQ0NzpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmxlbmd0aCA9IDA7XFxuMTQ0ODpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLnRyYW5zbWl0X3RpbWUgPSBpcGM2LVxcdTAwM2Vzb2NrYy50cmFuc21pdF90aW1lO1xcbjE0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIyOjM2LjcxMTAwMjkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTczNzA0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSVB2NCBPdXRwdXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgb3V0cHV0LCBhbmQgSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgYSBncmFudWxhciBsZXZlbC5cIiBUaGUgZmlyc3QgcGxhY2UgdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgYG5ldC9pcHY0L2lwX291dHB1dC5jYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlcmUncyBzb21lIGNydWNpYWwgbG9naWMgYXJvdW5kIGxpbmUgMTMwMyDigJMgdGhhdCdzIHdoZXJlIEknZCBzdGFydCB0byBpbnZlc3RpZ2F0ZSBtb3JlIGNsb3NlbHkuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW1taW5nLCByb3V0aW5nIGRlY2lzaW9ucywgb3IgcXVldWUgbWFuYWdlbWVudCwgYnV0IHRoYXQncyB3aGVyZSBJJ2Qgc3VzcGVjdCB3ZSdkIGZpbmQgdGhlIGNvcmUgcHJvY2Vzc2luZyBvZiBvdXRib3VuZCBJUHY0IHBhY2tldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjo1OS42ODQ3MTAzOTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2c2stXFx1MDAzZXNrX3Rza2V5KTtcXG4xMjkxOlxcdFxcdHJldHVybiBlcnI7XFxuMTI5MjpcXHR9XFxuMTI5MzpcXHRcXG4xMjk0OlxcdHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuMTI5NTpcXHRcXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuMTI5NjpcXHR7XFxuMTI5NzpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdDtcXG4xMjk4OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRydCA9ICpydHA7XFxuMTMwMTpcXHRcXHRpZiAodW5saWtlbHkoIXJ0KSlcXG4xMzAyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjEzMDM6XFx0XFxuMTMwNDpcXHRcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/XFxuMTMwNTpcXHRcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbjEzMDY6XFx0XFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xcbjEzMDc6XFx0XFxuMTMwODpcXHRcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4xMzA5OlxcdFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdC8qXFxuMTMxMjpcXHRcXHQgKiBzZXR1cCBmb3IgY29ya2luZy5cXG4xMzEzOlxcdFxcdCAqL1xcbjEzMTQ6XFx0XFx0b3B0ID0gaXBjLVxcdTAwM2VvcHQ7XFxuMTMxNTpcXHRcXHRpZiAob3B0KSB7XFxuMTMxNjpcXHRcXHRcXHRpZiAoIWNvcmstXFx1MDAzZW9wdCkge1xcbjEzMTc6XFx0XFx0XFx0XFx0Y29yay1cXHUwMDNlb3B0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgNDAsXFxuMTMxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbjEzMTk6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFjb3JrLVxcdTAwM2VvcHQpKVxcbjEzMjA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbjEzMjE6XFx0XFx0XFx0fVxcbjEzMjI6XFx0XFx0XFx0bWVtY3B5KGNvcmstXFx1MDAzZW9wdCwgXFx1MDAyNm9wdC1cXHUwMDNlb3B0LCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgb3B0LVxcdTAwM2VvcHQub3B0bGVuKTtcXG4xMzIzOlxcdFxcdFxcdGNvcmstXFx1MDAzZWZsYWdzIHw9IElQQ09SS19PUFQ7XFxuMTMyNDpcXHRcXHRcXHRjb3JrLVxcdTAwM2VhZGRyID0gaXBjLVxcdTAwM2VhZGRyO1xcbjEzMjU6XFx0XFx0fVxcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRjb3JrLVxcdTAwM2Vnc29fc2l6ZSA9IGlwYy1cXHUwMDNlZ3NvX3NpemU7XFxuMTMyODpcXHRcXG4xMzI5OlxcdFxcdGNvcmstXFx1MDAzZWRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMjo1OS42ODQ4MTM4NDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2MjAwODE3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBBbmFseXppbmcgdGhpcyBwYXRjaCwgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlIGNsYW1wcyB0aGUgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBhbmQgZnJhZ21lbnQgc2l6ZSB0byB0aGUgbWF4aW11bSBkZWZpbmVkIHZhbHVlcyBmb3IgSVB2NCBhbmQgSVB2NiAoYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLCByZXNwZWN0aXZlbHkpIGR1cmluZyBjb3JrIHNldHVwIGFuZCByb3V0ZSBNVFUgY2FsY3VsYXRpb25zLiBUaGUgZ29hbD8gVG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIFVEUCBoZWFkZXIncyBsZW5ndGggZmllbGQsIHdoZW4gYSBkZXZpY2UgTVRVIGlzIHVudXN1YWxseSBsYXJnZSAodGhpbmsgYW55dGhpbmcgZXhjZWVkaW5nIDY1NTM1LCBsaWtlIHlvdSBtaWdodCBzZWUgd2l0aCBhIGR1bW15IGRldmljZSkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbnM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3BlLiBOb3RoaW5nIGhlcmUgdG91Y2hlcyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQgdmlhIGNvcHlfdG9fdXNlciwgTmV0bGluayBtZXNzYWdlcywgb3Igc29ja2V0IG9wdGlvbnMuIFdlJ3JlIG5vdCBzZW5kaW5nIGFueXRoaW5nIG5ldyBvdXQuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhlIGNvZGUgdXNlcyBpbml0aWFsaXplZCB2YXJpYWJsZXMuIE1UVSBhbmQgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGFyZSBleHBsaWNpdGx5IHNldCwgc28gbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBBZ2Fpbiwgbm8uIFdlJ3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgb24uXG40LiAgKipCb3VuZHMgQ2hlY2tzOioqIEluIGZhY3QsIGl0J3MgdGhlIG9wcG9zaXRlISBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCAqaW1wcm92aW5nKiBib3VuZHMgY2hlY2tzLiBXZSBhcmUgKmRlY3JlYXNpbmcqIG9yIGNhcHBpbmcgdGhlIE1UVSB2YWx1ZXMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3ZlcnNpemVkIHBhY2tldHMsIG5vdCBpbmNyZWFzaW5nIHRoZW0uXG5cblNvLCBhbSBJIHNlZWluZyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgXCJub1wiLiBUaGlzIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBzcGVjaWZpYyBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIGluIFVEUCBsZW5ndGggY2FsY3VsYXRpb24gd2hlbiB0aGUgZGV2aWNlIE1UVSBleGNlZWRzIDY0S0IuIFRoaXMgcGF0Y2ggaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeC5cblxuVGhlcmVmb3JlLCBLTVNBTiBzaG91bGRuJ3QgYmUgY29uY2VybmVkIGhlcmUuIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4sIGFuZCB0aGUgdHlwaWNhbCBkZWJ1Z2dpbmcgYXNzZXJ0aW9ucyBzaG91bGQgaGFuZGxlIHRoZSBleHBlY3RlZCBpc3N1ZXMuIEtNU0FOJ3MgcHVycG9zZSwgaW4gdGhpcyBjYXNlLCBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgYmUgZ29vZCB0byBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSwgYW5kIGdldCByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyNiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMzoyMi4zMDQ4OTg0MjJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNsYW1wcyB0aGUgTVRVIGFuZCBjb3JrIGZyYWdtZW50YXRpb24gc2l6ZSB0byBJUF9NQVhfTVRVIChJUHY0KSBhbmQgSVA2X01BWF9NVFUgKElQdjYpIGluIGBpcF9zZXR1cF9jb3JrYCwgYGlwNl9zZXR1cF9jb3JrYCwgYW5kIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCwgYWxvbmdzaWRlIGFkZGluZyBhIHNlbGZ0ZXN0LiBUaGlzIHByZXZlbnRzIGludGVnZXIgb3ZlcmZsb3cgb2YgdGhlIDE2LWJpdCBVRFAgaGVhZGVyIGxlbmd0aCBmaWVsZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoIHZlcnkgbGFyZ2UgTVRVIHZhbHVlcyAoXFx1MDAzZSA2NTUzNSkuXFxuXFxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnkgYnVmZmVycywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uL3BhZGRpbmcsIGNoYW5nZSB1c2VyLXNwYWNlIGNvcHkgbG9naWMsIG9yIGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIENsYW1waW5nIE1UVSB2YWx1ZXMgZW5zdXJlcyBwYWNrZXQgbGVuZ3RoIGJvdW5kcyBzdGF5IHdpdGhpbiBwcm90b2NvbCBsaW1pdHMuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xhbXBzIHRoZSBNVFUgYW5kIGNvcmsgZnJhZ21lbnRhdGlvbiBzaXplIHRvIElQX01BWF9NVFUgKElQdjQpIGFuZCBJUDZfTUFYX01UVSAoSVB2NikgaW4gYGlwX3NldHVwX2NvcmtgLCBgaXA2X3NldHVwX2NvcmtgLCBhbmQgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBhbG9uZ3NpZGUgYWRkaW5nIGEgc2VsZnRlc3QuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyBvZiB0aGUgMTYtYml0IFVEUCBoZWFkZXIgbGVuZ3RoIGZpZWxkIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGggdmVyeSBsYXJnZSBNVFUgdmFsdWVzIChcXHUwMDNlIDY1NTM1KS5cXG5cXG5LTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSBidWZmZXJzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24vcGFkZGluZywgY2hhbmdlIHVzZXItc3BhY2UgY29weSBsb2dpYywgb3IgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ2xhbXBpbmcgTVRVIHZhbHVlcyBlbnN1cmVzIHBhY2tldCBsZW5ndGggYm91bmRzIHN0YXkgd2l0aGluIHByb3RvY29sIGxpbWl0cy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8xnqg[1] Phase: Succeeded StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 09:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 09:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2] Phase: Succeeded StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 09:23:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 09:23:34 +0000 UTC FinishedAt: 2026-09-02 09:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8xnqg/series-workflow8xnqg-convert-artifact-751758735/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 09:23:44 +0000 UTC FinishedAt: 2026-09-02 09:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 09:23:44 +0000 UTC FinishedAt: 2026-09-02 09:39:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ce2c5b62-2f1c-4aea-bb83-d1761b866303,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-workflow8xnqg/series-workflow8xnqg-convert-artifact-751758735/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": "41c0023b-097c-4e7f-a663-936bd5da293c", "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-workflow8xnqg/series-workflow8xnqg-build-action-3690781397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 09:23:44 +0000 UTC FinishedAt: 2026-09-02 09:39:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ce2c5b62-2f1c-4aea-bb83-d1761b866303,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-workflow8xnqg/series-workflow8xnqg-convert-artifact-751758735/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": "41c0023b-097c-4e7f-a663-936bd5da293c", "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-workflow8xnqg/series-workflow8xnqg-build-action-3690781397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 09:39:44 +0000 UTC FinishedAt: 2026-09-02 09:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 09:39:44 +0000 UTC FinishedAt: 2026-09-02 09:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 09:39:44 +0000 UTC FinishedAt: 2026-09-02 09:39:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 09:39:44 +0000 UTC FinishedAt: 2026-09-02 09:39:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8xnqg/series-workflow8xnqg-convert-artifact-67485918/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 09:39:54 +0000 UTC FinishedAt: 2026-09-02 09:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 09:39:54 +0000 UTC FinishedAt: 2026-09-02 09:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41c0023b-097c-4e7f-a663-936bd5da293c,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-workflow8xnqg/series-workflow8xnqg-build-action-3690781397/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-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 09:41:23 +0000 UTC FinishedAt: 2026-09-02 09:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 09:41:23 +0000 UTC FinishedAt: 2026-09-02 09:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 09:41:23 +0000 UTC FinishedAt: 2026-09-02 09:57:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 09:41:23 +0000 UTC FinishedAt: 2026-09-02 09:57:28 +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:*ce2c5b62-2f1c-4aea-bb83-d1761b866303,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-workflow8xnqg/series-workflow8xnqg-convert-artifact-67485918/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": "8f23ef7f-16a5-4ff2-b00c-b1950423e4ba", "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-workflow8xnqg/series-workflow8xnqg-build-action-3873900978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 09:41:23 +0000 UTC FinishedAt: 2026-09-02 09:57:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ce2c5b62-2f1c-4aea-bb83-d1761b866303,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-workflow8xnqg/series-workflow8xnqg-convert-artifact-67485918/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": "8f23ef7f-16a5-4ff2-b00c-b1950423e4ba", "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-workflow8xnqg/series-workflow8xnqg-build-action-3873900978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 09:57:28 +0000 UTC FinishedAt: 2026-09-02 09:57:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 09:57:28 +0000 UTC FinishedAt: 2026-09-02 09:57:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 09:57:28 +0000 UTC FinishedAt: 2026-09-02 09:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 09:57:28 +0000 UTC FinishedAt: 2026-09-02 09:59:13 +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:*8f23ef7f-16a5-4ff2-b00c-b1950423e4ba,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-workflow8xnqg/series-workflow8xnqg-build-action-3873900978/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-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +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":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"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:*41c0023b-097c-4e7f-a663-936bd5da293c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8f23ef7f-16a5-4ff2-b00c-b1950423e4ba,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-workflow8xnqg/series-workflow8xnqg-build-action-3690781397/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-workflow8xnqg/series-workflow8xnqg-build-action-3873900978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 09:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 09:59:27 +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":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"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-workflow8xnqg/series-workflow8xnqg-convert-artifact-1617965027/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 09:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 09:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 09:59:23 +0000 UTC FinishedAt: 2026-09-02 09:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 09:59:33 +0000 UTC FinishedAt: 2026-09-02 13:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xnqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_append_data","ip_make_skb","ip6_append_data","ip6_make_skb","ip6_mtu","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"a5e547fa-eaae-4102-9fd5-c0505cddc37c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 09:59:33 +0000 UTC FinishedAt: 2026-09-02 13:04:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41c0023b-097c-4e7f-a663-936bd5da293c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8f23ef7f-16a5-4ff2-b00c-b1950423e4ba,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-workflow8xnqg/series-workflow8xnqg-build-action-3690781397/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-workflow8xnqg/series-workflow8xnqg-build-action-3873900978/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-workflow8xnqg/series-workflow8xnqg-convert-artifact-1617965027/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,}