Name: series-workflow2r4rs Phase: Succeeded StartedAt: 2026-09-07 11:26:05 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[0] Phase: Succeeded StartedAt: 2026-09-07 11:26:05 +0000 UTC FinishedAt: 2026-09-07 11:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 11:26:05 +0000 UTC FinishedAt: 2026-09-07 11:28:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG", "IP_MULTICAST", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG", "IP_MULTICAST", "IPV6" ], "series_id": "c4c0cadb-0fff-4369-b2d7-701dfff92c77" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mr_table_alloc", "ip_mroute_setsockopt", "ip6_mroute_setsockopt", "ipmr_new_table", "ip6mr_new_table", "ipmr_mfc_add", "ip6mr_mfc_add", "ipmr_rtm_route", "ipmr_cache_alloc", "ip6mr_cache_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXBtcl9ydG1fcm91dGUmIzM0OywKICAgICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcDZtcl9jYWNoZV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7XG4mIzQzO1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuJiM0MztcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnQgPSBremFsbG9jX29iaigqbXJ0KTtcbiYjNDM7XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbiYjNDM7XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnRfY2FjaGVwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcl90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcF9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXA2bXJfbmV3X3RhYmxlJiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwbXJfcnRtX3JvdXRlJiMzNDssCiAgICAmIzM0O2lwbXJfY2FjaGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXA2bXJfY2FjaGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NzQwZmJiNzQxM2U5ODI5NzVmYzY1ZGQyNWU3OTcyZDQ5YWI2YzdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMToyNzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jCkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7CiYjNDM7CW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwKJiM0MzsJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7CiAKIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBtcl9uZXRfb3BzKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwppbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsCiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAJaW50IGVycjsKIAotCW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpOwomIzQzOwltcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAltcnQtJmd0O2lkID0gaWQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTE0MjcsNyAmIzQzOzE0MjcsNyBAQCBpbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTik7CiYjNDM7CW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7CiAJaWYgKCFtcnRfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVAgTXVsdGljYXN0IFJvdXRpbmcgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmcsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3BlY2lmaWMgZmlsZXMgY2hhbmdlZDogYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIElQIG11bHRpY2FzdCByb3V0aW5nLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNhY2hpbmcuCgpPa2F5LCBpbiBgaXBtci5jYCwgdGhleSYjMzk7dmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGBLTUVNX0NBQ0hFYCBmbGFncyB3aGVuIGluaXRpYWxpemluZyBgbXJ0X2NhY2hlcGAgZm9yIHRoZSBJUHY0IG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlLiBUaGF0IHN1Z2dlc3RzIHRoZXkgd2FudCB0byB0cmFjayB0aGUgbWVtb3J5IHVzYWdlIG9mIHRoYXQgY2FjaGUgc3BlY2lmaWNhbGx5LiBJbnRlcmVzdGluZy4KClRoZW4sIGluIGBpcG1yX2Jhc2UuY2AsIHRoZSBga3phbGxvY19vYmpgIGNhbGwgZm9yIGFsbG9jYXRpbmcgYG1yX3RhYmxlYCBzdHJ1Y3R1cmVzIG5vdyBpbmNsdWRlcyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4gQW5vdGhlciBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2Ug4oCTIHRoaXMgdGltZSwgZm9yIHRoZSB0YWJsZSBpdHNlbGYuIFRoZXkgYXJlIHByb2JhYmx5IHRyeWluZyB0byBtZWFzdXJlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYW5kIHRoZSBjYWNoZXMgZm9yIElQdjQuCgpGaW5hbGx5LCBpbiBgaXA2bXIuY2AsIHRoZSBgU0xBQl9BQ0NPVU5UYCBmbGFnIGlzIGFkZGVkIHRvIHRoZSBgS01FTV9DQUNIRWAgY2FsbCBmb3IgYG1ydF9jYWNoZXBgIGZvciBJUHY2IG11bHRpY2FzdC4gU28sIHNpbWlsYXIgdG8gdGhlIElQdjQgc2lkZSwgdGhleSBhcmUgbm93IHRyYWNraW5nIG1lbW9yeSB1c2FnZSBvZiB0aGUgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSwganVzdCBsaWtlIGluIElQdjQuCgpFc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBwb3NzaWJseSBkZWJ1Z2dpbmcgbWVtb3J5IHVzYWdlIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBmb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyBvciBtZW1vcnkgYmxvYXQgaW4gdGhlc2UgYXJlYXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGdpdCBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBhc3NvY2lhdGVkIGJ1ZyByZXBvcnQgb3IgcmF0aW9uYWxlIGZvciB0aGVzZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBncmVwcGVyL3JlYWQtZmlsZSB0b29scyB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYz00Nj1tcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbi0tXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01NC1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjU1Olx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTU2LVx0aWYgKCFtcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMgY29kZSBhbmFseXNpczoKCioqTXkgQ29kZSBBbmFseXNpcyBTdHJhdGVneSoqCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IElzIGl0IHBhcnQgb2YgYW4gYWN0aXZlIHBhdGgsIG9yIGlzIGl0IGRlYWQgd2VpZ2h0PyBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlJiMzOTtzIGluY2x1c2lvbiBhbmQgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGFueSBkZWVwZXIgZGl2ZS4gQWZ0ZXIgdGhhdCwgYSBjcnVjaWFsIGp1ZGdtZW50IGNhbGw6IGlzIHRoaXMgY29kZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nPyBXaWxsIGl0IG9mZmVyIGEgdmFsdWFibGUgYXR0YWNrIHN1cmZhY2U/IEZpbmFsbHksIEkgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBuYW1lcyBhcmUgbW9zdCBpbXBvcnRhbnQuIAoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgZm9sbG93aW5nIGZpbGVzOiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGVpciBjb3JyZXNwb25kaW5nIEtjb25maWdzIHRvIGFuc3dlciB0aGUgcXVlc3Rpb25zIGluIHRoZSBmaXJzdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhpcG1yfGlwNm1yfGlwbXJfYmFzZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSAmIzQzOz0gZmliX3J1bGVzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbm5ldC9pcHY0L01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19ORVRfSVBJUCkgJiM0Mzs9IGlwaXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dlIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS4mIzM0OyBXZSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBzb21lIGFyZWFzLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHdlIGNvdWxkIGJlIG1pc3Npbmcgc29tZXRoaW5nIHVwc3RyZWFtLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGluIHRoZXJlIHdlIGhhdmVuJiMzOTt0IGNvbnNpZGVyZWQsIG9yIHBlcmhhcHMgc29tZSByZWxhdGlvbnNoaXBzIHdlIGhhdmVuJiMzOTt0IGZ1bGx5IGdyYXNwZWQuIEdvdHRhIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMgbGV2ZWwgb2YgY29tcGxleGl0eS4gVGltZSB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNm1yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgJiM0Mzs9IGlwNm1yLm9cbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgTXVsdGljYXN0IFJvdXRpbmcgT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gbXVsdGljYXN0IHJvdXRpbmcuIEZpcnN0LCBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBgSVBfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFYC4gVGhlc2UgYXJlIHRoZSBrZXkgZGVmaW5lcyBmb3IgZW5hYmxpbmcgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSwgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIEFyZSB0aGV5IHNldCBhcyBkZWZhdWx0cz8gQXJlIHRoZXkgaGlkZGVuIGJlaGluZCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHNpbXBsZSBncmVwIGFuZCB0aGVuIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBteSB3b3JrIHdpdGggdGhpcyBzcGVjaWZpYyBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUC4qTVJPVVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRlZmluaXRpb25zLCBhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgKnJlYWxseSogbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7RG9uJiMzOTt0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuJiMzNDsgTGV0JiMzOTtzIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIOKAkyAqdGhhdCYjMzk7cyogd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhlc2UsIHdoYXQgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxheSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlIG1pZ2h0IGJlLiBJdCYjMzk7cyBhYm91dCBiZWluZyB0aG9yb3VnaCwgZW5zdXJpbmcgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcy4gQSBxdWljayBzY2FuIHdvbiYjMzk7dCBkbzsgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG4gMjE3Olx0XHRib29sXG4gMjE4Olx0XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZyBJUF9NUk9VVEVcbiAyMjE6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxuIDIyMzpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyMjQ6XHRcdGhlbHBcbiAyMjU6XHRcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXG4gMjI2Olx0XHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXG4gMjI3Olx0XHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXG4gMjI4Olx0XHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxuIDIyOTpcdFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBpdCwgeW91XG4gMjMwOlx0XHQgIGRvbiYjMzk7dCBuZWVkIGl0LlxuIDIzMTpcdFxuIDIzMjpcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjMzOlx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyMzQ6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbiAyMzU6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyMzY6XHRcdGhlbHBcbiAyMzc6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDIzODpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjM5Olx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjQwOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNDE6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI0MjpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjQzOlx0XG4gMjQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ1Olx0XG4gMjQ2Olx0Y29uZmlnIElQX1BJTVNNX1YxXG4gMjQ3Olx0XHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbiAyNDg6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFXG4gMjQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBJUFY2X01ST1VURWAgb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLiBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG11bHRpY2FzdCByb3V0aW5nIHdpdGggSVB2Ni4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIGFzIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlLCBhbmQgSSBuZWVkIHRvIHJlY2FsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0ICBub3JtYWwgYW5kIHNvdXJjZSBwcmVmaXggc3BlY2lmaWMgcm91dGVzIGluIHRoZSBzYW1lIHJvdXRpbmcgdGFibGVcbiAyNTE6XHRcdCAgbWF5IHNvbWV0aW1lcyBsZWFkIHRvIHVuaW50ZW5kZWQgcm91dGluZyBiZWhhdmlvci4gIFRoaXMgY2FuIGJlXG4gMjUyOlx0XHQgIGF2b2lkZWQgYnkgZGVmaW5pbmcgZGlmZmVyZW50IHJvdXRpbmcgdGFibGVzIGZvciB0aGUgbm9ybWFsIGFuZFxuIDI1MzpcdFx0ICBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcy5cbiAyNTQ6XHRcbiAyNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTY6XHRcbiAyNTc6XHRjb25maWcgSVBWNl9NUk9VVEVcbiAyNTg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyNTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI2MDpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyNjE6XHRcdGhlbHBcbiAyNjI6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZy5cbiAyNjM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjQ6XHRcbiAyNjU6XHRjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjY2Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuIDI2NzpcdFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxuIDI2ODpcdFx0c2VsZWN0IEZJQl9SVUxFU1xuIDI2OTpcdFx0aGVscFxuIDI3MDpcdFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXG4gMjcxOlx0XHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcbiAyNzI6XHRcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcbiAyNzM6XHRcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xuIDI3NDpcdFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXG4gMjc1Olx0XHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cbiAyNzY6XHRcbiAyNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNzg6XHRcbiAyNzk6XHRjb25maWcgSVBWNl9QSU1TTV9WMlxuIDI4MDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbiAyODE6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyODI6XHRcdGhlbHBcbiAyODM6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXG4gMjg0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIENvbW1pdCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBsZXQmIzM5O3MgcmVhbGx5IGRpc3NlY3QgdGhpcyBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlICp3aGF0Ki4gTXkgZmlyc3Qgc3RvcCBpcywgbmF0dXJhbGx5LCB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGp1c3RpZmljYXRpb24gYW5kIGEgY29uY2lzZSBvdmVydmlldy4gQnV0IEkmIzM5O20gbm90IHN0b3BwaW5nIHRoZXJlOyBJJiMzOTtsbCBiZSBkaWdnaW5nIGludG8gdGhlIGZ1bGwgY29tbWl0IGluZm8g4oCTIHRoZSBkaWZmcywgdGhlIGNvbnRleHQsIG1heWJlIHJlbGF0ZWQgaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZ1bGwgbmFycmF0aXZlIGhlcmUuIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZSB0byBhc3Nlc3Mgbm90IGp1c3QgaWYgdGhlIGNoYW5nZSAqd29ya3MqLCBidXQgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGFwcHJvYWNoLCBpZiBpdCBhZGRyZXNzZXMgdGhlIHVuZGVybHlpbmcgcHJvYmxlbSBlZmZlY3RpdmVseSwgYW5kIGlmIGl0IGFsaWducyB3aXRoIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJhbCBnb2Fscy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCB0aGF0IHRoZSBjb21taXQgbWlnaHQgYnJpbmcgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4zMzcxOlx0XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbjMzNzI6XHRcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbjMzNzM6XHR9O1xuMzM3NDpcdFxuMzM3NTpcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuMzM3NjpcdHtcbjMzNzc6XHRcdGludCBlcnI7XG4zMzc4Olx0XG4zMzc5Olx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG4zMzgwOlx0XHRcdFx0XHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcbjMzODE6XHRcbjMzODI6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBtcl9uZXRfb3BzKTtcbjMzODM6XHRcdGlmIChlcnIpXG4zMzg0Olx0XHRcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xuMzM4NTpcdFxuMzM4NjpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmlwX21yX25vdGlmaWVyKTtcbjMzODc6XHRcdGlmIChlcnIpXG4zMzg4Olx0XHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG4zMzg5Olx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxuMzM5MDpcdFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4zMzkxOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjMzOTI6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjMzOTM6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjMzOTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwNm1yLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L2lwNm1yLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIHRoZSBsaW5lcyBhcm91bmQgMTQyNy4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgb3IgYSBjcml0aWNhbCBsb29wIG9yIGNvbmRpdGlvbmFsIG1pZ2h0IHJlc2lkZSB3aXRoaW4gdGhhdCBzb3VyY2UgZmlsZSwgc28gaXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGJyaW5nIHRvIG1pbmQgd2hhdCBhc3BlY3Qgb2YgdGhlIG11bHRpY2FzdCByb3V0aW5nIHN0YWNrIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhbmQgd2hlcmUgSSBsZWZ0IG9mZi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXG4xNDIxOlx0XHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4xNDIyOlx0XHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxuMTQyMzpcdFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuMTQyNDpcdH07XG4xNDI1Olx0XG4xNDI2Olx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuMTQyNzpcdHtcbjE0Mjg6XHRcdGludCBlcnI7XG4xNDI5Olx0XG4xNDMwOlx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuMTQzMTpcdFx0aWYgKCFtcnRfY2FjaGVwKVxuMTQzMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE0MzM6XHRcbjE0MzQ6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXA2bXJfbmV0X29wcyk7XG4xNDM1Olx0XHRpZiAoZXJyKVxuMTQzNjpcdFx0XHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0Z290byByZWdfbm90aWZfZmFpbDtcbjE0NDE6XHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcbjE0NDI6XHRcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2cGltNl9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4xNDQzOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE0NDQ6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIElQdjQgTXVsdGljYXN0IFJvdXRlciBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHdlIHNob3VsZCBhbHNvIHNwZWNpZmljYWxseSBhbmFseXplIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZXJlZm9yZSB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byByZW1haW4uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhbGxvY2F0aW9uIGhhcHBlbnMsIHdoYXQgcmVzb3VyY2VzIGl0IGlzIGRlcGVuZGVudCBvbiwgYW5kIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgYm90dGxlbmVjaywgb3IgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIGhhbmRsaW5nIG9mIG11bHRpY2FzdCB0cmFmZmljLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXJfYmFzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiAgNDE6XHR7XG4gIDQyOlx0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZtcnQtXHUwMDNld29yayk7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBtcl90YWJsZSAqXG4gIDQ2Olx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gIDQ3Olx0XHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuICA0ODpcdFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxuICA0OTpcdFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuICA1MDpcdFx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCkpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gIDUzOlx0XHRpbnQgZXJyO1xuICA1NDpcdFxuICA1NTpcdFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAgNTY6XHRcdGlmICghbXJ0KVxuICA1NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiAgNTg6XHRcdG1ydC1cdTAwM2VpZCA9IGlkO1xuICA1OTpcdFx0d3JpdGVfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0LCBuZXQpO1xuICA2MDpcdFxuICA2MTpcdFx0bXJ0LVx1MDAzZW9wcyA9ICpvcHM7XG4gIDYyOlx0XHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNm1ydC1cdTAwM2VtZmNfaGFzaCwgbXJ0LVx1MDAzZW9wcy5yaHRfcGFyYW1zKTtcbiAgNjM6XHRcdGlmIChlcnIpIHtcbiAgNjQ6XHRcdFx0a2ZyZWUobXJ0KTtcbiAgNjU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiAgNjY6XHRcdH1cbiAgNjc6XHRcbiAgNjg6XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2bXJ0LVx1MDAzZXdvcmssIF9fbXJfZnJlZV90YWJsZSk7XG4gIDY5Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtcnQtXHUwMDNlbWZjX2NhY2hlX2xpc3QpO1xuICA3MDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXJ0LVx1MDAzZW1mY191bnJlc19xdWV1ZSk7XG4gIDcxOlx0XG4gIDcyOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZtcnQtXHUwMDNlaXBtcl9leHBpcmVfdGltZXIsIGV4cGlyZV9mdW5jLCAwKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0gPSAtMTtcbiAgNzU6XHRcdHRhYmxlX3NldChtcnQsIG5ldCk7XG4gIDc2Olx0XHRyZXR1cm4gbXJ0O1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHR2b2lkICptcl9tZmNfZmluZF9wYXJlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZvaWQgKmhhc2hhcmcsIGludCBwYXJlbnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBY2NvdW50aW5nIGluIE11bHRpY2FzdCBSb3V0aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYG1yX3RhYmxlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY19vYmpgIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIFNpbXVsdGFuZW91c2x5LCBgaXBfbXJfaW5pdGAgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGJvdGggbGV2ZXJhZ2luZyBgU0xBQl9BQ0NPVU5UYCB3aGVuIGluaXRpYWxpemluZyB0aGVpciByZXNwZWN0aXZlIGNhY2hlcywgYG1ydF9jYWNoZXBgLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGltcGFjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGJvdGggYEdGUF9LRVJORUxfQUNDT1VOVGAgYW5kIGBTTEFCX0FDQ09VTlRgIGFyZSBpbnRlbnRpb25hbGx5IHNldCB0byBlbmFibGUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIGFjY291bnRpbmcuIFRoaXMgbWVhbnMgdGhhdCBhbnkgYWxsb2NhdGlvbnMg4oCTIHNwZWNpZmljYWxseSwgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIChgc3RydWN0IG1yX3RhYmxlYCkgYW5kIG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlIGVudHJpZXMgKGBzdHJ1Y3QgbWZjX2NhY2hlYCBhbmQgYHN0cnVjdCBtZmM2X2NhY2hlYCkg4oCTIGFyZSBub3cgZGlyZWN0bHkgbWFuYWdlZCBieSBtZW1vcnkgY2dyb3VwIGxpbWl0cy4KCk5vdywgYSBjcnVjaWFsIGNvbnNpZGVyYXRpb246IGFyZSB0aGVzZSBhbGxvY2F0aW9ucyByZWxldmFudCBpbiBhIHN0YW5kYXJkIGRlcGxveW1lbnQ/IEFic29sdXRlbHkuIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYXJlIGNvcmUgY29tcG9uZW50cyBvZiBhbnkgdHlwaWNhbCBuZXR3b3JraW5nIHN5c3RlbS4gVGhlc2UgYWxsb2NhdGlvbnMgYXJlIHJlYWNoZWQgYnkgdXNlcmxhbmQgdGhyb3VnaCBgc2V0c29ja29wdGAgKGUuZy4gTVJUX0lOSVQsIE1SVF9BRERfVklGLCBNUlRfQUREX01GQywgTVJUX0RFTF9NRkMgb24gcmF3IElQUFJPVE9fSUdNUCBvciBNUlQ2X0lOSVQgb24gcmF3IElQUFJPVE9fSUNNUFY2IHNvY2tldHMpIG9yIHRoZSBtb3JlIG1vZGVybiBydG5ldGxpbmsvZmliIHJ1bGVzLCBzbyB0aGlzIGlzIGNyaXRpY2FsLgoKVGhlIHByYWN0aWNhbCBjb25zZXF1ZW5jZSBoZXJlIGlzIHRoYXQsIHdoZW4gdGhlc2UgYWxsb2NhdGlvbnMgb2NjdXIgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgdGhlIHByZXNlbmNlIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFuZCBgU0xBQl9BQ0NPVU5UYCBlZmZlY3RpdmVseSBzdWJqZWN0cyB0aGVtIHRvIG1lbWNnIGxpbWl0cy4gSWYgYSBjZ3JvdXAgZXhjZWVkcyBpdHMgbWVtb3J5IHF1b3RhLCB0aGVzZSBhbGxvY2F0aW9ucyBjYW4gZmFpbCB3aXRoIGAtRU5PTUVNYC4gVGhpcyBmYWlsdXJlLCBJIGFzc3VtZSwgd2lsbCB0cmlnZ2VyIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBtcl90YWJsZV9hbGxvY2AsIGBpcG1yX21mY19hZGRgLCBhbmQgYGlwNm1yX21mY19hZGRgIGFuZCBvdGhlcnMgdGhhdCBJIHdpbGwgd2FudCB0byByZXZpZXcuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGRlZXBlciBhbmQgZXhhbWluZSBleGFjdGx5IHdoZXJlIGBtcnRfY2FjaGVwYCBpcyB1c2VkIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgYWNjb3VudGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ydF9jYWNoZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTAxLVxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xubmV0L2lwdjQvaXBtci5jLTEwMy1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy03NDYtXG5uZXQvaXB2NC9pcG1yLmM6NzQ3Olx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XG5uZXQvaXB2NC9pcG1yLmMtNzQ4LX1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pcG1yLmMtOTk3LVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtMTAwOC17XG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDEwLVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxubmV0L2lwdjQvaXBtci5jOjMzNzk6XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY0L2lwbXIuYzozNDA3Olx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjQvaXBtci5jLTM0MDgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04NC1cbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MDItXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODA0LX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEwMjgtXHRpZiAoIWMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDM3PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVx0aWYgKCFjKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDI5LVxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTQzMTpcdGlmICghbXJ0X2NhY2hlcClcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDU5LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTQ2MS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwNm1yX25ldF9vcHMpO1xubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgTmV0d29yayBNdWx0aWNhc3QgUm91dGluZyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcsIGFuZCB0aGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgdGhlIG1vZGlmaWNhdGlvbnMuIFRoZSBwcmltYXJ5IGdhdGUgaGVyZSBpcyByZWFjaGFiaWxpdHk7IGlmIHRoZSBjb2RlIGlzbiYjMzk7dCByZWFjaGFibGUsIGl0JiMzOTtzIGEgbm8tZ28uIE5vIGJsaW5kIGZhaXRoIGluICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgZWl0aGVyLCByZWZhY3RvcmVkIHJlYWNoYWJsZSBjb2RlIGlzIGZ1enphYmxlLgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IGhpdHMgY29kZSBpbiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCwgd2hpY2gsIGFzIGEgbmV0d29ya2luZyBzcGVjaWFsaXN0LCBJIGtub3cgaXMgaW4gdGhlIGhlYXJ0IG9mIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvZGUuICBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyDigJMgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgIOKAkyB1c2VkIGZvciBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgYW5kIE1GQyBjYWNoZXMuIFRoaXMgaXMgKnJlYWNoYWJsZSogZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcsIHJ1bm5pbmcgb24gc3RhbmRhcmQgYW1kNjQgUUVNVSBrZXJuZWxzLiBUaGUgY29kZSBjbGVhcmx5IGlzbiYjMzk7dCBkb2N1bWVudGF0aW9uLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgYnkgdGhlIGRlZmluZWQgcnVsZXMgaW4gdGhlIGZpcnN0IHRocmVlIHNlY3Rpb25zLCBpdCYjMzk7cyBhIGZpcm0gYFdvcnRoRnV6emluZyA9IHRydWVgLiBJIGhhdmUgbm8gcmVzZXJ2YXRpb25zIGhlcmUuCgpOb3csIEkgbmVlZCB0byBkZWZpbmUgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIEkgc2hvdWxkIHRhcmdldCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1yX3RhYmxlX2FsbG9jYCBpbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGFuZCBgaXBfbXJfaW5pdGAgaW4gYG5ldC9pcHY0L2lwbXIuY2AuICBJIHdpbGwgcHJvYmFibHkgbmVlZCB0byBpZ25vcmUgYGlwX21yX2luaXRgLCBzaW5jZSBpdCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSSBrbm93IEkgaGF2ZSB0byBwcmlvcml0aXplIHRlc3RhYmxlIGZ1bmN0aW9ucy4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gYG1yX3RhYmxlX2FsbG9jYCBiZWNhdXNlIGl0IGlzIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIG1vc3QgbGlrZWx5IHRhcmdldCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MuIFNvIG5vdyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxlcnMgb2YgYG1yX3RhYmxlX2FsbG9jYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFsbG9jYXRpbmcgZnJvbSBgbXJ0X2NhY2hlcGAgdG8gZGVmaW5lIG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTQzNy1cbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNDctXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDA4PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cbm5ldC9pcHY2L2lwNm1yLmM6NDE2Olx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmMtNDE3LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIHRoZXNlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbXJfdGFibGVfYWxsb2NgIGJlY2F1c2UgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY3JlYXRpb24gb2YgdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYG1yX3RhYmxlX2FsbG9jYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgc3RydWN0dXJlcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBocyBmb3IgYGlwbXJfbmV3X3RhYmxlYCBhbmQgYGlwNm1yX25ld190YWJsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgZnJvbS4gQSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnZXQgbWUgY2xvc2VyIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBpZiBgbWZjX2NhY2hlYCBvciBgbWZjNl9jYWNoZWAgYWxsb2NhdGlvbnMgaGFwcGVuIHdpdGhpbiB0aGlzIGNhbGwgZmxvdywgb3IgcG90ZW50aWFsbHkgZWxzZXdoZXJlLiBMb2NhdGluZyB0aGVzZSBjYWNoZSBhbGxvY2F0aW9ucywgYWxvbmdzaWRlIHRoZSBtYWluIHRhYmxlIHN0cnVjdHVyZSwgc2hvdWxkIHByb3ZpZGUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZXNvdXJjZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9OTgxPXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy05OTMtLyogQWxsb2NhdGUgYSBtdWx0aWNhc3QgY2FjaGUgZW50cnkgKi9cbm5ldC9pcHY0L2lwbXIuYzo5OTQ6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZClcbm5ldC9pcHY0L2lwbXIuYy05OTUte1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMDA2LVxubmV0L2lwdjQvaXBtci5jOjEwMDc6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY0L2lwbXIuYy0xMDA4LXtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTE0Mj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4tLVxubmV0L2lwdjQvaXBtci5jLTExNjctXHRcdC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhbGxvd2FibGUgKi9cbm5ldC9pcHY0L2lwbXIuYzoxMTY4Olx0XHRjID0gaXBtcl9jYWNoZV9hbGxvY191bnJlcygpO1xubmV0L2lwdjQvaXBtci5jLTExNjktXHRcdGlmICghYykge1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMjQxPXN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEyNzItXG5uZXQvaXB2NC9pcG1yLmM6MTI3MzpcdGMgPSBpcG1yX2NhY2hlX2FsbG9jKCk7XG5uZXQvaXB2NC9pcG1yLmMtMTI3NC1cdGlmICghYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXVsdGljYXN0IFJvdXRpbmcgTW9kdWxlIEVudHJ5cG9pbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2VybmVsJiMzOTtzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIG1hbmFnZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2UgY3JpdGljYWwgZW50cnkgcG9pbnRzLgoKSSYjMzk7dmUgc2NvcGVkIGluIG9uIHRoZSBJUHY0IChgbmV0L2lwdjQvaXBtci5jYCkgYW5kIElQdjYgKGBuZXQvaXB2Ni9pcDZtci5jYCkgbW9kdWxlcyBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgaG93IG11bHRpY2FzdCBmb3J3YXJkaW5nIGlzIGNvbnN0cnVjdGVkLiBJJiMzOTt2ZSBub3RlZCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lczogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AgZm9yIGNhY2hpbmcgYW5kIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0YWJsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb246IGBpcG1yX25ld190YWJsZWAsIGBpcDZtcl9uZXdfdGFibGVgLiBJIHNlZSBzb3VyY2Utc3BlY2lmaWMgbXVsdGljYXN0IGZ1bmN0aW9uczogYGlwbXJfbWZjX2FkZGAsIGBpcG1yX21mY19kZWxldGVgLCBgaXA2bXJfbWZjX2FkZGAsIGFuZCBgaXA2bXJfbWZjX2RlbGV0ZWAgdGhhdCBtYW5hZ2UgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuIEkgbmVlZCB0byB0cmFjZSB0aGUgYHNldHNvY2tvcHRgIGFuZCBuZXRsaW5rIGVudHJ5IHBvaW50cywgdGhvc2UgYXJlIHRoZSBsb2dpY2FsIG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk0Ny1cdGlmIChpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDg6XHRcdHJldHVybiBpcF9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDktXG4tLVxubmV0L2lwdjQvaXBtci5jPTEzNzg9c3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTE0MDktXG5uZXQvaXB2NC9pcG1yLmM6MTQxMDppbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwbXIuYy0xNDExLVx0XHRcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqNm1yIHNldHNvY2tvcHQgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYDZtciBzZXRzb2Nrb3B0YCBidXNpbmVzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyDigJMgaXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkmIzM5O3ZlIGRpcmVjdGx5IGRlYWx0IHdpdGggaXQsIGJ1dCB0aGUgY29uY2VwdCBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hhdCB1bmRlcmx5aW5nIHRlY2hub2xvZ3kgaXMgYmVpbmcgcmVmZXJlbmNlZCBoZXJlIC0gSSBhc3N1bWUgdGhpcyBpcyBJUHY2IE11bHRpY2FzdCBSb3V0ZXIgZnVuY3Rpb25hbGl0eSwgYnV0IEkgd2FudCB0byBjb25maXJtLiBHaXZlbiB0aGUgY29udGV4dCwgYHNldHNvY2tvcHRgIG9idmlvdXNseSBwbGF5cyBhIHJvbGUsIHNvIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHNvY2tldCBvcHRpb25zIGZvciBtdWx0aWNhc3Qgb3BlcmF0aW9uIGFuZCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcGVydGFpbmluZyB0byBJUHY2IGFuZCByb3V0aW5nLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHNvY2tldCBvcHRpb24gZmxhZ3MgcmVsYXRlZCB0byBtdWx0aWNhc3QgbWVtYmVyc2hpcCBhbmQgc291cmNlLXNwZWNpZmljIG11bHRpY2FzdC4gV2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHJlbGV2YW50PyBXaGF0IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBsaWtlbHkgaW4gcGxheT8gSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIHNwZWNpZmljIHNvY2tldCBvcHRpb25zIHdpdGhpbiBgc2V0c29ja29wdGAgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgbXVsdGljYXN0IHJvdXRlciBmdW5jdGlvbmFsaXR5LiBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIHRoZSBjb21tb24gZmFpbHVyZSBwb2ludHMsIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGlzc3VlIEkgaGF2ZSBleHBlcmllbmNlZCBkaXJlY3RseSwgb3Igb25lIHRoYXQgSSYjMzk7dmUgb25seSByZWFkIGFib3V0LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyB0aGUgbmV0d29yayBzdGFjayBiZWhhdmlvciBhbmQgcG9zc2libGUgaW1wbGVtZW50YXRpb24gcGVjdWxpYXJpdGllcy4gRG9lcyB0aGlzIHJlbGF0ZSB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIHJvdXRlciBmdW5jdGlvbmFsaXR5LCBzZXR0aW5nIHRoZSBUVEwsIG9yIGNvbnRyb2xsaW5nIHRoZSBpbnRlcmZhY2VzIHVzZWQgZm9yIG11bHRpY2FzdCB0cmFmZmljPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlIG9yIGRyaXZlciBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGBzZXRzb2Nrb3B0YCBjYWxscyBvbiB0aGUgcm91dGluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGlmIGl0IGltcGFjdHMgZm9yd2FyZGluZyBkZWNpc2lvbnMgb3IgdGhlIGNyZWF0aW9uL3JlbW92YWwgb2YgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cmllcy4KCkZpbmFsbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG5ldHdvcmsgc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZtci5jPTE3MDM9RVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNzExLVxubmV0L2lwdjYvaXA2bXIuYzoxNzEyOmludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY2L2lwNm1yLmMtMTcxMy1cdFx0XHQgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzk2LVx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjM5NzpcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgUm91dGluZyBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBJUCBtdWx0aWNhc3Qgcm91dGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBuZXRsaW5rIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBhZGRpbmcgb3IgbW9kaWZ5aW5nIG11bHRpY2FzdCByb3V0ZXMgYXJlIGxpa2VseSBnb2luZyB0byBiZSBpbiBlaXRoZXIgYGlwbXJfcnRtX3JvdXRlYCBvciBgaXBtcl9ydG1fbmV3cm91dGVgLiBPbmUgb2YgdGhvc2Ugc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugcm91dGVzIGFyZSBjcmVhdGVkIGFuZCBtYW5hZ2VkIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSB0d28gYW5kIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfcnRtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI2NzAtXG5uZXQvaXB2NC9pcG1yLmM6MjY3MTpzdGF0aWMgaW50IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBtci5jLTI2NzItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3MjUtXG5uZXQvaXB2NC9pcG1yLmM6MjcyNjpzdGF0aWMgaW50IGlwbXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2lwdjQvaXBtci5jLTI3MjctXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3MzctXG5uZXQvaXB2NC9pcG1yLmM6MjczODpcdGVyciA9IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShpbl9za2IsIG5saCwgdGIsIGV4dGFjayk7XG5uZXQvaXB2NC9pcG1yLmMtMjczOS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3ODMtXG5uZXQvaXB2NC9pcG1yLmM6Mjc4NDpzdGF0aWMgaW50IGlwbXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvaXB2NC9pcG1yLmMtMjc4NS17XG4tLVxubmV0L2lwdjQvaXBtci5jPTI4Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcG1yX3BvbGljeVtSVEFfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yODM0LVxubmV0L2lwdjQvaXBtci5jOjI4MzU6c3RhdGljIGJvb2wgaXBtcl9ydG1fdmFsaWRhdGVfcHJvdG8odW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2wpXG5uZXQvaXB2NC9pcG1yLmMtMjgzNi17XG4tLVxubmV0L2lwdjQvaXBtci5jPTI4NjE9c3RhdGljIGludCBydG1fdG9faXBtcl9tZmNjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI4ODItXHQgICAgcnRtLVx1MDAzZXJ0bV9zY29wZSAhPSBSVF9TQ09QRV9VTklWRVJTRSB8fFxubmV0L2lwdjQvaXBtci5jOjI4ODM6XHQgICAgIWlwbXJfcnRtX3ZhbGlkYXRlX3Byb3RvKHJ0bS1cdTAwM2VydG1fcHJvdG9jb2wpKVxubmV0L2lwdjQvaXBtci5jLTI4ODQtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yOTQyLS8qIHRha2VzIGNhcmUgb2YgYm90aCBuZXdyb3V0ZSBhbmQgZGVscm91dGUgKi9cbm5ldC9pcHY0L2lwbXIuYzoyOTQzOnN0YXRpYyBpbnQgaXBtcl9ydG1fcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9pcG1yLmMtMjk0NC1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzAyND1zdGF0aWMgaW50IGlwbXJfdmFsaWRfZHVtcGxpbmsoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTMwNDgtXG5uZXQvaXB2NC9pcG1yLmM6MzA0OTpzdGF0aWMgaW50IGlwbXJfcnRtX2R1bXBsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L2lwbXIuYy0zMDUwLXtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgaXBtcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2lwdjQvaXBtci5jLTMzNjQtXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcbm5ldC9pcHY0L2lwbXIuYzozMzY1Olx0IC5kdW1waXQgPSBpcG1yX3J0bV9kdW1wbGluaywgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2lwdjQvaXBtci5jLTMzNjYtXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fTkVXUk9VVEUsXG5uZXQvaXB2NC9pcG1yLmM6MzM2NzpcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXG5uZXQvaXB2NC9pcG1yLmMtMzM2OC1cdHsucHJvdG9jb2wgPSBSVE5MX0ZBTUlMWV9JUE1SLCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcbm5ldC9pcHY0L2lwbXIuYzozMzY5Olx0IC5kb2l0ID0gaXBtcl9ydG1fcm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY0L2lwbXIuYy0zMzcwLVx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxubmV0L2lwdjQvaXBtci5jOjMzNzE6XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbm5ldC9pcHY0L2lwbXIuYy0zMzcyLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNdWx0aWNhc3QgUm91dGluZyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiBpbiBgaXBtcl9iYXNlLmNgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgYXJlYXMuIE15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZXhhbWluZSBpbmNsdWRlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGAsIGBpcG1yX3J0bV9yb3V0ZWAsIGFuZCBgaXA2bXJfcnRtX3JvdXRlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpcDZtcl9ydG1fcm91dGVgIGFjdHVhbGx5IGV4aXN0cyB3aXRoaW4gdGhlIHN5c3RlbSBiZWZvcmUgYXNzdW1pbmcgYW55IGZ1cnRoZXIgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZtcl9ydG1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcbm5ldC9pcHY2L2lwNm1yLmM6OTk6c3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTE0MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNm1yX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3Rfb3JfbW9kdWxlID0ge1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQyMS1cdCAubXNndHlwZSA9IFJUTV9HRVRST1VURSxcbm5ldC9pcHY2L2lwNm1yLmM6MTQyMjpcdCAuZG9pdCA9IGlwNm1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwNm1yX3J0bV9kdW1wcm91dGUsXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjMtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0yNjk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcDZtcl9nZXRyb3V0ZV9wb2xpY3lbUlRBX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDAtXG5uZXQvaXB2Ni9pcDZtci5jOjI3MDE6c3RhdGljIGludCBpcDZtcl9ydG1fdmFsaWRfZ2V0cm91dGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjczMi1cbm5ldC9pcHY2L2lwNm1yLmM6MjczMzpzdGF0aWMgaW50IGlwNm1yX3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L2lwNm1yLmMtMjczNC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzQ0LVxubmV0L2lwdjYvaXA2bXIuYzoyNzQ1Olx0ZXJyID0gaXA2bXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShpbl9za2IsIG5saCwgdGIsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZtci5jLTI3NDYtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjc4OS1cbm5ldC9pcHY2L2lwNm1yLmM6Mjc5MDpzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjYvaXA2bXIuYy0yNzkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGhhcmQgbG9vayBhdCB0aGUgYGlwbXJfbmV3X3RhYmxlYCBhbmQgYGlwNm1yX25ld190YWJsZWAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50cyBmb3IgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZy4gSSB3YW50IHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMgY29ycmVjdGx5LCBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSwgYW5kIGhhbmRsaW5nIGFueSBuZWNlc3NhcnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBpbml0aWFsaXppbmcgYWxsIHRoZSByZXF1aXJlZCBtZW1iZXJzIGNvcnJlY3RseSwgaW5jbHVkaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGFueSBpbml0aWFsIHN0YXRlIGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFuYWx5emluZyBob3cgbXVsdGljYXN0IHJvdXRpbmcgaGFuZGxlcyB0aGUgY3JlYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgZm9yd2FyZGluZyBzdGF0ZS4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgZGVmYXVsdCBiZWhhdmlvcnMgZWFybHkgb24uIExldCYjMzk7cyBzZWUgaWYgdGhlIHRhYmxlIGNyZWF0aW9uIHByb2Nlc3NlcyBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZXJyb3IgcmVwb3J0aW5nIHJvYnVzdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcFs2XT9tcl9uZXdfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXG5uZXQvaXB2NC9pcG1yLmM6MTA0OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDUtc3RhdGljIHZvaWQgaXBtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yNDI9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI1NC1cbm5ldC9pcHY0L2lwbXIuYzoyNTU6XHRtcnQgPSBpcG1yX25ld190YWJsZShuZXQsIFJUX1RBQkxFX0RFRkFVTFQpO1xubmV0L2lwdjQvaXBtci5jLTI1Ni1cdGlmIChJU19FUlIobXJ0KSkge1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzU9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTMzOC1cbm5ldC9pcHY0L2lwbXIuYzozMzk6XHRtcnQgPSBpcG1yX25ld190YWJsZShuZXQsIFJUX1RBQkxFX0RFRkFVTFQpO1xubmV0L2lwdjQvaXBtci5jLTM0MC1cdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Mzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgaXBtcl9yaHRfcGFyYW1zID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy00MDctXG5uZXQvaXB2NC9pcG1yLmM6NDA4OnN0YXRpYyB2b2lkIGlwbXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy00MDktXHRcdFx0ICAgICAgIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDIxPXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGVfb3BzIGlwbXJfbXJfdGFibGVfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy00MjUtXG5uZXQvaXB2NC9pcG1yLmM6NDI2OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxubmV0L2lwdjQvaXBtci5jLTQyNy17XG4tLVxubmV0L2lwdjQvaXBtci5jLTQzOC1cdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcG1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY0L2lwbXIuYzo0Mzk6XHRcdFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXBtcl9uZXdfdGFibGVfc2V0KTtcbm5ldC9pcHY0L2lwbXIuYy00NDAtfVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTk0LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvaXBtci5jOjE1OTU6XHRcdFx0bXJ0ID0gaXBtcl9uZXdfdGFibGUobmV0LCB1dmFsKTtcbm5ldC9pcHY0L2lwbXIuYy0xNTk2LVx0XHRcdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xubmV0L2lwdjYvaXA2bXIuYy04Ni1cbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY2L2lwNm1yLmMtODgtc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTIyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNDEtXG5uZXQvaXB2Ni9pcDZtci5jOjI0MjpcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjQzLVx0aWYgKElTX0VSUihtcnQpKSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0zMjM9c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzI2LVxubmV0L2lwdjYvaXA2bXIuYzozMjc6XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XG5uZXQvaXB2Ni9pcDZtci5jLTMyOC1cdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGlwNm1yX3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zODktXG5uZXQvaXB2Ni9pcDZtci5jOjM5MDpzdGF0aWMgdm9pZCBpcDZtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjYvaXA2bXIuYy0zOTEtXHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz00MDM9c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXA2bXJfbXJfdGFibGVfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDA3LVxubmV0L2lwdjYvaXA2bXIuYzo0MDg6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDE2LVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmM6NDE3Olx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xubmV0L2lwdjYvaXA2bXIuYy00MTgtfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTcxMj1pbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xODcyLVx0XHRyZXQgPSAwO1xubmV0L2lwdjYvaXA2bXIuYzoxODczOlx0XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB2KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTg3NC1cdFx0aWYgKElTX0VSUihtcnQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGFuZCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGBJUF9NUk9VVEVfQ09NTU9OYC4gVGhhdCBsYXN0IG9uZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSB0aGUgb3RoZXJzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKTm93LCBhIGNydWNpYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgaXMgdGhlIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgIGlzIGVuYWJsZWQsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCBkcml2ZXMgdGhlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5UIGZsYWdzIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCBkYXRhLiBJIHJlYWxseSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgTUVNQ0dgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIG1lbWNnIGFjY291bnRpbmcgdG8gd29yaywgb3Igd2UgYXJlIHdhc3RpbmcgcmVzb3VyY2VzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGZvciBgTUVNQ0dgLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGF0IGBJUF9NVUxUSUNBU1RgIGlzIGVuYWJsZWQsIHNpbmNlIGBJUF9NUk9VVEVgIGRlcGVuZHMgb24gaXQsIGFuZCBgSVBWNmAgZm9yIGBJUFY2X01ST1VURWAuIEdvdHRhIGNvdmVyIGFsbCBteSBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyODEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE11bHRpY2FzdCBSb3V0aW5nIENvZGUgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGBNRU1DR2AsIGBJUF9NVUxUSUNBU1RgLCBhbmQgYElQVjZgLiBHb29kLCB0aGV5JiMzOTtyZSBhbGwgdGhlcmUuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgdGFibGUgYWxsb2NhdGlvbiwgY2FjaGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBvcHRpb25zLiBJIHdlbnQgdGhyb3VnaCB0aGUgbGlzdDogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcF9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBtcl9uZXdfdGFibGVgLCBgaXA2bXJfbmV3X3RhYmxlYC4gSSBjaGVja2VkIHRoZWlyIHN0YXRpYy9leHBvcnRlZCBzdGF0dXMuIGBpcG1yX2NhY2hlX2FsbG9jYCBhbmQgYGlwNm1yX2NhY2hlX2FsbG9jYCwgd2hpbGUgc3RhdGljLCBhcmUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXMsIG1lYW5pbmcgdGhleSBhcmUgdmVyeSByZWxldmFudC4gYG1yX3RhYmxlX2FsbG9jYCwgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX3J0bV9yb3V0ZWAsIGBpcG1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZ2V0cm91dGVgIGFyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZCwgbWVhbmluZyB0aGV5IGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCwgYGlwbXJfbWZjX2FkZGAsIGBpcDZtcl9tZmNfYWRkYCBhcmUgc3RhdGljIGJ1dCBjcml0aWNhbC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgYXJlYSBmb2N1c2VzIG9uIElQIG11bHRpY2FzdCByb3V0aW5nIGFuZCB0aGUgdGFibGUvY2FjaGUgbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcy4KCkFscmlnaHQsIGEgZmluYWwgZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyBncmVhdCwgbWVhbmluZyB0aGlzIGlzIHJlYWNoYWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgd2UmIzM5O3JlIHNlZWluZyBhZGRpdGlvbnMgb2YgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBtYXRjaGVzIHdoYXQgSSBhbHJlYWR5IGNvbmZpcm1lZCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgSSBleGFtaW5lZC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGlzIGhpZ2gtdmFsdWUgY29kZSB0byBmb2N1cyBvbiwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIG11bHRpY2FzdCByb3V0aW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHRoZSBhY2NvdW50aW5nIGZsYWdzIGFkZCBhZGRpdGlvbmFsIGludGVyZXN0LiBMZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXBtcl9ydG1fcm91dGUmIzM0OywKICAgICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcDZtcl9jYWNoZV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMgKG1yX3RhYmxlIGFsbG9jYXRpb24gYW5kIG1mYy9tZmM2IGttZW1fY2FjaGVzKSB0byB1c2UgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFuZCBTTEFCX0FDQ09VTlQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHN1YmplY3QgdG8gbWVtY2cgbGltaXRzIGFuZCBmYWlsdXJlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbmV3X3RhYmxlJiMzNDssCiAgICAmIzM0O2lwNm1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcG1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXA2bXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcG1yX3J0bV9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwNm1yX2NhY2hlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgc2xhYiBjYWNoZXMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSkgYW5kIHRoZSBtcl90YWJsZSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4gTm8gY2hhbmdlcyBhcmUgbWFkZSB0byBob3cgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhbmQgbXJfdGFibGUgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqICh6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgZXhwb3Nlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU3NDBmYmI3NDEzZTk4Mjk3NWZjNjVkZDI1ZTc5NzJkNDlhYjZjN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDExOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTMzNzYsNyAmIzQzOzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLAomIzQzOwkJCQlTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTsKIAogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcG1yX25ldF9vcHMpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCwKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlpbnQgZXJyOwogCi0JbXJ0ID0ga3phbGxvY19vYmooKm1ydCk7CiYjNDM7CW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTsKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyByZWxhdGVkIHRvIElQIG11bHRpY2FzdCByb3V0aW5nLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCwgYW5kIHRoZSBhbGxvY2F0aW9uIG9mIGEgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYG1ydGAgaW4gYG5ldC9pcHY0L2lwbXJfYmFzZS5jYC4KClNwZWNpZmljYWxseToKCiogICBJbiBgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyB0byBga21lbV9jYWNoZWAgY2FsbHMuICBUaGlzIGlzIGludGVyZXN0aW5nLiAgYFNMQUJfQUNDT1VOVGAgbWVhbnMgdGhpcyBjYWNoZSBpcyBub3cgYWNjb3VudGVkIGZvciBpbiBtZW1vcnkgYWNjb3VudGluZywgd2hpY2gsIGluIGl0c2VsZiwgZG9lc24mIzM5O3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB0aGUgY2hhbmdlIG1lYW5zIHRoZSBhbGxvY2F0aW9ucyBjYW4gbm93IGJlIG1vbml0b3JlZC4KKiAgIEluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AgdGhleSYjMzk7cmUgdXNpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgbm93LiAgVGhpcyBpcyBhIG5vdGV3b3J0aHkgY2hhbmdlLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIEtNU0FOIG9wcG9ydHVuaXR5LiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5JiMzOTtyZSBzdGlsbCB1c2luZyBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyBhIHplcm9lZCBhbGxvY2F0aW9uLgoKSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgeWVzLCBiZWNhdXNlIGl0IHNlZW1zIHRoZSB0ZWFtIGlzIGFscmVhZHkgYXdhcmUgdGhhdCB0aGlzIGFyZWEgY291bGQgY2F1c2UgaXNzdWVzLiBIb3dldmVyLCBnaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGlzIGRpZmYgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IGV2ZW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRob3NlIG1lbW9yeSBhY2NvdW50aW5nIGNoYW5nZXMgKm1lYW4qIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBrbm93biBpc3N1ZT8gQXJlIHRoZXkgYXR0ZW1wdGluZyB0byBhZGRyZXNzIGEgcmVjZW50IEtNU0FOIGZpbmRpbmc/IEkgbmVlZCB0byBrbm93IGZvciBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IEtNU0FOIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmM9NDY9bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYzo1NTpcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cdGlmICghbXJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBga3phbGxvY19vYmpgIERlZmluaXRpb24qKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGt6YWxsb2Nfb2JqYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hhdCBpdCBkb2VzLCBidXQgSSYjMzk7dmUgYmVlbiBidXJuZWQgYmVmb3JlIGJ5IGFzc3VtcHRpb25zLCBhbmQgc3VidGxlIGRldGFpbHMgY2FuIGJlIGNydWNpYWwgaW4ga2VybmVsIGRldmVsb3BtZW50LiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gSSYjMzk7bSBvbiB0aGUgc2FtZSBwYWdlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgZGVmaW5pdGlvbnMsIGVzcGVjaWFsbHkgaW4gbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBHb3R0YSBlbGltaW5hdGUgYW55IHJpc2sgb2YgbWlzaW50ZXJwcmV0aW5nIGhvdyB0aGF0IGFsbG9jYXRpb24gaXMgaGFuZGxlZCBhbmQgd2hhdCBpdHMgZ3VhcmFudGVlcyBhcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGlmIGl0JiMzOTtzIHVzZWQgaW4gYSBoaWdobHkgY29uY3VycmVudCBlbnZpcm9ubWVudC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSDigJMgbGV0JiMzOTtzIHZlcmlmeSB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU1OiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1Ni1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5MgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTXVsdGljYXN0IFJvdXRpbmcgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgLCBmb3IgYWxsb2NhdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMsIGJvdGggSVB2NCBhbmQgSVB2Ni4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYG1ydF9jYWNoZXBgLCBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYHN0cnVjdCBtcl90YWJsZWAgYWxsb2NhdGlvbnMuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIGl0LCBhbmQgdGhlIGFuc3dlciBpcyBuby4gV2UmIzM5O3JlIG5vdCBjcmVhdGluZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnM7IHRoZSBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGBpcG1yX2Jhc2UuY2AsIHN0aWxsIHVzZSB6ZXJvLWluaXRpYWxpemF0aW9uIChga3phbGxvY19vYmpgKSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBBbHNvLCB0aGVzZSBmbGFncyAoYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgKSBhcmUgc3RyaWN0bHkgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgY29kZSBwYXRocyB0aGF0IGludm9sdmUgYGNvcHlfdG9fdXNlcmAsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHBhZGRpbmcgbGVha3MsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIGluIHBsYWNlIGZvciBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGFuZCB3aGlsZSBLTVNBTiAqY291bGQqIGJlIHJlbGV2YW50IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYWRkaW5nIGFjY291bnRpbmcgZmxhZ3MgYWxvbmUgZG9lc24mIzM5O3QgdHJpZ2dlciBhIG5lZWQgZm9yIGl0LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIHdlIGhhdmUgemVybyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGFkZGluZyBtZW1jZyBhY2NvdW50aW5nIGZsYWdzIHRvIHNsYWIgY2FjaGVzIGFuZCBhbGxvY2F0aW9ucy4gV2UmIzM5O3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IG1lbW9yeSByZWFkcywgY29weWluZyBzdHJ1Y3RzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGV4cG9zdXJlcy4gVGhlIGFsbG9jYXRpb24gaW4gYGlwbXJfYmFzZS5jYCBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgc2xhYiBjYWNoZXMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSkgYW5kIHRoZSBtcl90YWJsZSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4gTm8gY2hhbmdlcyBhcmUgbWFkZSB0byBob3cgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhbmQgbXJfdGFibGUgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqICh6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgZXhwb3Nlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjM4NzY3OTg3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzg3ODI2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9uZXdfdGFibGVcIixcbiAgICBcImlwNm1yX25ld190YWJsZVwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCIsXG4gICAgXCJpcG1yX3J0bV9yb3V0ZVwiLFxuICAgIFwiaXBtcl9jYWNoZV9hbGxvY1wiLFxuICAgIFwiaXA2bXJfY2FjaGVfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjM4NzY4NTA4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NzE2NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDExOjI3OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xcbitcXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXFxuK1xcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbiBcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBtcl9uZXRfb3BzKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xcbitcXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdG1ydC1cXHUwMDNlaWQgPSBpZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG4rXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFtcnRfY2FjaGVwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjgwNDAxNjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjgyMjExOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiSVBfTVVMVElDQVNUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXJfdGFibGVfYWxsb2NcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfbmV3X3RhYmxlXCIsXG4gICAgXCJpcDZtcl9uZXdfdGFibGVcIixcbiAgICBcImlwbXJfbWZjX2FkZFwiLFxuICAgIFwiaXA2bXJfbWZjX2FkZFwiLFxuICAgIFwiaXBtcl9ydG1fcm91dGVcIixcbiAgICBcImlwbXJfY2FjaGVfYWxsb2NcIixcbiAgICBcImlwNm1yX2NhY2hlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbisrKyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuK1x0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwbXJfbmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuKysrIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCk7XG4rXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0X2NhY2hlcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzoxMy44MDQwMTgwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMTM5NTk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDaGFuZ2VzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmcsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcyBjaGFuZ2VkOiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcsIGFuZCB0aGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY2FjaGluZy5cblxuT2theSwgaW4gYGlwbXIuY2AsIHRoZXkndmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGBLTUVNX0NBQ0hFYCBmbGFncyB3aGVuIGluaXRpYWxpemluZyBgbXJ0X2NhY2hlcGAgZm9yIHRoZSBJUHY0IG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlLiBUaGF0IHN1Z2dlc3RzIHRoZXkgd2FudCB0byB0cmFjayB0aGUgbWVtb3J5IHVzYWdlIG9mIHRoYXQgY2FjaGUgc3BlY2lmaWNhbGx5LiBJbnRlcmVzdGluZy5cblxuVGhlbiwgaW4gYGlwbXJfYmFzZS5jYCwgdGhlIGBremFsbG9jX29iamAgY2FsbCBmb3IgYWxsb2NhdGluZyBgbXJfdGFibGVgIHN0cnVjdHVyZXMgbm93IGluY2x1ZGVzIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBBbm90aGVyIG1lbW9yeSBhY2NvdW50aW5nIGNoYW5nZSDigJMgdGhpcyB0aW1lLCBmb3IgdGhlIHRhYmxlIGl0c2VsZi4gVGhleSBhcmUgcHJvYmFibHkgdHJ5aW5nIHRvIG1lYXN1cmUgdGhlIG1lbW9yeSB1c2FnZSBvZiB0aGUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzLCBhbmQgdGhlIGNhY2hlcyBmb3IgSVB2NC5cblxuRmluYWxseSwgaW4gYGlwNm1yLmNgLCB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpcyBhZGRlZCB0byB0aGUgYEtNRU1fQ0FDSEVgIGNhbGwgZm9yIGBtcnRfY2FjaGVwYCBmb3IgSVB2NiBtdWx0aWNhc3QuIFNvLCBzaW1pbGFyIHRvIHRoZSBJUHY0IHNpZGUsIHRoZXkgYXJlIG5vdyB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugb2YgdGhlIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUsIGp1c3QgbGlrZSBpbiBJUHY0LlxuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBwb3NzaWJseSBkZWJ1Z2dpbmcgbWVtb3J5IHVzYWdlIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBmb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyBvciBtZW1vcnkgYmxvYXQgaW4gdGhlc2UgYXJlYXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGdpdCBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgYnVnIHJlcG9ydCBvciByYXRpb25hbGUgZm9yIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgZ3JlcHBlci9yZWFkLWZpbGUgdG9vbHMgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MTguODE3OTc5ODE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MTguODY2MjAzODYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MjY1OTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBIZXJlJ3MgaG93IEknbSBhcHByb2FjaGluZyB0aGlzIGNvZGUgYW5hbHlzaXM6XG5cbioqTXkgQ29kZSBBbmFseXNpcyBTdHJhdGVneSoqXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBJcyBpdCBwYXJ0IG9mIGFuIGFjdGl2ZSBwYXRoLCBvciBpcyBpdCBkZWFkIHdlaWdodD8gTmV4dCwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlJ3MgaW5jbHVzaW9uIGFuZCBleGVjdXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gYW55IGRlZXBlciBkaXZlLiBBZnRlciB0aGF0LCBhIGNydWNpYWwganVkZ21lbnQgY2FsbDogaXMgdGhpcyBjb2RlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/IFdpbGwgaXQgb2ZmZXIgYSB2YWx1YWJsZSBhdHRhY2sgc3VyZmFjZT8gRmluYWxseSwgSSBzaG91bGQgaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIGFyZSBtb3N0IGltcG9ydGFudC4gXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZvbGxvd2luZyBmaWxlczogYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlncyB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9ucyBpbiB0aGUgZmlyc3QgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjIxLjk1ODg2NTI5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoaXBtcnxpcDZtcnxpcG1yX2Jhc2UpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MjIuMDA1NTQ2MDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODIyODc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIElQdjYgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLlwiIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gc29tZSBhcmVhcywgYnV0IEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZyB3ZSBjb3VsZCBiZSBtaXNzaW5nIHNvbWV0aGluZyB1cHN0cmVhbS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGluIHRoZXJlIHdlIGhhdmVuJ3QgY29uc2lkZXJlZCwgb3IgcGVyaGFwcyBzb21lIHJlbGF0aW9uc2hpcHMgd2UgaGF2ZW4ndCBmdWxseSBncmFzcGVkLiBHb3R0YSBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGNvbXBsZXhpdHkuIFRpbWUgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI3LjQ4Mzc3NzI3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZtclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI3LjUyOTgzNDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MzE4MjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqRXhhbWluaW5nIEtjb25maWcgZm9yIE11bHRpY2FzdCBSb3V0aW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZy4gRmlyc3QsIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYElQX01ST1VURWAgYW5kIGBJUFY2X01ST1VURWAuIFRoZXNlIGFyZSB0aGUga2V5IGRlZmluZXMgZm9yIGVuYWJsaW5nIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHksIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIHdoZXJlIHRoZXkncmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXkgc2V0IGFzIGRlZmF1bHRzPyBBcmUgdGhleSBoaWRkZW4gYmVoaW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCBhbmQgdGhlbiBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBteSB3b3JrIHdpdGggdGhpcyBzcGVjaWZpYyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzoyOS4zNzMwMTkzNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjYwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUC4qTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI5LjQ0MTY4NTQzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1NzIyODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBkZWZpbml0aW9ucywgYW5kIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJICpyZWFsbHkqIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gdGhpbmtpbmcsIFwiRG9uJ3QganVzdCB0YWtlIHRoaXMgYXQgZmFjZSB2YWx1ZS5cIiBMZXQncyBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyDigJMgKnRoYXQncyogd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhlc2UsIHdoYXQgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxheSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlIG1pZ2h0IGJlLiBJdCdzIGFib3V0IGJlaW5nIHRob3JvdWdoLCBlbnN1cmluZyBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMuIEEgcXVpY2sgc2NhbiB3b24ndCBkbzsgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozMS40NTc0MTE3MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIElQX01ST1VURV9DT01NT05cXG4gMjE3OlxcdFxcdGJvb2xcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxuIDIxOTpcXHRcXG4gMjIwOlxcdGNvbmZpZyBJUF9NUk9VVEVcXG4gMjIxOlxcdFxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4gMjIyOlxcdFxcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXFxuIDIyMzpcXHRcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbiAyMjQ6XFx0XFx0aGVscFxcbiAyMjU6XFx0XFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcXG4gMjI2OlxcdFxcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcXG4gMjI3OlxcdFxcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcXG4gMjI4OlxcdFxcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XFxuIDIyOTpcXHRcXHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJ3QgaGVhcmQgYWJvdXQgaXQsIHlvdVxcbiAyMzA6XFx0XFx0ICBkb24ndCBuZWVkIGl0LlxcbiAyMzE6XFx0XFxuIDIzMjpcXHRjb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbiAyMzM6XFx0XFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFxcdTAwMjZcXHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAyMzU6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAyMzY6XFx0XFx0aGVscFxcbiAyMzc6XFx0XFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXFxuIDIzODpcXHRcXHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcXG4gMjM5OlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcXG4gMjQwOlxcdFxcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xcbiAyNDE6XFx0XFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXFxuIDI0MjpcXHRcXHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDU6XFx0XFxuIDI0NjpcXHRjb25maWcgSVBfUElNU01fVjFcXG4gMjQ3OlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcXFwiXFxuIDI0ODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozMS40NTc1MjIxMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMDk5NzMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYG5ldC9pcHY2L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYElQVjZfTVJPVVRFYCBvcHRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtdWx0aWNhc3Qgcm91dGluZyB3aXRoIElQdjYuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB1cCBhcyBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZSwgYW5kIEkgbmVlZCB0byByZWNhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MzQuMzc4NTI5MDMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdCAgbm9ybWFsIGFuZCBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcyBpbiB0aGUgc2FtZSByb3V0aW5nIHRhYmxlXFxuIDI1MTpcXHRcXHQgIG1heSBzb21ldGltZXMgbGVhZCB0byB1bmludGVuZGVkIHJvdXRpbmcgYmVoYXZpb3IuICBUaGlzIGNhbiBiZVxcbiAyNTI6XFx0XFx0ICBhdm9pZGVkIGJ5IGRlZmluaW5nIGRpZmZlcmVudCByb3V0aW5nIHRhYmxlcyBmb3IgdGhlIG5vcm1hbCBhbmRcXG4gMjUzOlxcdFxcdCAgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMuXFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjU2OlxcdFxcbiAyNTc6XFx0Y29uZmlnIElQVjZfTVJPVVRFXFxuIDI1ODpcXHRcXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4gMjU5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyNjA6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjYxOlxcdFxcdGhlbHBcXG4gMjYyOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZy5cXG4gMjYzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjY0OlxcdFxcbiAyNjU6XFx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbiAyNjY6XFx0XFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbiAyNjc6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyNjg6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAyNjk6XFx0XFx0aGVscFxcbiAyNzA6XFx0XFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXFxuIDI3MTpcXHRcXHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcXG4gMjcyOlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcXG4gMjczOlxcdFxcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xcbiAyNzQ6XFx0XFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXFxuIDI3NTpcXHRcXHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cXG4gMjc2OlxcdFxcbiAyNzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNzg6XFx0XFxuIDI3OTpcXHRjb25maWcgSVBWNl9QSU1TTV9WMlxcbiAyODA6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbiAyODE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyODI6XFx0XFx0aGVscFxcbiAyODM6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IFBJTSBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBQSU0tU012Mi5cXG4gMjg0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MzQuMzc4NjE4NjAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Njk2NDA3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgQ29tbWl0KipcblxuQWxyaWdodCwgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgbGV0J3MgcmVhbGx5IGRpc3NlY3QgdGhpcyBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlICp3aGF0Ki4gTXkgZmlyc3Qgc3RvcCBpcywgbmF0dXJhbGx5LCB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUganVzdGlmaWNhdGlvbiBhbmQgYSBjb25jaXNlIG92ZXJ2aWV3LiBCdXQgSSdtIG5vdCBzdG9wcGluZyB0aGVyZTsgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGZ1bGwgY29tbWl0IGluZm8g4oCTIHRoZSBkaWZmcywgdGhlIGNvbnRleHQsIG1heWJlIHJlbGF0ZWQgaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHMuIEknbSBsb29raW5nIGZvciB0aGUgZnVsbCBuYXJyYXRpdmUgaGVyZS4gSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGFzc2VzcyBub3QganVzdCBpZiB0aGUgY2hhbmdlICp3b3JrcyosIGJ1dCBpZiBpdCdzIHRoZSByaWdodCBhcHByb2FjaCwgaWYgaXQgYWRkcmVzc2VzIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gZWZmZWN0aXZlbHksIGFuZCBpZiBpdCBhbGlnbnMgd2l0aCB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyYWwgZ29hbHMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCB0aGF0IHRoZSBjb21taXQgbWlnaHQgYnJpbmcgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjM2Ljk0ODI2MTg1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNzA6XFx0XFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbjMzNzE6XFx0XFx0IC5kb2l0ID0gaXBtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcG1yX3J0bV9kdW1wcm91dGUsXFxuMzM3MjpcXHRcXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuMzM3MzpcXHR9O1xcbjMzNzQ6XFx0XFxuMzM3NTpcXHRpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4zMzc2OlxcdHtcXG4zMzc3OlxcdFxcdGludCBlcnI7XFxuMzM3ODpcXHRcXG4zMzc5OlxcdFxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcXG4zMzgwOlxcdFxcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbjMzODE6XFx0XFxuMzM4MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcG1yX25ldF9vcHMpO1xcbjMzODM6XFx0XFx0aWYgKGVycilcXG4zMzg0OlxcdFxcdFxcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmlwX21yX25vdGlmaWVyKTtcXG4zMzg3OlxcdFxcdGlmIChlcnIpXFxuMzM4ODpcXHRcXHRcXHRnb3RvIHJlZ19ub3RpZl9mYWlsO1xcbjMzODk6XFx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxcbjMzOTA6XFx0XFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFxcdTAwMjZwaW1fcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcXHUwMDNjIDApIHtcXG4zMzkxOlxcdFxcdFxcdHByX2VycihcXFwiJXM6IGNhbid0IGFkZCBQSU0gcHJvdG9jb2xcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4zMzkyOlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMzM5MzpcXHRcXHRcXHRnb3RvIGFkZF9wcm90b19mYWlsO1xcbjMzOTQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozNi45NDg0NTI5ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1NTA1ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgaXA2bXIuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L2lwNm1yLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGxpbmVzIGFyb3VuZCAxNDI3LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGEgY3JpdGljYWwgbG9vcCBvciBjb25kaXRpb25hbCBtaWdodCByZXNpZGUgd2l0aGluIHRoYXQgc291cmNlIGZpbGUsIHNvIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcXVpY2tseSBicmluZyB0byBtaW5kIHdoYXQgYXNwZWN0IG9mIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBzdGFjayBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgd2hlcmUgSSBsZWZ0IG9mZi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjM5LjEwMzUxMzI5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNm1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHR7Lm93bmVyID0gVEhJU19NT0RVTEUsIC5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQNk1SLFxcbjE0MjE6XFx0XFx0IC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbjE0MjI6XFx0XFx0IC5kb2l0ID0gaXA2bXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXA2bXJfcnRtX2R1bXByb3V0ZSxcXG4xNDIzOlxcdFxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG4xNDI0OlxcdH07XFxuMTQyNTpcXHRcXG4xNDI2OlxcdGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4xNDI3OlxcdHtcXG4xNDI4OlxcdFxcdGludCBlcnI7XFxuMTQyOTpcXHRcXG4xNDMwOlxcdFxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XFxuMTQzMTpcXHRcXHRpZiAoIW1ydF9jYWNoZXApXFxuMTQzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXA2bXJfbmV0X29wcyk7XFxuMTQzNTpcXHRcXHRpZiAoZXJyKVxcbjE0MzY6XFx0XFx0XFx0Z290byByZWdfcGVybmV0X2ZhaWw7XFxuMTQzNzpcXHRcXG4xNDM4OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2aXA2X21yX25vdGlmaWVyKTtcXG4xNDM5OlxcdFxcdGlmIChlcnIpXFxuMTQ0MDpcXHRcXHRcXHRnb3RvIHJlZ19ub3RpZl9mYWlsO1xcbjE0NDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyXFxuMTQ0MjpcXHRcXHRpZiAoaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZwaW02X3Byb3RvY29sLCBJUFBST1RPX1BJTSkgXFx1MDAzYyAwKSB7XFxuMTQ0MzpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBjYW4ndCBhZGQgUElNIHByb3RvY29sXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTQ0NDpcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozOS4xMDQ5MjkzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MzM2MTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSVB2NCBNdWx0aWNhc3QgUm91dGVyIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHdlIHNob3VsZCBhbHNvIHNwZWNpZmljYWxseSBhbmFseXplIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZXJlZm9yZSB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byByZW1haW4uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhbGxvY2F0aW9uIGhhcHBlbnMsIHdoYXQgcmVzb3VyY2VzIGl0IGlzIGRlcGVuZGVudCBvbiwgYW5kIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgYm90dGxlbmVjaywgb3IgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIG92ZXJhbGwgaGFuZGxpbmcgb2YgbXVsdGljYXN0IHRyYWZmaWMuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NDEuMjQ4Mjk0MDMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZtcnQtXFx1MDAzZXdvcmspO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgbXJfdGFibGUgKlxcbiAgNDY6XFx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXFxuICA0NzpcXHRcXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbiAgNDg6XFx0XFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxcbiAgNDk6XFx0XFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCkpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gIDUzOlxcdFxcdGludCBlcnI7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA1NjpcXHRcXHRpZiAoIW1ydClcXG4gIDU3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTg6XFx0XFx0bXJ0LVxcdTAwM2VpZCA9IGlkO1xcbiAgNTk6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQsIG5ldCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gIDYyOlxcdFxcdGVyciA9IHJobHRhYmxlX2luaXQoXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gsIG1ydC1cXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xcbiAgNjM6XFx0XFx0aWYgKGVycikge1xcbiAgNjQ6XFx0XFx0XFx0a2ZyZWUobXJ0KTtcXG4gIDY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNm1ydC1cXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcXG4gIDY5OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KTtcXG4gIDcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY191bnJlc19xdWV1ZSk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtcnQtXFx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuICA3NTpcXHRcXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xcbiAgNzY6XFx0XFx0cmV0dXJuIG1ydDtcXG4gIDc3OlxcdH1cXG4gIDc4OlxcdFxcbiAgNzk6XFx0dm9pZCAqbXJfbWZjX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCB2b2lkICpoYXNoYXJnLCBpbnQgcGFyZW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzo0MS4yNDgzNzU3MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM5MDY0ODM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFjY291bnRpbmcgaW4gTXVsdGljYXN0IFJvdXRpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYG1yX3RhYmxlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY19vYmpgIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIFNpbXVsdGFuZW91c2x5LCBgaXBfbXJfaW5pdGAgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGJvdGggbGV2ZXJhZ2luZyBgU0xBQl9BQ0NPVU5UYCB3aGVuIGluaXRpYWxpemluZyB0aGVpciByZXNwZWN0aXZlIGNhY2hlcywgYG1ydF9jYWNoZXBgLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGltcGFjdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYm90aCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBhbmQgYFNMQUJfQUNDT1VOVGAgYXJlIGludGVudGlvbmFsbHkgc2V0IHRvIGVuYWJsZSBtZW1jZyAobWVtb3J5IGNncm91cCkgYWNjb3VudGluZy4gVGhpcyBtZWFucyB0aGF0IGFueSBhbGxvY2F0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKGBzdHJ1Y3QgbXJfdGFibGVgKSBhbmQgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcyAoYHN0cnVjdCBtZmNfY2FjaGVgIGFuZCBgc3RydWN0IG1mYzZfY2FjaGVgKSDigJMgYXJlIG5vdyBkaXJlY3RseSBtYW5hZ2VkIGJ5IG1lbW9yeSBjZ3JvdXAgbGltaXRzLlxuXG5Ob3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBhcmUgdGhlc2UgYWxsb2NhdGlvbnMgcmVsZXZhbnQgaW4gYSBzdGFuZGFyZCBkZXBsb3ltZW50PyBBYnNvbHV0ZWx5LiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFyZSBjb3JlIGNvbXBvbmVudHMgb2YgYW55IHR5cGljYWwgbmV0d29ya2luZyBzeXN0ZW0uIFRoZXNlIGFsbG9jYXRpb25zIGFyZSByZWFjaGVkIGJ5IHVzZXJsYW5kIHRocm91Z2ggYHNldHNvY2tvcHRgIChlLmcuIE1SVF9JTklULCBNUlRfQUREX1ZJRiwgTVJUX0FERF9NRkMsIE1SVF9ERUxfTUZDIG9uIHJhdyBJUFBST1RPX0lHTVAgb3IgTVJUNl9JTklUIG9uIHJhdyBJUFBST1RPX0lDTVBWNiBzb2NrZXRzKSBvciB0aGUgbW9yZSBtb2Rlcm4gcnRuZXRsaW5rL2ZpYiBydWxlcywgc28gdGhpcyBpcyBjcml0aWNhbC5cblxuVGhlIHByYWN0aWNhbCBjb25zZXF1ZW5jZSBoZXJlIGlzIHRoYXQsIHdoZW4gdGhlc2UgYWxsb2NhdGlvbnMgb2NjdXIgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgdGhlIHByZXNlbmNlIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFuZCBgU0xBQl9BQ0NPVU5UYCBlZmZlY3RpdmVseSBzdWJqZWN0cyB0aGVtIHRvIG1lbWNnIGxpbWl0cy4gSWYgYSBjZ3JvdXAgZXhjZWVkcyBpdHMgbWVtb3J5IHF1b3RhLCB0aGVzZSBhbGxvY2F0aW9ucyBjYW4gZmFpbCB3aXRoIGAtRU5PTUVNYC4gVGhpcyBmYWlsdXJlLCBJIGFzc3VtZSwgd2lsbCB0cmlnZ2VyIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBtcl90YWJsZV9hbGxvY2AsIGBpcG1yX21mY19hZGRgLCBhbmQgYGlwNm1yX21mY19hZGRgIGFuZCBvdGhlcnMgdGhhdCBJIHdpbGwgd2FudCB0byByZXZpZXcuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgZGVlcGVyIGFuZCBleGFtaW5lIGV4YWN0bHkgd2hlcmUgYG1ydF9jYWNoZXBgIGlzIHVzZWQgd2l0aGluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBhY2NvdW50aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjQ3LjYzOTAyNzExOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNDcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXJ0X2NhY2hlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDEtXFxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTc0Ni1cXG5uZXQvaXB2NC9pcG1yLmM6NzQ3OlxcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mY19jYWNoZSAqKWMpO1xcbm5ldC9pcHY0L2lwbXIuYy03NDgtfVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTk5ND1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyh2b2lkKVxcbm5ldC9pcHY0L2lwbXIuYy05OTUte1xcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lwbXIuYy05OTctXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAwNz1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY0L2lwbXIuYy0xMDA4LXtcXG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcXHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvaXBtci5jLTEwMTAtXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MzM3NT1pbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxcbm5ldC9pcHY0L2lwbXIuYzozMzc5OlxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cXHRcXHRcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcXG5uZXQvaXB2NC9pcG1yLmM6MzQwNzpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjQvaXBtci5jLTM0MDgtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTg0LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XFxubmV0L2lwdjYvaXA2bXIuYy04Ni1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTgwMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcXHRrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgKHN0cnVjdCBtZmM2X2NhY2hlICopYyk7XFxubmV0L2lwdjYvaXA2bXIuYy04MDQtfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDI1PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2Modm9pZClcXG5uZXQvaXB2Ni9pcDZtci5jLTEwMjYte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcXHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTAyOC1cXHRpZiAoIWMpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwMzc9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XFxubmV0L2lwdjYvaXA2bXIuYzoxMDM5OlxcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVxcdGlmICghYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjktXFxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XFxubmV0L2lwdjYvaXA2bXIuYzoxNDMxOlxcdGlmICghbXJ0X2NhY2hlcClcXG5uZXQvaXB2Ni9pcDZtci5jLTE0MzItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0NTktcmVnX3Blcm5ldF9mYWlsOlxcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNDYxLVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE0NjQ9dm9pZCBfX2luaXQgaXA2X21yX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3MS1cXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwNm1yX25ldF9vcHMpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTQ3MjpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NDcuNzE4MDc4NTA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjkxNTcxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgTmV0d29yayBNdWx0aWNhc3QgUm91dGluZyBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgdGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIG9iamVjdGl2ZSBpcyB0byB1bmNvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBtb2RpZmljYXRpb25zLiBUaGUgcHJpbWFyeSBnYXRlIGhlcmUgaXMgcmVhY2hhYmlsaXR5OyBpZiB0aGUgY29kZSBpc24ndCByZWFjaGFibGUsIGl0J3MgYSBuby1nby4gTm8gYmxpbmQgZmFpdGggaW4gXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcyBlaXRoZXIsIHJlZmFjdG9yZWQgcmVhY2hhYmxlIGNvZGUgaXMgZnV6emFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCBoaXRzIGNvZGUgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIHdoaWNoLCBhcyBhIG5ldHdvcmtpbmcgc3BlY2lhbGlzdCwgSSBrbm93IGlzIGluIHRoZSBoZWFydCBvZiB0aGUgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiAgVGhpcyBkaXJlY3RseSBtb2RpZmllcyBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3Mg4oCTIGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCDigJMgdXNlZCBmb3IgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIGFuZCBNRkMgY2FjaGVzLiBUaGlzIGlzICpyZWFjaGFibGUqIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBuZXR3b3JraW5nLCBydW5uaW5nIG9uIHN0YW5kYXJkIGFtZDY0IFFFTVUga2VybmVscy4gVGhlIGNvZGUgY2xlYXJseSBpc24ndCBkb2N1bWVudGF0aW9uLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgYnkgdGhlIGRlZmluZWQgcnVsZXMgaW4gdGhlIGZpcnN0IHRocmVlIHNlY3Rpb25zLCBpdCdzIGEgZmlybSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEkgaGF2ZSBubyByZXNlcnZhdGlvbnMgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gZGVmaW5lIGEgZ29vZCBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBJIHNob3VsZCB0YXJnZXQgd2l0aCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBtcl90YWJsZV9hbGxvY2AgaW4gYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCBhbmQgYGlwX21yX2luaXRgIGluIGBuZXQvaXB2NC9pcG1yLmNgLiAgSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaWdub3JlIGBpcF9tcl9pbml0YCwgc2luY2UgaXQgaXMgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEkga25vdyBJIGhhdmUgdG8gcHJpb3JpdGl6ZSB0ZXN0YWJsZSBmdW5jdGlvbnMuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIGBtcl90YWJsZV9hbGxvY2AgYmVjYXVzZSBpdCBpcyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSBtb3N0IGxpa2VseSB0YXJnZXQgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzLiBTbyBub3cgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBtcl90YWJsZV9hbGxvY2AgYW5kIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbGxvY2F0aW5nIGZyb20gYG1ydF9jYWNoZXBgIHRvIGRlZmluZSBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTIuNTg3MjM5NzE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODAyNjA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcl90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDM3LVxcbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcG1yX21yX3RhYmxlX29wcyxcXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVxcdFxcdFxcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYz00NT1zdHJ1Y3QgbXJfdGFibGUgKlxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTQ3LVxcdCAgICAgICBzdHJ1Y3QgbXJfdGFibGVfb3BzICpvcHMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTQwOD1zdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cXG5uZXQvaXB2Ni9pcDZtci5jOjQxNjpcXHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcXG5uZXQvaXB2Ni9pcDZtci5jLTQxNy1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTIuNjc1MjcxMTc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzcwNTU4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMuIEknbSBmb2N1c2luZyBvbiBgbXJfdGFibGVfYWxsb2NgIGJlY2F1c2UgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY3JlYXRpb24gb2YgdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYG1yX3RhYmxlX2FsbG9jYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgc3RydWN0dXJlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGhzIGZvciBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBnZXR0aW5nIGNhbGxlZCBmcm9tLiBBIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGdldCBtZSBjbG9zZXIgdG8gdGhlIG92ZXJhbGwgY29udGV4dC4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgYG1mY19jYWNoZWAgb3IgYG1mYzZfY2FjaGVgIGFsbG9jYXRpb25zIGhhcHBlbiB3aXRoaW4gdGhpcyBjYWxsIGZsb3csIG9yIHBvdGVudGlhbGx5IGVsc2V3aGVyZS4gTG9jYXRpbmcgdGhlc2UgY2FjaGUgYWxsb2NhdGlvbnMsIGFsb25nc2lkZSB0aGUgbWFpbiB0YWJsZSBzdHJ1Y3R1cmUsIHNob3VsZCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVzb3VyY2Ugc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTQuOTEyMzMwMTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyNTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9OTgxPXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTk5My0vKiBBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeSAqL1xcbm5ldC9pcHY0L2lwbXIuYzo5OTQ6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZClcXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDA2LVxcbm5ldC9pcHY0L2lwbXIuYzoxMDA3OnN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTEwMDgte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExNDI9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTExNjctXFx0XFx0LyogQ3JlYXRlIGEgbmV3IGVudHJ5IGlmIGFsbG93YWJsZSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoxMTY4OlxcdFxcdGMgPSBpcG1yX2NhY2hlX2FsbG9jX3VucmVzKCk7XFxubmV0L2lwdjQvaXBtci5jLTExNjktXFx0XFx0aWYgKCFjKSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTI0MT1zdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEyNzItXFxubmV0L2lwdjQvaXBtci5jOjEyNzM6XFx0YyA9IGlwbXJfY2FjaGVfYWxsb2MoKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTI3NC1cXHRpZiAoIWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjU0Ljk2MzY2MTA2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjIyMjM4Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk11bHRpY2FzdCBSb3V0aW5nIE1vZHVsZSBFbnRyeXBvaW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBrZXJuZWwncyBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZSBrZXkgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBtYW5hZ2VkLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UgY3JpdGljYWwgZW50cnkgcG9pbnRzLlxuXG5JJ3ZlIHNjb3BlZCBpbiBvbiB0aGUgSVB2NCAoYG5ldC9pcHY0L2lwbXIuY2ApIGFuZCBJUHY2IChgbmV0L2lwdjYvaXA2bXIuY2ApIG1vZHVsZXMgc3BlY2lmaWNhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWx0aWNhc3QgZm9yd2FyZGluZyBpcyBjb25zdHJ1Y3RlZC4gSSd2ZSBub3RlZCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lczogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AgZm9yIGNhY2hpbmcgYW5kIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gSSdtIG5vdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRhYmxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbjogYGlwbXJfbmV3X3RhYmxlYCwgYGlwNm1yX25ld190YWJsZWAuIEkgc2VlIHNvdXJjZS1zcGVjaWZpYyBtdWx0aWNhc3QgZnVuY3Rpb25zOiBgaXBtcl9tZmNfYWRkYCwgYGlwbXJfbWZjX2RlbGV0ZWAsIGBpcDZtcl9tZmNfYWRkYCwgYW5kIGBpcDZtcl9tZmNfZGVsZXRlYCB0aGF0IG1hbmFnZSBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSBlbnRyaWVzLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLiBJJ2xsIG5lZWQgdG8gZm9sbG93IGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBgc2V0c29ja29wdGAgYW5kIG5ldGxpbmsgZW50cnkgcG9pbnRzLCB0aG9zZSBhcmUgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTguNTg1OTAyODk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk1ODE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDctXFx0aWYgKGlwX21yb3V0ZV9vcHQob3B0bmFtZSkpXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDg6XFx0XFx0cmV0dXJuIGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDktXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTM3OD1zdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNDA5LVxcbm5ldC9pcHY0L2lwbXIuYzoxNDEwOmludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY0L2lwbXIuYy0xNDExLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzo1OC42NTI4NjU0OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzODEwMDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKio2bXIgc2V0c29ja29wdCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYDZtciBzZXRzb2Nrb3B0YCBidXNpbmVzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyDigJMgaXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSd2ZSBkaXJlY3RseSBkZWFsdCB3aXRoIGl0LCBidXQgdGhlIGNvbmNlcHQgaXMgZGVmaW5pdGVseSBmYW1pbGlhci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoYXQgdW5kZXJseWluZyB0ZWNobm9sb2d5IGlzIGJlaW5nIHJlZmVyZW5jZWQgaGVyZSAtIEkgYXNzdW1lIHRoaXMgaXMgSVB2NiBNdWx0aWNhc3QgUm91dGVyIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIHdhbnQgdG8gY29uZmlybS4gR2l2ZW4gdGhlIGNvbnRleHQsIGBzZXRzb2Nrb3B0YCBvYnZpb3VzbHkgcGxheXMgYSByb2xlLCBzbyBJIHdpbGwgbmVlZCB0byBjb25zaWRlciBzb2NrZXQgb3B0aW9ucyBmb3IgbXVsdGljYXN0IG9wZXJhdGlvbiBhbmQgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHBlcnRhaW5pbmcgdG8gSVB2NiBhbmQgcm91dGluZy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gc29ja2V0IG9wdGlvbiBmbGFncyByZWxhdGVkIHRvIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFuZCBzb3VyY2Utc3BlY2lmaWMgbXVsdGljYXN0LiBXaGF0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgcmVsZXZhbnQ/IFdoYXQgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYXJlIGxpa2VseSBpbiBwbGF5PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgd2l0aGluIGBzZXRzb2Nrb3B0YCBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBtdWx0aWNhc3Qgcm91dGVyIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgdGhlIGNvbW1vbiBmYWlsdXJlIHBvaW50cywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUgSSBoYXZlIGV4cGVyaWVuY2VkIGRpcmVjdGx5LCBvciBvbmUgdGhhdCBJJ3ZlIG9ubHkgcmVhZCBhYm91dC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbiBwZWN1bGlhcml0aWVzLiBEb2VzIHRoaXMgcmVsYXRlIHRvIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgcm91dGVyIGZ1bmN0aW9uYWxpdHksIHNldHRpbmcgdGhlIFRUTCwgb3IgY29udHJvbGxpbmcgdGhlIGludGVyZmFjZXMgdXNlZCBmb3IgbXVsdGljYXN0IHRyYWZmaWM/IElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGtlcm5lbCBtb2R1bGUgb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHZhcmlvdXMgYHNldHNvY2tvcHRgIGNhbGxzIG9uIHRoZSByb3V0aW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW1wYWN0cyBmb3J3YXJkaW5nIGRlY2lzaW9ucyBvciB0aGUgY3JlYXRpb24vcmVtb3ZhbCBvZiBtdWx0aWNhc3QgZm9yd2FyZGluZyBlbnRyaWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBuZXR3b3JrIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjAyLjE5MDk3MDIxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzMzQzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZtci5jPTE3MDM9RVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE3MTEtXFxubmV0L2lwdjYvaXA2bXIuYzoxNzEyOmludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2Ni9pcDZtci5jLTE3MTMtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTYtXFx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzozOTc6XFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjAyLjI1MTMwOTMyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg1MTk3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgUm91dGluZyBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgSVAgbXVsdGljYXN0IHJvdXRpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbmV0bGluayBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgZm9yIGFkZGluZyBvciBtb2RpZnlpbmcgbXVsdGljYXN0IHJvdXRlcyBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGVpdGhlciBgaXBtcl9ydG1fcm91dGVgIG9yIGBpcG1yX3J0bV9uZXdyb3V0ZWAuIE9uZSBvZiB0aG9zZSBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSByb3V0ZXMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsgbWVzc2FnZXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjA0LjEzNjUxNjE0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNTk5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtcl9ydG1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjY3MC1cXG5uZXQvaXB2NC9pcG1yLmM6MjY3MTpzdGF0aWMgaW50IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwbXIuYy0yNjcyLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yNzI1LVxcbm5ldC9pcHY0L2lwbXIuYzoyNzI2OnN0YXRpYyBpbnQgaXBtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2lwdjQvaXBtci5jLTI3MjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjczNy1cXG5uZXQvaXB2NC9pcG1yLmM6MjczODpcXHRlcnIgPSBpcG1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoaW5fc2tiLCBubGgsIHRiLCBleHRhY2spO1xcbm5ldC9pcHY0L2lwbXIuYy0yNzM5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI3ODMtXFxubmV0L2lwdjQvaXBtci5jOjI3ODQ6c3RhdGljIGludCBpcG1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9pcHY0L2lwbXIuYy0yNzg1LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yODI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1faXBtcl9wb2xpY3lbUlRBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI4MzQtXFxubmV0L2lwdjQvaXBtci5jOjI4MzU6c3RhdGljIGJvb2wgaXBtcl9ydG1fdmFsaWRhdGVfcHJvdG8odW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2wpXFxubmV0L2lwdjQvaXBtci5jLTI4MzYte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTI4NjE9c3RhdGljIGludCBydG1fdG9faXBtcl9tZmNjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjg4Mi1cXHQgICAgcnRtLVxcdTAwM2VydG1fc2NvcGUgIT0gUlRfU0NPUEVfVU5JVkVSU0UgfHxcXG5uZXQvaXB2NC9pcG1yLmM6Mjg4MzpcXHQgICAgIWlwbXJfcnRtX3ZhbGlkYXRlX3Byb3RvKHJ0bS1cXHUwMDNlcnRtX3Byb3RvY29sKSlcXG5uZXQvaXB2NC9pcG1yLmMtMjg4NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yOTQyLS8qIHRha2VzIGNhcmUgb2YgYm90aCBuZXdyb3V0ZSBhbmQgZGVscm91dGUgKi9cXG5uZXQvaXB2NC9pcG1yLmM6Mjk0MzpzdGF0aWMgaW50IGlwbXJfcnRtX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY0L2lwbXIuYy0yOTQ0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTMwMjQ9c3RhdGljIGludCBpcG1yX3ZhbGlkX2R1bXBsaW5rKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTMwNDgtXFxubmV0L2lwdjQvaXBtci5jOjMwNDk6c3RhdGljIGludCBpcG1yX3J0bV9kdW1wbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaXBtci5jLTMwNTAte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTMzNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwbXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvaXB2NC9pcG1yLmMtMzM2NC1cXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcXG5uZXQvaXB2NC9pcG1yLmM6MzM2NTpcXHQgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXBsaW5rLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNjYtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX05FV1JPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzY3OlxcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNjgtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0RFTFJPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzY5OlxcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNzAtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzcxOlxcdCAuZG9pdCA9IGlwbXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXBtcl9ydG1fZHVtcHJvdXRlLFxcbm5ldC9pcHY0L2lwbXIuYy0zMzcyLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MDQuMjI1ODA0ODI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjA5Nzc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbXVsdGljYXN0IHJvdXRpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uIGluIGBpcG1yX2Jhc2UuY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBhcmVhcy4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGFtaW5lIGluY2x1ZGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwbXJfbWZjX2FkZGAsIGBpcDZtcl9tZmNfYWRkYCwgYGlwbXJfcnRtX3JvdXRlYCwgYW5kIGBpcDZtcl9ydG1fcm91dGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGlwNm1yX3J0bV9yb3V0ZWAgYWN0dWFsbHkgZXhpc3RzIHdpdGhpbiB0aGUgc3lzdGVtIGJlZm9yZSBhc3N1bWluZyBhbnkgZnVydGhlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjA2LjE0Njc4NDc1NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNm1yX3J0bV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk5OnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE0MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNm1yX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3Rfb3JfbW9kdWxlID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDIxLVxcdCAubXNndHlwZSA9IFJUTV9HRVRST1VURSxcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MjI6XFx0IC5kb2l0ID0gaXA2bXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXA2bXJfcnRtX2R1bXByb3V0ZSxcXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjMtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0yNjk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcDZtcl9nZXRyb3V0ZV9wb2xpY3lbUlRBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzAwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjcwMTpzdGF0aWMgaW50IGlwNm1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3MzItXFxubmV0L2lwdjYvaXA2bXIuYzoyNzMzOnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjczNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3NDQtXFxubmV0L2lwdjYvaXA2bXIuYzoyNzQ1OlxcdGVyciA9IGlwNm1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoaW5fc2tiLCBubGgsIHRiLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjc0Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjc4OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjI3OTA6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2Ni9pcDZtci5jLTI3OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODowNi4yNTIwMjk4NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwNTAwNzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgaGFyZCBsb29rIGF0IHRoZSBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnRzIGZvciBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nLiBJIHdhbnQgdG8gZW5zdXJlIHRoZXkncmUgc2V0dGluZyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UsIGFuZCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhleSBhcmUgaW5pdGlhbGl6aW5nIGFsbCB0aGUgcmVxdWlyZWQgbWVtYmVycyBjb3JyZWN0bHksIGluY2x1ZGluZyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBhbnkgaW5pdGlhbCBzdGF0ZSBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgaXMgZm91bmRhdGlvbmFsIGZvciBhbmFseXppbmcgaG93IG11bHRpY2FzdCByb3V0aW5nIGhhbmRsZXMgdGhlIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGZvcndhcmRpbmcgc3RhdGUuIEl0J3MgYSBrZXkgc3BvdCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgZGVmYXVsdCBiZWhhdmlvcnMgZWFybHkgb24uIExldCdzIHNlZSBpZiB0aGUgdGFibGUgY3JlYXRpb24gcHJvY2Vzc2VzIGhhbmRsZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBlcnJvciByZXBvcnRpbmcgcm9idXN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MDguMzU3MDQwOTc3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5Mjg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBbNl0/bXJfbmV3X3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXFxubmV0L2lwdjQvaXBtci5jOjEwNDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcG1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XFxubmV0L2lwdjQvaXBtci5jLTEwNS1zdGF0aWMgdm9pZCBpcG1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjQyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcG1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1NC1cXG5uZXQvaXB2NC9pcG1yLmM6MjU1OlxcdG1ydCA9IGlwbXJfbmV3X3RhYmxlKG5ldCwgUlRfVEFCTEVfREVGQVVMVCk7XFxubmV0L2lwdjQvaXBtci5jLTI1Ni1cXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMzU9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMzM4LVxcbm5ldC9pcHY0L2lwbXIuYzozMzk6XFx0bXJ0ID0gaXBtcl9uZXdfdGFibGUobmV0LCBSVF9UQUJMRV9ERUZBVUxUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMzQwLVxcdGlmIChJU19FUlIobXJ0KSlcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zOTk9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcG1yX3JodF9wYXJhbXMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDA3LVxcbm5ldC9pcHY0L2lwbXIuYzo0MDg6c3RhdGljIHZvaWQgaXBtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy00MDktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz00MjE9c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXBtcl9tcl90YWJsZV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDI1LVxcbm5ldC9pcHY0L2lwbXIuYzo0MjY6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjQvaXBtci5jLTQyNy17XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDM4LVxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjQvaXBtci5jOjQzOTpcXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcG1yX25ld190YWJsZV9zZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy00NDAtfVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU5NC1cXHRcXHR9IGVsc2Uge1xcbm5ldC9pcHY0L2lwbXIuYzoxNTk1OlxcdFxcdFxcdG1ydCA9IGlwbXJfbmV3X3RhYmxlKG5ldCwgdXZhbCk7XFxubmV0L2lwdjQvaXBtci5jLTE1OTYtXFx0XFx0XFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz04NT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg4LXN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTIyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI0MS1cXG5uZXQvaXB2Ni9pcDZtci5jOjI0MjpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0yNDMtXFx0aWYgKElTX0VSUihtcnQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTMyMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMyNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0zMjgtXFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0zODE9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODktXFxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTM5MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTQwMz1zdGF0aWMgc3RydWN0IG1yX3RhYmxlX29wcyBpcDZtcl9tcl90YWJsZV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cXG5uZXQvaXB2Ni9pcDZtci5jOjQwODpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTYtXFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjYvaXA2bXIuYzo0MTc6XFx0XFx0XFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XFxubmV0L2lwdjYvaXA2bXIuYy00MTgtfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNzEyPWludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTg3Mi1cXHRcXHRyZXQgPSAwO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTg3MzpcXHRcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE4NzQtXFx0XFx0aWYgKElTX0VSUihtcnQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODowOC40ODI5NzU0NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxOTQ1NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGFuZCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGBJUF9NUk9VVEVfQ09NTU9OYC4gVGhhdCBsYXN0IG9uZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSB0aGUgb3RoZXJzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgYSBjcnVjaWFsIHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIHRoZSBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE1FTUNHYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0J3Mgd2hhdCBkcml2ZXMgdGhlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5UIGZsYWdzIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCBkYXRhLiBJIHJlYWxseSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgTUVNQ0dgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIG1lbWNnIGFjY291bnRpbmcgdG8gd29yaywgb3Igd2UgYXJlIHdhc3RpbmcgcmVzb3VyY2VzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYE1FTUNHYC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhhdCBgSVBfTVVMVElDQVNUYCBpcyBlbmFibGVkLCBzaW5jZSBgSVBfTVJPVVRFYCBkZXBlbmRzIG9uIGl0LCBhbmQgYElQVjZgIGZvciBgSVBWNl9NUk9VVEVgLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjExLjIwMjQzNzM1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxNjA5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjExLjI1ODYwMjU5MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjI2MTMyNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE11bHRpY2FzdCBSb3V0aW5nIENvZGUgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIHNlZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByZXNlbnQ6IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBgTUVNQ0dgLCBgSVBfTVVMVElDQVNUYCwgYW5kIGBJUFY2YC4gR29vZCwgdGhleSdyZSBhbGwgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLCB0YWJsZSBhbGxvY2F0aW9uLCBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IG9wdGlvbnMuIEkgd2VudCB0aHJvdWdoIHRoZSBsaXN0OiBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGAsIGBpcG1yX25ld190YWJsZWAsIGBpcDZtcl9uZXdfdGFibGVgLiBJIGNoZWNrZWQgdGhlaXIgc3RhdGljL2V4cG9ydGVkIHN0YXR1cy4gYGlwbXJfY2FjaGVfYWxsb2NgIGFuZCBgaXA2bXJfY2FjaGVfYWxsb2NgLCB3aGlsZSBzdGF0aWMsIGFyZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlcywgbWVhbmluZyB0aGV5IGFyZSB2ZXJ5IHJlbGV2YW50LiBgbXJfdGFibGVfYWxsb2NgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwbXJfcnRtX3JvdXRlYCwgYGlwbXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgYXJlIGNvcmUgZnVuY3Rpb25hbGl0eS4gQW5kLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgIGFyZSBzdGF0aWMgYnV0IGNyaXRpY2FsLlxuXG5JdCdzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgYXJlYSBmb2N1c2VzIG9uIElQIG11bHRpY2FzdCByb3V0aW5nIGFuZCB0aGUgdGFibGUvY2FjaGUgbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcy5cblxuQWxyaWdodCwgYSBmaW5hbCBkb3VibGUtY2hlY2s6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIGdyZWF0LCBtZWFuaW5nIHRoaXMgaXMgcmVhY2hhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB3ZSdyZSBzZWVpbmcgYWRkaXRpb25zIG9mIGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBtYXRjaGVzIHdoYXQgSSBhbHJlYWR5IGNvbmZpcm1lZCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgSSBleGFtaW5lZC5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgaGlnaC12YWx1ZSBjb2RlIHRvIGZvY3VzIG9uLCBhcyBpdCdzIGRpcmVjdGx5IGRlYWxpbmcgd2l0aCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgYWNjb3VudGluZyBmbGFncyBhZGQgYWRkaXRpb25hbCBpbnRlcmVzdC4gTGV0J3MgZ2V0IHRoZSByZXN1bHRzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODEsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjE2LjQ4NDczODEyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTM5MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX25ld190YWJsZVwiLFxuICAgIFwiaXA2bXJfbmV3X3RhYmxlXCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIixcbiAgICBcImlwbXJfcnRtX3JvdXRlXCIsXG4gICAgXCJpcG1yX2NhY2hlX2FsbG9jXCIsXG4gICAgXCJpcDZtcl9jYWNoZV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9uZXdfdGFibGVcIixcbiAgICBcImlwNm1yX25ld190YWJsZVwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCIsXG4gICAgXCJpcG1yX3J0bV9yb3V0ZVwiLFxuICAgIFwiaXBtcl9jYWNoZV9hbGxvY1wiLFxuICAgIFwiaXA2bXJfY2FjaGVfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMgKG1yX3RhYmxlIGFsbG9jYXRpb24gYW5kIG1mYy9tZmM2IGttZW1fY2FjaGVzKSB0byB1c2UgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFuZCBTTEFCX0FDQ09VTlQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHN1YmplY3QgdG8gbWVtY2cgbGltaXRzIGFuZCBmYWlsdXJlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MTYuNjI2MTQyOTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTQ5MzUwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MTYuNjI3MDE2ODExWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc1NDg0NzExODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbisrKyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuK1x0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwbXJfbmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuKysrIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCk7XG4rXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0X2NhY2hlcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODoxNi42MjcwMTg1OTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2ODQyMzE3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZXMgcmVsYXRlZCB0byBJUCBtdWx0aWNhc3Qgcm91dGluZywgc3BlY2lmaWNhbGx5IGluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIGFuZCB0aGUgYWxsb2NhdGlvbiBvZiBhIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGBtcnRgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuXG5cblNwZWNpZmljYWxseTpcblxuKiAgIEluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIHRoZXkndmUgYWRkZWQgdGhlIGBTTEFCX0FDQ09VTlRgIGZsYWcgdG8gYGttZW1fY2FjaGVgIGNhbGxzLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gIGBTTEFCX0FDQ09VTlRgIG1lYW5zIHRoaXMgY2FjaGUgaXMgbm93IGFjY291bnRlZCBmb3IgaW4gbWVtb3J5IGFjY291bnRpbmcsIHdoaWNoLCBpbiBpdHNlbGYsIGRvZXNuJ3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB0aGUgY2hhbmdlIG1lYW5zIHRoZSBhbGxvY2F0aW9ucyBjYW4gbm93IGJlIG1vbml0b3JlZC5cbiogICBJbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIHRoZXkncmUgdXNpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgbm93LiAgVGhpcyBpcyBhIG5vdGV3b3J0aHkgY2hhbmdlLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIEtNU0FOIG9wcG9ydHVuaXR5LiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5J3JlIHN0aWxsIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0J3MgYSB6ZXJvZWQgYWxsb2NhdGlvbi5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyB5ZXMsIGJlY2F1c2UgaXQgc2VlbXMgdGhlIHRlYW0gaXMgYWxyZWFkeSBhd2FyZSB0aGF0IHRoaXMgYXJlYSBjb3VsZCBjYXVzZSBpc3N1ZXMuIEhvd2V2ZXIsIGdpdmVuIG15IGV4cGVydGlzZSwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBkaWZmIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSBldmVuIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aG9zZSBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2VzICptZWFuKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXMgdGhpcyByZWxhdGVkIHRvIGEga25vd24gaXNzdWU/IEFyZSB0aGV5IGF0dGVtcHRpbmcgdG8gYWRkcmVzcyBhIHJlY2VudCBLTVNBTiBmaW5kaW5nPyBJIG5lZWQgdG8ga25vdyBmb3Igc3VyZS4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODozNS4zMTEyNTUyNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzg1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MzUuMzY0NjQ2NTc2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzYxNzgxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGt6YWxsb2Nfb2JqYCBEZWZpbml0aW9uKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGt6YWxsb2Nfb2JqYC4gSSdtIHByZXR0eSBzdXJlIEkga25vdyB3aGF0IGl0IGRvZXMsIGJ1dCBJJ3ZlIGJlZW4gYnVybmVkIGJlZm9yZSBieSBhc3N1bXB0aW9ucywgYW5kIHN1YnRsZSBkZXRhaWxzIGNhbiBiZSBjcnVjaWFsIGluIGtlcm5lbCBkZXZlbG9wbWVudC4gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIEknbSBvbiB0aGUgc2FtZSBwYWdlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dC4gSXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayBkZWZpbml0aW9ucywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuIEdvdHRhIGVsaW1pbmF0ZSBhbnkgcmlzayBvZiBtaXNpbnRlcnByZXRpbmcgaG93IHRoYXQgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIGFuZCB3aGF0IGl0cyBndWFyYW50ZWVzIGFyZSwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIGFuZCBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaWYgaXQncyB1c2VkIGluIGEgaGlnaGx5IGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGxldCdzIHZlcmlmeSB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MzcuNDQwODI3OTI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NTczMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTU6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU2LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODozOS42Mzg0MDY0MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUzNzA0MjI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGp1c3QgYWRkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgLCBmb3IgYWxsb2NhdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMsIGJvdGggSVB2NCBhbmQgSVB2Ni4gV2UncmUgdGFsa2luZyBhYm91dCBgbXJ0X2NhY2hlcGAsIGBtZmNfY2FjaGVgLCBgbWZjNl9jYWNoZWAsIGFuZCBgc3RydWN0IG1yX3RhYmxlYCBhbGxvY2F0aW9ucy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIGl0LCBhbmQgdGhlIGFuc3dlciBpcyBuby4gV2UncmUgbm90IGNyZWF0aW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVyczsgdGhlIGFsbG9jYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gYGlwbXJfYmFzZS5jYCwgc3RpbGwgdXNlIHplcm8taW5pdGlhbGl6YXRpb24gKGBremFsbG9jX29iamApLCBzbyB0aGF0J3MgYSBjaGVjay4gQWxzbywgdGhlc2UgZmxhZ3MgKGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCkgYXJlIHN0cmljdGx5IGZvciBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcuIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgY29kZSBwYXRocyB0aGF0IGludm9sdmUgYGNvcHlfdG9fdXNlcmAsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHBhZGRpbmcgbGVha3MsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIGluIHBsYWNlIGZvciBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGFuZCB3aGlsZSBLTVNBTiAqY291bGQqIGJlIHJlbGV2YW50IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYWRkaW5nIGFjY291bnRpbmcgZmxhZ3MgYWxvbmUgZG9lc24ndCB0cmlnZ2VyIGEgbmVlZCBmb3IgaXQuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgd2UgaGF2ZSB6ZXJvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGFkZGluZyBtZW1jZyBhY2NvdW50aW5nIGZsYWdzIHRvIHNsYWIgY2FjaGVzIGFuZCBhbGxvY2F0aW9ucy4gV2UncmUgbm90IGV4cG9zaW5nIGFueSBuZXcgbWVtb3J5IHJlYWRzLCBjb3B5aW5nIHN0cnVjdHMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBidWZmZXIgZXhwb3N1cmVzLiBUaGUgYWxsb2NhdGlvbiBpbiBgaXBtcl9iYXNlLmNgIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBLQVNBTiBhbmQgZ2VuZXJhbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6NDQuMTc1NDUzMjM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGZsYWdzIChTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCkgdG8gdGhlIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBzbGFiIGNhY2hlcyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlKSBhbmQgdGhlIG1yX3RhYmxlIHN0cnVjdHVyZSBhbGxvY2F0aW9uLiBObyBjaGFuZ2VzIGFyZSBtYWRlIHRvIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQsIGFuZCBtcl90YWJsZSBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmogKHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBleHBvc2VzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 11:26:05 +0000 UTC FinishedAt: 2026-09-07 11:28:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG", "IP_MULTICAST", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG", "IP_MULTICAST", "IPV6" ], "series_id": "c4c0cadb-0fff-4369-b2d7-701dfff92c77" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mr_table_alloc", "ip_mroute_setsockopt", "ip6_mroute_setsockopt", "ipmr_new_table", "ip6mr_new_table", "ipmr_mfc_add", "ip6mr_mfc_add", "ipmr_rtm_route", "ipmr_cache_alloc", "ip6mr_cache_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXBtcl9ydG1fcm91dGUmIzM0OywKICAgICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcDZtcl9jYWNoZV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7XG4mIzQzO1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuJiM0MztcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnQgPSBremFsbG9jX29iaigqbXJ0KTtcbiYjNDM7XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbiYjNDM7XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnRfY2FjaGVwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcl90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcF9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXA2bXJfbmV3X3RhYmxlJiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwbXJfcnRtX3JvdXRlJiMzNDssCiAgICAmIzM0O2lwbXJfY2FjaGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXA2bXJfY2FjaGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NzQwZmJiNzQxM2U5ODI5NzVmYzY1ZGQyNWU3OTcyZDQ5YWI2YzdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMToyNzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jCkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7CiYjNDM7CW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwKJiM0MzsJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7CiAKIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBtcl9uZXRfb3BzKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwppbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwpAQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsCiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAJaW50IGVycjsKIAotCW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpOwomIzQzOwltcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAltcnQtJmd0O2lkID0gaWQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTE0MjcsNyAmIzQzOzE0MjcsNyBAQCBpbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTik7CiYjNDM7CW1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7CiAJaWYgKCFtcnRfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVAgTXVsdGljYXN0IFJvdXRpbmcgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmcsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3BlY2lmaWMgZmlsZXMgY2hhbmdlZDogYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIElQIG11bHRpY2FzdCByb3V0aW5nLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNhY2hpbmcuCgpPa2F5LCBpbiBgaXBtci5jYCwgdGhleSYjMzk7dmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGBLTUVNX0NBQ0hFYCBmbGFncyB3aGVuIGluaXRpYWxpemluZyBgbXJ0X2NhY2hlcGAgZm9yIHRoZSBJUHY0IG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlLiBUaGF0IHN1Z2dlc3RzIHRoZXkgd2FudCB0byB0cmFjayB0aGUgbWVtb3J5IHVzYWdlIG9mIHRoYXQgY2FjaGUgc3BlY2lmaWNhbGx5LiBJbnRlcmVzdGluZy4KClRoZW4sIGluIGBpcG1yX2Jhc2UuY2AsIHRoZSBga3phbGxvY19vYmpgIGNhbGwgZm9yIGFsbG9jYXRpbmcgYG1yX3RhYmxlYCBzdHJ1Y3R1cmVzIG5vdyBpbmNsdWRlcyBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4gQW5vdGhlciBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2Ug4oCTIHRoaXMgdGltZSwgZm9yIHRoZSB0YWJsZSBpdHNlbGYuIFRoZXkgYXJlIHByb2JhYmx5IHRyeWluZyB0byBtZWFzdXJlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcywgYW5kIHRoZSBjYWNoZXMgZm9yIElQdjQuCgpGaW5hbGx5LCBpbiBgaXA2bXIuY2AsIHRoZSBgU0xBQl9BQ0NPVU5UYCBmbGFnIGlzIGFkZGVkIHRvIHRoZSBgS01FTV9DQUNIRWAgY2FsbCBmb3IgYG1ydF9jYWNoZXBgIGZvciBJUHY2IG11bHRpY2FzdC4gU28sIHNpbWlsYXIgdG8gdGhlIElQdjQgc2lkZSwgdGhleSBhcmUgbm93IHRyYWNraW5nIG1lbW9yeSB1c2FnZSBvZiB0aGUgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSwganVzdCBsaWtlIGluIElQdjQuCgpFc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBwb3NzaWJseSBkZWJ1Z2dpbmcgbWVtb3J5IHVzYWdlIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBmb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyBvciBtZW1vcnkgYmxvYXQgaW4gdGhlc2UgYXJlYXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGdpdCBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBhc3NvY2lhdGVkIGJ1ZyByZXBvcnQgb3IgcmF0aW9uYWxlIGZvciB0aGVzZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBncmVwcGVyL3JlYWQtZmlsZSB0b29scyB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYz00Nj1tcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbi0tXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01NC1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjU1Olx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTU2LVx0aWYgKCFtcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMgY29kZSBhbmFseXNpczoKCioqTXkgQ29kZSBBbmFseXNpcyBTdHJhdGVneSoqCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSo/IElzIGl0IHBhcnQgb2YgYW4gYWN0aXZlIHBhdGgsIG9yIGlzIGl0IGRlYWQgd2VpZ2h0PyBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlJiMzOTtzIGluY2x1c2lvbiBhbmQgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGFueSBkZWVwZXIgZGl2ZS4gQWZ0ZXIgdGhhdCwgYSBjcnVjaWFsIGp1ZGdtZW50IGNhbGw6IGlzIHRoaXMgY29kZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nPyBXaWxsIGl0IG9mZmVyIGEgdmFsdWFibGUgYXR0YWNrIHN1cmZhY2U/IEZpbmFsbHksIEkgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBuYW1lcyBhcmUgbW9zdCBpbXBvcnRhbnQuIAoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgZm9sbG93aW5nIGZpbGVzOiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGVpciBjb3JyZXNwb25kaW5nIEtjb25maWdzIHRvIGFuc3dlciB0aGUgcXVlc3Rpb25zIGluIHRoZSBmaXJzdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhpcG1yfGlwNm1yfGlwbXJfYmFzZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSAmIzQzOz0gZmliX3J1bGVzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbm5ldC9pcHY0L01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19ORVRfSVBJUCkgJiM0Mzs9IGlwaXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dlIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS4mIzM0OyBXZSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBzb21lIGFyZWFzLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHdlIGNvdWxkIGJlIG1pc3Npbmcgc29tZXRoaW5nIHVwc3RyZWFtLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGluIHRoZXJlIHdlIGhhdmVuJiMzOTt0IGNvbnNpZGVyZWQsIG9yIHBlcmhhcHMgc29tZSByZWxhdGlvbnNoaXBzIHdlIGhhdmVuJiMzOTt0IGZ1bGx5IGdyYXNwZWQuIEdvdHRhIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMgbGV2ZWwgb2YgY29tcGxleGl0eS4gVGltZSB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNm1yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgJiM0Mzs9IGlwNm1yLm9cbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgTXVsdGljYXN0IFJvdXRpbmcgT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gbXVsdGljYXN0IHJvdXRpbmcuIEZpcnN0LCBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBgSVBfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFYC4gVGhlc2UgYXJlIHRoZSBrZXkgZGVmaW5lcyBmb3IgZW5hYmxpbmcgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSwgcmVzcGVjdGl2ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIEFyZSB0aGV5IHNldCBhcyBkZWZhdWx0cz8gQXJlIHRoZXkgaGlkZGVuIGJlaGluZCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHNpbXBsZSBncmVwIGFuZCB0aGVuIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBteSB3b3JrIHdpdGggdGhpcyBzcGVjaWZpYyBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUC4qTVJPVVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRlZmluaXRpb25zLCBhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgKnJlYWxseSogbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7RG9uJiMzOTt0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuJiMzNDsgTGV0JiMzOTtzIGRpdmUgaW50byB0aG9zZSBLY29uZmlnIGZpbGVzIOKAkyAqdGhhdCYjMzk7cyogd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhlc2UsIHdoYXQgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxheSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlIG1pZ2h0IGJlLiBJdCYjMzk7cyBhYm91dCBiZWluZyB0aG9yb3VnaCwgZW5zdXJpbmcgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcy4gQSBxdWljayBzY2FuIHdvbiYjMzk7dCBkbzsgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG4gMjE3Olx0XHRib29sXG4gMjE4Olx0XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZyBJUF9NUk9VVEVcbiAyMjE6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxuIDIyMzpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyMjQ6XHRcdGhlbHBcbiAyMjU6XHRcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXG4gMjI2Olx0XHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXG4gMjI3Olx0XHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXG4gMjI4Olx0XHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxuIDIyOTpcdFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBpdCwgeW91XG4gMjMwOlx0XHQgIGRvbiYjMzk7dCBuZWVkIGl0LlxuIDIzMTpcdFxuIDIzMjpcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjMzOlx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyMzQ6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbiAyMzU6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyMzY6XHRcdGhlbHBcbiAyMzc6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDIzODpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjM5Olx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjQwOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNDE6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI0MjpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjQzOlx0XG4gMjQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ1Olx0XG4gMjQ2Olx0Y29uZmlnIElQX1BJTVNNX1YxXG4gMjQ3Olx0XHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbiAyNDg6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFXG4gMjQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGBJUFY2X01ST1VURWAgb3B0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLiBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG11bHRpY2FzdCByb3V0aW5nIHdpdGggSVB2Ni4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIGFzIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlLCBhbmQgSSBuZWVkIHRvIHJlY2FsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0ICBub3JtYWwgYW5kIHNvdXJjZSBwcmVmaXggc3BlY2lmaWMgcm91dGVzIGluIHRoZSBzYW1lIHJvdXRpbmcgdGFibGVcbiAyNTE6XHRcdCAgbWF5IHNvbWV0aW1lcyBsZWFkIHRvIHVuaW50ZW5kZWQgcm91dGluZyBiZWhhdmlvci4gIFRoaXMgY2FuIGJlXG4gMjUyOlx0XHQgIGF2b2lkZWQgYnkgZGVmaW5pbmcgZGlmZmVyZW50IHJvdXRpbmcgdGFibGVzIGZvciB0aGUgbm9ybWFsIGFuZFxuIDI1MzpcdFx0ICBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcy5cbiAyNTQ6XHRcbiAyNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTY6XHRcbiAyNTc6XHRjb25maWcgSVBWNl9NUk9VVEVcbiAyNTg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyNTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI2MDpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyNjE6XHRcdGhlbHBcbiAyNjI6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZy5cbiAyNjM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjQ6XHRcbiAyNjU6XHRjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjY2Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuIDI2NzpcdFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxuIDI2ODpcdFx0c2VsZWN0IEZJQl9SVUxFU1xuIDI2OTpcdFx0aGVscFxuIDI3MDpcdFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXG4gMjcxOlx0XHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcbiAyNzI6XHRcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcbiAyNzM6XHRcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xuIDI3NDpcdFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXG4gMjc1Olx0XHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cbiAyNzY6XHRcbiAyNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNzg6XHRcbiAyNzk6XHRjb25maWcgSVBWNl9QSU1TTV9WMlxuIDI4MDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbiAyODE6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyODI6XHRcdGhlbHBcbiAyODM6XHRcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXG4gMjg0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIENvbW1pdCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBsZXQmIzM5O3MgcmVhbGx5IGRpc3NlY3QgdGhpcyBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlICp3aGF0Ki4gTXkgZmlyc3Qgc3RvcCBpcywgbmF0dXJhbGx5LCB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGp1c3RpZmljYXRpb24gYW5kIGEgY29uY2lzZSBvdmVydmlldy4gQnV0IEkmIzM5O20gbm90IHN0b3BwaW5nIHRoZXJlOyBJJiMzOTtsbCBiZSBkaWdnaW5nIGludG8gdGhlIGZ1bGwgY29tbWl0IGluZm8g4oCTIHRoZSBkaWZmcywgdGhlIGNvbnRleHQsIG1heWJlIHJlbGF0ZWQgaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZ1bGwgbmFycmF0aXZlIGhlcmUuIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZSB0byBhc3Nlc3Mgbm90IGp1c3QgaWYgdGhlIGNoYW5nZSAqd29ya3MqLCBidXQgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGFwcHJvYWNoLCBpZiBpdCBhZGRyZXNzZXMgdGhlIHVuZGVybHlpbmcgcHJvYmxlbSBlZmZlY3RpdmVseSwgYW5kIGlmIGl0IGFsaWducyB3aXRoIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJhbCBnb2Fscy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCB0aGF0IHRoZSBjb21taXQgbWlnaHQgYnJpbmcgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4zMzcxOlx0XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbjMzNzI6XHRcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbjMzNzM6XHR9O1xuMzM3NDpcdFxuMzM3NTpcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuMzM3NjpcdHtcbjMzNzc6XHRcdGludCBlcnI7XG4zMzc4Olx0XG4zMzc5Olx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG4zMzgwOlx0XHRcdFx0XHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcbjMzODE6XHRcbjMzODI6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBtcl9uZXRfb3BzKTtcbjMzODM6XHRcdGlmIChlcnIpXG4zMzg0Olx0XHRcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xuMzM4NTpcdFxuMzM4NjpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmlwX21yX25vdGlmaWVyKTtcbjMzODc6XHRcdGlmIChlcnIpXG4zMzg4Olx0XHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG4zMzg5Olx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxuMzM5MDpcdFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4zMzkxOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjMzOTI6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjMzOTM6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjMzOTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwNm1yLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L2lwNm1yLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIHRoZSBsaW5lcyBhcm91bmQgMTQyNy4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgb3IgYSBjcml0aWNhbCBsb29wIG9yIGNvbmRpdGlvbmFsIG1pZ2h0IHJlc2lkZSB3aXRoaW4gdGhhdCBzb3VyY2UgZmlsZSwgc28gaXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGJyaW5nIHRvIG1pbmQgd2hhdCBhc3BlY3Qgb2YgdGhlIG11bHRpY2FzdCByb3V0aW5nIHN0YWNrIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhbmQgd2hlcmUgSSBsZWZ0IG9mZi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXG4xNDIxOlx0XHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4xNDIyOlx0XHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxuMTQyMzpcdFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuMTQyNDpcdH07XG4xNDI1Olx0XG4xNDI2Olx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuMTQyNzpcdHtcbjE0Mjg6XHRcdGludCBlcnI7XG4xNDI5Olx0XG4xNDMwOlx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuMTQzMTpcdFx0aWYgKCFtcnRfY2FjaGVwKVxuMTQzMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE0MzM6XHRcbjE0MzQ6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXA2bXJfbmV0X29wcyk7XG4xNDM1Olx0XHRpZiAoZXJyKVxuMTQzNjpcdFx0XHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0Z290byByZWdfbm90aWZfZmFpbDtcbjE0NDE6XHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcbjE0NDI6XHRcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2cGltNl9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4xNDQzOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE0NDQ6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIElQdjQgTXVsdGljYXN0IFJvdXRlciBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHdlIHNob3VsZCBhbHNvIHNwZWNpZmljYWxseSBhbmFseXplIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZXJlZm9yZSB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byByZW1haW4uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhbGxvY2F0aW9uIGhhcHBlbnMsIHdoYXQgcmVzb3VyY2VzIGl0IGlzIGRlcGVuZGVudCBvbiwgYW5kIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgYm90dGxlbmVjaywgb3IgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIGhhbmRsaW5nIG9mIG11bHRpY2FzdCB0cmFmZmljLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXJfYmFzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiAgNDE6XHR7XG4gIDQyOlx0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZtcnQtXHUwMDNld29yayk7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBtcl90YWJsZSAqXG4gIDQ2Olx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gIDQ3Olx0XHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuICA0ODpcdFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxuICA0OTpcdFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuICA1MDpcdFx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCkpXG4gIDUxOlx0e1xuICA1MjpcdFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gIDUzOlx0XHRpbnQgZXJyO1xuICA1NDpcdFxuICA1NTpcdFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAgNTY6XHRcdGlmICghbXJ0KVxuICA1NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiAgNTg6XHRcdG1ydC1cdTAwM2VpZCA9IGlkO1xuICA1OTpcdFx0d3JpdGVfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0LCBuZXQpO1xuICA2MDpcdFxuICA2MTpcdFx0bXJ0LVx1MDAzZW9wcyA9ICpvcHM7XG4gIDYyOlx0XHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNm1ydC1cdTAwM2VtZmNfaGFzaCwgbXJ0LVx1MDAzZW9wcy5yaHRfcGFyYW1zKTtcbiAgNjM6XHRcdGlmIChlcnIpIHtcbiAgNjQ6XHRcdFx0a2ZyZWUobXJ0KTtcbiAgNjU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiAgNjY6XHRcdH1cbiAgNjc6XHRcbiAgNjg6XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2bXJ0LVx1MDAzZXdvcmssIF9fbXJfZnJlZV90YWJsZSk7XG4gIDY5Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtcnQtXHUwMDNlbWZjX2NhY2hlX2xpc3QpO1xuICA3MDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXJ0LVx1MDAzZW1mY191bnJlc19xdWV1ZSk7XG4gIDcxOlx0XG4gIDcyOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZtcnQtXHUwMDNlaXBtcl9leHBpcmVfdGltZXIsIGV4cGlyZV9mdW5jLCAwKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0gPSAtMTtcbiAgNzU6XHRcdHRhYmxlX3NldChtcnQsIG5ldCk7XG4gIDc2Olx0XHRyZXR1cm4gbXJ0O1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHR2b2lkICptcl9tZmNfZmluZF9wYXJlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZvaWQgKmhhc2hhcmcsIGludCBwYXJlbnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBY2NvdW50aW5nIGluIE11bHRpY2FzdCBSb3V0aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYG1yX3RhYmxlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY19vYmpgIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIFNpbXVsdGFuZW91c2x5LCBgaXBfbXJfaW5pdGAgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGJvdGggbGV2ZXJhZ2luZyBgU0xBQl9BQ0NPVU5UYCB3aGVuIGluaXRpYWxpemluZyB0aGVpciByZXNwZWN0aXZlIGNhY2hlcywgYG1ydF9jYWNoZXBgLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGltcGFjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGJvdGggYEdGUF9LRVJORUxfQUNDT1VOVGAgYW5kIGBTTEFCX0FDQ09VTlRgIGFyZSBpbnRlbnRpb25hbGx5IHNldCB0byBlbmFibGUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIGFjY291bnRpbmcuIFRoaXMgbWVhbnMgdGhhdCBhbnkgYWxsb2NhdGlvbnMg4oCTIHNwZWNpZmljYWxseSwgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIChgc3RydWN0IG1yX3RhYmxlYCkgYW5kIG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlIGVudHJpZXMgKGBzdHJ1Y3QgbWZjX2NhY2hlYCBhbmQgYHN0cnVjdCBtZmM2X2NhY2hlYCkg4oCTIGFyZSBub3cgZGlyZWN0bHkgbWFuYWdlZCBieSBtZW1vcnkgY2dyb3VwIGxpbWl0cy4KCk5vdywgYSBjcnVjaWFsIGNvbnNpZGVyYXRpb246IGFyZSB0aGVzZSBhbGxvY2F0aW9ucyByZWxldmFudCBpbiBhIHN0YW5kYXJkIGRlcGxveW1lbnQ/IEFic29sdXRlbHkuIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYXJlIGNvcmUgY29tcG9uZW50cyBvZiBhbnkgdHlwaWNhbCBuZXR3b3JraW5nIHN5c3RlbS4gVGhlc2UgYWxsb2NhdGlvbnMgYXJlIHJlYWNoZWQgYnkgdXNlcmxhbmQgdGhyb3VnaCBgc2V0c29ja29wdGAgKGUuZy4gTVJUX0lOSVQsIE1SVF9BRERfVklGLCBNUlRfQUREX01GQywgTVJUX0RFTF9NRkMgb24gcmF3IElQUFJPVE9fSUdNUCBvciBNUlQ2X0lOSVQgb24gcmF3IElQUFJPVE9fSUNNUFY2IHNvY2tldHMpIG9yIHRoZSBtb3JlIG1vZGVybiBydG5ldGxpbmsvZmliIHJ1bGVzLCBzbyB0aGlzIGlzIGNyaXRpY2FsLgoKVGhlIHByYWN0aWNhbCBjb25zZXF1ZW5jZSBoZXJlIGlzIHRoYXQsIHdoZW4gdGhlc2UgYWxsb2NhdGlvbnMgb2NjdXIgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgdGhlIHByZXNlbmNlIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFuZCBgU0xBQl9BQ0NPVU5UYCBlZmZlY3RpdmVseSBzdWJqZWN0cyB0aGVtIHRvIG1lbWNnIGxpbWl0cy4gSWYgYSBjZ3JvdXAgZXhjZWVkcyBpdHMgbWVtb3J5IHF1b3RhLCB0aGVzZSBhbGxvY2F0aW9ucyBjYW4gZmFpbCB3aXRoIGAtRU5PTUVNYC4gVGhpcyBmYWlsdXJlLCBJIGFzc3VtZSwgd2lsbCB0cmlnZ2VyIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBtcl90YWJsZV9hbGxvY2AsIGBpcG1yX21mY19hZGRgLCBhbmQgYGlwNm1yX21mY19hZGRgIGFuZCBvdGhlcnMgdGhhdCBJIHdpbGwgd2FudCB0byByZXZpZXcuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGRlZXBlciBhbmQgZXhhbWluZSBleGFjdGx5IHdoZXJlIGBtcnRfY2FjaGVwYCBpcyB1c2VkIHdpdGhpbiBgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgYWNjb3VudGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ydF9jYWNoZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTAxLVxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xubmV0L2lwdjQvaXBtci5jLTEwMy1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy03NDYtXG5uZXQvaXB2NC9pcG1yLmM6NzQ3Olx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XG5uZXQvaXB2NC9pcG1yLmMtNzQ4LX1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pcG1yLmMtOTk3LVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtMTAwOC17XG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDEwLVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxubmV0L2lwdjQvaXBtci5jOjMzNzk6XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY0L2lwbXIuYzozNDA3Olx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjQvaXBtci5jLTM0MDgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04NC1cbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MDItXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODA0LX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEwMjgtXHRpZiAoIWMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDM3PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVx0aWYgKCFjKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDI5LVxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTQzMTpcdGlmICghbXJ0X2NhY2hlcClcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDU5LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTQ2MS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwNm1yX25ldF9vcHMpO1xubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgTmV0d29yayBNdWx0aWNhc3QgUm91dGluZyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcsIGFuZCB0aGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgdGhlIG1vZGlmaWNhdGlvbnMuIFRoZSBwcmltYXJ5IGdhdGUgaGVyZSBpcyByZWFjaGFiaWxpdHk7IGlmIHRoZSBjb2RlIGlzbiYjMzk7dCByZWFjaGFibGUsIGl0JiMzOTtzIGEgbm8tZ28uIE5vIGJsaW5kIGZhaXRoIGluICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgZWl0aGVyLCByZWZhY3RvcmVkIHJlYWNoYWJsZSBjb2RlIGlzIGZ1enphYmxlLgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IGhpdHMgY29kZSBpbiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCwgd2hpY2gsIGFzIGEgbmV0d29ya2luZyBzcGVjaWFsaXN0LCBJIGtub3cgaXMgaW4gdGhlIGhlYXJ0IG9mIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvZGUuICBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyDigJMgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgIOKAkyB1c2VkIGZvciBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgYW5kIE1GQyBjYWNoZXMuIFRoaXMgaXMgKnJlYWNoYWJsZSogZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcsIHJ1bm5pbmcgb24gc3RhbmRhcmQgYW1kNjQgUUVNVSBrZXJuZWxzLiBUaGUgY29kZSBjbGVhcmx5IGlzbiYjMzk7dCBkb2N1bWVudGF0aW9uLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgYnkgdGhlIGRlZmluZWQgcnVsZXMgaW4gdGhlIGZpcnN0IHRocmVlIHNlY3Rpb25zLCBpdCYjMzk7cyBhIGZpcm0gYFdvcnRoRnV6emluZyA9IHRydWVgLiBJIGhhdmUgbm8gcmVzZXJ2YXRpb25zIGhlcmUuCgpOb3csIEkgbmVlZCB0byBkZWZpbmUgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIEkgc2hvdWxkIHRhcmdldCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1yX3RhYmxlX2FsbG9jYCBpbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGFuZCBgaXBfbXJfaW5pdGAgaW4gYG5ldC9pcHY0L2lwbXIuY2AuICBJIHdpbGwgcHJvYmFibHkgbmVlZCB0byBpZ25vcmUgYGlwX21yX2luaXRgLCBzaW5jZSBpdCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gSSBrbm93IEkgaGF2ZSB0byBwcmlvcml0aXplIHRlc3RhYmxlIGZ1bmN0aW9ucy4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gYG1yX3RhYmxlX2FsbG9jYCBiZWNhdXNlIGl0IGlzIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIG1vc3QgbGlrZWx5IHRhcmdldCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MuIFNvIG5vdyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxlcnMgb2YgYG1yX3RhYmxlX2FsbG9jYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFsbG9jYXRpbmcgZnJvbSBgbXJ0X2NhY2hlcGAgdG8gZGVmaW5lIG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTQzNy1cbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNDctXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDA4PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cbm5ldC9pcHY2L2lwNm1yLmM6NDE2Olx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmMtNDE3LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIHRoZXNlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbXJfdGFibGVfYWxsb2NgIGJlY2F1c2UgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY3JlYXRpb24gb2YgdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYG1yX3RhYmxlX2FsbG9jYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgc3RydWN0dXJlcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBocyBmb3IgYGlwbXJfbmV3X3RhYmxlYCBhbmQgYGlwNm1yX25ld190YWJsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgZnJvbS4gQSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnZXQgbWUgY2xvc2VyIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBpZiBgbWZjX2NhY2hlYCBvciBgbWZjNl9jYWNoZWAgYWxsb2NhdGlvbnMgaGFwcGVuIHdpdGhpbiB0aGlzIGNhbGwgZmxvdywgb3IgcG90ZW50aWFsbHkgZWxzZXdoZXJlLiBMb2NhdGluZyB0aGVzZSBjYWNoZSBhbGxvY2F0aW9ucywgYWxvbmdzaWRlIHRoZSBtYWluIHRhYmxlIHN0cnVjdHVyZSwgc2hvdWxkIHByb3ZpZGUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZXNvdXJjZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9OTgxPXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy05OTMtLyogQWxsb2NhdGUgYSBtdWx0aWNhc3QgY2FjaGUgZW50cnkgKi9cbm5ldC9pcHY0L2lwbXIuYzo5OTQ6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZClcbm5ldC9pcHY0L2lwbXIuYy05OTUte1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMDA2LVxubmV0L2lwdjQvaXBtci5jOjEwMDc6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY0L2lwbXIuYy0xMDA4LXtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTE0Mj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4tLVxubmV0L2lwdjQvaXBtci5jLTExNjctXHRcdC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhbGxvd2FibGUgKi9cbm5ldC9pcHY0L2lwbXIuYzoxMTY4Olx0XHRjID0gaXBtcl9jYWNoZV9hbGxvY191bnJlcygpO1xubmV0L2lwdjQvaXBtci5jLTExNjktXHRcdGlmICghYykge1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMjQxPXN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTEyNzItXG5uZXQvaXB2NC9pcG1yLmM6MTI3MzpcdGMgPSBpcG1yX2NhY2hlX2FsbG9jKCk7XG5uZXQvaXB2NC9pcG1yLmMtMTI3NC1cdGlmICghYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXVsdGljYXN0IFJvdXRpbmcgTW9kdWxlIEVudHJ5cG9pbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2VybmVsJiMzOTtzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIG1hbmFnZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2UgY3JpdGljYWwgZW50cnkgcG9pbnRzLgoKSSYjMzk7dmUgc2NvcGVkIGluIG9uIHRoZSBJUHY0IChgbmV0L2lwdjQvaXBtci5jYCkgYW5kIElQdjYgKGBuZXQvaXB2Ni9pcDZtci5jYCkgbW9kdWxlcyBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgaG93IG11bHRpY2FzdCBmb3J3YXJkaW5nIGlzIGNvbnN0cnVjdGVkLiBJJiMzOTt2ZSBub3RlZCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lczogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AgZm9yIGNhY2hpbmcgYW5kIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0YWJsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb246IGBpcG1yX25ld190YWJsZWAsIGBpcDZtcl9uZXdfdGFibGVgLiBJIHNlZSBzb3VyY2Utc3BlY2lmaWMgbXVsdGljYXN0IGZ1bmN0aW9uczogYGlwbXJfbWZjX2FkZGAsIGBpcG1yX21mY19kZWxldGVgLCBgaXA2bXJfbWZjX2FkZGAsIGFuZCBgaXA2bXJfbWZjX2RlbGV0ZWAgdGhhdCBtYW5hZ2UgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuIEkgbmVlZCB0byB0cmFjZSB0aGUgYHNldHNvY2tvcHRgIGFuZCBuZXRsaW5rIGVudHJ5IHBvaW50cywgdGhvc2UgYXJlIHRoZSBsb2dpY2FsIG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk0Ny1cdGlmIChpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDg6XHRcdHJldHVybiBpcF9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDktXG4tLVxubmV0L2lwdjQvaXBtci5jPTEzNzg9c3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTE0MDktXG5uZXQvaXB2NC9pcG1yLmM6MTQxMDppbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwbXIuYy0xNDExLVx0XHRcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqNm1yIHNldHNvY2tvcHQgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYDZtciBzZXRzb2Nrb3B0YCBidXNpbmVzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyDigJMgaXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkmIzM5O3ZlIGRpcmVjdGx5IGRlYWx0IHdpdGggaXQsIGJ1dCB0aGUgY29uY2VwdCBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBlc3RhYmxpc2ggd2hhdCB1bmRlcmx5aW5nIHRlY2hub2xvZ3kgaXMgYmVpbmcgcmVmZXJlbmNlZCBoZXJlIC0gSSBhc3N1bWUgdGhpcyBpcyBJUHY2IE11bHRpY2FzdCBSb3V0ZXIgZnVuY3Rpb25hbGl0eSwgYnV0IEkgd2FudCB0byBjb25maXJtLiBHaXZlbiB0aGUgY29udGV4dCwgYHNldHNvY2tvcHRgIG9idmlvdXNseSBwbGF5cyBhIHJvbGUsIHNvIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHNvY2tldCBvcHRpb25zIGZvciBtdWx0aWNhc3Qgb3BlcmF0aW9uIGFuZCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcGVydGFpbmluZyB0byBJUHY2IGFuZCByb3V0aW5nLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHNvY2tldCBvcHRpb24gZmxhZ3MgcmVsYXRlZCB0byBtdWx0aWNhc3QgbWVtYmVyc2hpcCBhbmQgc291cmNlLXNwZWNpZmljIG11bHRpY2FzdC4gV2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHJlbGV2YW50PyBXaGF0IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBsaWtlbHkgaW4gcGxheT8gSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIHNwZWNpZmljIHNvY2tldCBvcHRpb25zIHdpdGhpbiBgc2V0c29ja29wdGAgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgbXVsdGljYXN0IHJvdXRlciBmdW5jdGlvbmFsaXR5LiBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIHRoZSBjb21tb24gZmFpbHVyZSBwb2ludHMsIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGlzc3VlIEkgaGF2ZSBleHBlcmllbmNlZCBkaXJlY3RseSwgb3Igb25lIHRoYXQgSSYjMzk7dmUgb25seSByZWFkIGFib3V0LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyB0aGUgbmV0d29yayBzdGFjayBiZWhhdmlvciBhbmQgcG9zc2libGUgaW1wbGVtZW50YXRpb24gcGVjdWxpYXJpdGllcy4gRG9lcyB0aGlzIHJlbGF0ZSB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIHJvdXRlciBmdW5jdGlvbmFsaXR5LCBzZXR0aW5nIHRoZSBUVEwsIG9yIGNvbnRyb2xsaW5nIHRoZSBpbnRlcmZhY2VzIHVzZWQgZm9yIG11bHRpY2FzdCB0cmFmZmljPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlIG9yIGRyaXZlciBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGBzZXRzb2Nrb3B0YCBjYWxscyBvbiB0aGUgcm91dGluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGlmIGl0IGltcGFjdHMgZm9yd2FyZGluZyBkZWNpc2lvbnMgb3IgdGhlIGNyZWF0aW9uL3JlbW92YWwgb2YgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cmllcy4KCkZpbmFsbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG5ldHdvcmsgc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZtci5jPTE3MDM9RVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNzExLVxubmV0L2lwdjYvaXA2bXIuYzoxNzEyOmludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY2L2lwNm1yLmMtMTcxMy1cdFx0XHQgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzk2LVx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjM5NzpcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgUm91dGluZyBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBJUCBtdWx0aWNhc3Qgcm91dGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBuZXRsaW5rIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBhZGRpbmcgb3IgbW9kaWZ5aW5nIG11bHRpY2FzdCByb3V0ZXMgYXJlIGxpa2VseSBnb2luZyB0byBiZSBpbiBlaXRoZXIgYGlwbXJfcnRtX3JvdXRlYCBvciBgaXBtcl9ydG1fbmV3cm91dGVgLiBPbmUgb2YgdGhvc2Ugc2hvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugcm91dGVzIGFyZSBjcmVhdGVkIGFuZCBtYW5hZ2VkIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSB0d28gYW5kIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfcnRtXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI2NzAtXG5uZXQvaXB2NC9pcG1yLmM6MjY3MTpzdGF0aWMgaW50IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBtci5jLTI2NzItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3MjUtXG5uZXQvaXB2NC9pcG1yLmM6MjcyNjpzdGF0aWMgaW50IGlwbXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2lwdjQvaXBtci5jLTI3MjctXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3MzctXG5uZXQvaXB2NC9pcG1yLmM6MjczODpcdGVyciA9IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShpbl9za2IsIG5saCwgdGIsIGV4dGFjayk7XG5uZXQvaXB2NC9pcG1yLmMtMjczOS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBtci5jLTI3ODMtXG5uZXQvaXB2NC9pcG1yLmM6Mjc4NDpzdGF0aWMgaW50IGlwbXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvaXB2NC9pcG1yLmMtMjc4NS17XG4tLVxubmV0L2lwdjQvaXBtci5jPTI4Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcG1yX3BvbGljeVtSVEFfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yODM0LVxubmV0L2lwdjQvaXBtci5jOjI4MzU6c3RhdGljIGJvb2wgaXBtcl9ydG1fdmFsaWRhdGVfcHJvdG8odW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2wpXG5uZXQvaXB2NC9pcG1yLmMtMjgzNi17XG4tLVxubmV0L2lwdjQvaXBtci5jPTI4NjE9c3RhdGljIGludCBydG1fdG9faXBtcl9tZmNjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI4ODItXHQgICAgcnRtLVx1MDAzZXJ0bV9zY29wZSAhPSBSVF9TQ09QRV9VTklWRVJTRSB8fFxubmV0L2lwdjQvaXBtci5jOjI4ODM6XHQgICAgIWlwbXJfcnRtX3ZhbGlkYXRlX3Byb3RvKHJ0bS1cdTAwM2VydG1fcHJvdG9jb2wpKVxubmV0L2lwdjQvaXBtci5jLTI4ODQtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0yOTQyLS8qIHRha2VzIGNhcmUgb2YgYm90aCBuZXdyb3V0ZSBhbmQgZGVscm91dGUgKi9cbm5ldC9pcHY0L2lwbXIuYzoyOTQzOnN0YXRpYyBpbnQgaXBtcl9ydG1fcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9pcG1yLmMtMjk0NC1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzAyND1zdGF0aWMgaW50IGlwbXJfdmFsaWRfZHVtcGxpbmsoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTMwNDgtXG5uZXQvaXB2NC9pcG1yLmM6MzA0OTpzdGF0aWMgaW50IGlwbXJfcnRtX2R1bXBsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L2lwbXIuYy0zMDUwLXtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MzM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgaXBtcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2lwdjQvaXBtci5jLTMzNjQtXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcbm5ldC9pcHY0L2lwbXIuYzozMzY1Olx0IC5kdW1waXQgPSBpcG1yX3J0bV9kdW1wbGluaywgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2lwdjQvaXBtci5jLTMzNjYtXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fTkVXUk9VVEUsXG5uZXQvaXB2NC9pcG1yLmM6MzM2NzpcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXG5uZXQvaXB2NC9pcG1yLmMtMzM2OC1cdHsucHJvdG9jb2wgPSBSVE5MX0ZBTUlMWV9JUE1SLCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcbm5ldC9pcHY0L2lwbXIuYzozMzY5Olx0IC5kb2l0ID0gaXBtcl9ydG1fcm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY0L2lwbXIuYy0zMzcwLVx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxubmV0L2lwdjQvaXBtci5jOjMzNzE6XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbm5ldC9pcHY0L2lwbXIuYy0zMzcyLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjczMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNdWx0aWNhc3QgUm91dGluZyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiBpbiBgaXBtcl9iYXNlLmNgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgYXJlYXMuIE15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZXhhbWluZSBpbmNsdWRlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGAsIGBpcG1yX3J0bV9yb3V0ZWAsIGFuZCBgaXA2bXJfcnRtX3JvdXRlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpcDZtcl9ydG1fcm91dGVgIGFjdHVhbGx5IGV4aXN0cyB3aXRoaW4gdGhlIHN5c3RlbSBiZWZvcmUgYXNzdW1pbmcgYW55IGZ1cnRoZXIgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZtcl9ydG1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcbm5ldC9pcHY2L2lwNm1yLmM6OTk6c3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTE0MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNm1yX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3Rfb3JfbW9kdWxlID0ge1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQyMS1cdCAubXNndHlwZSA9IFJUTV9HRVRST1VURSxcbm5ldC9pcHY2L2lwNm1yLmM6MTQyMjpcdCAuZG9pdCA9IGlwNm1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwNm1yX3J0bV9kdW1wcm91dGUsXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjMtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0yNjk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcDZtcl9nZXRyb3V0ZV9wb2xpY3lbUlRBX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDAtXG5uZXQvaXB2Ni9pcDZtci5jOjI3MDE6c3RhdGljIGludCBpcDZtcl9ydG1fdmFsaWRfZ2V0cm91dGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjczMi1cbm5ldC9pcHY2L2lwNm1yLmM6MjczMzpzdGF0aWMgaW50IGlwNm1yX3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L2lwNm1yLmMtMjczNC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzQ0LVxubmV0L2lwdjYvaXA2bXIuYzoyNzQ1Olx0ZXJyID0gaXA2bXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShpbl9za2IsIG5saCwgdGIsIGV4dGFjayk7XG5uZXQvaXB2Ni9pcDZtci5jLTI3NDYtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjc4OS1cbm5ldC9pcHY2L2lwNm1yLmM6Mjc5MDpzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjYvaXA2bXIuYy0yNzkxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGhhcmQgbG9vayBhdCB0aGUgYGlwbXJfbmV3X3RhYmxlYCBhbmQgYGlwNm1yX25ld190YWJsZWAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50cyBmb3IgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZy4gSSB3YW50IHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMgY29ycmVjdGx5LCBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSwgYW5kIGhhbmRsaW5nIGFueSBuZWNlc3NhcnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBpbml0aWFsaXppbmcgYWxsIHRoZSByZXF1aXJlZCBtZW1iZXJzIGNvcnJlY3RseSwgaW5jbHVkaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGFueSBpbml0aWFsIHN0YXRlIGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBmb3VuZGF0aW9uYWwgZm9yIGFuYWx5emluZyBob3cgbXVsdGljYXN0IHJvdXRpbmcgaGFuZGxlcyB0aGUgY3JlYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgZm9yd2FyZGluZyBzdGF0ZS4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgZGVmYXVsdCBiZWhhdmlvcnMgZWFybHkgb24uIExldCYjMzk7cyBzZWUgaWYgdGhlIHRhYmxlIGNyZWF0aW9uIHByb2Nlc3NlcyBoYW5kbGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZXJyb3IgcmVwb3J0aW5nIHJvYnVzdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcFs2XT9tcl9uZXdfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXG5uZXQvaXB2NC9pcG1yLmM6MTA0OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDUtc3RhdGljIHZvaWQgaXBtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yNDI9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTI1NC1cbm5ldC9pcHY0L2lwbXIuYzoyNTU6XHRtcnQgPSBpcG1yX25ld190YWJsZShuZXQsIFJUX1RBQkxFX0RFRkFVTFQpO1xubmV0L2lwdjQvaXBtci5jLTI1Ni1cdGlmIChJU19FUlIobXJ0KSkge1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzU9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTMzOC1cbm5ldC9pcHY0L2lwbXIuYzozMzk6XHRtcnQgPSBpcG1yX25ld190YWJsZShuZXQsIFJUX1RBQkxFX0RFRkFVTFQpO1xubmV0L2lwdjQvaXBtci5jLTM0MC1cdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Mzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgaXBtcl9yaHRfcGFyYW1zID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy00MDctXG5uZXQvaXB2NC9pcG1yLmM6NDA4OnN0YXRpYyB2b2lkIGlwbXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy00MDktXHRcdFx0ICAgICAgIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9NDIxPXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGVfb3BzIGlwbXJfbXJfdGFibGVfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwbXIuYy00MjUtXG5uZXQvaXB2NC9pcG1yLmM6NDI2OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxubmV0L2lwdjQvaXBtci5jLTQyNy17XG4tLVxubmV0L2lwdjQvaXBtci5jLTQzOC1cdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcG1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY0L2lwbXIuYzo0Mzk6XHRcdFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXBtcl9uZXdfdGFibGVfc2V0KTtcbm5ldC9pcHY0L2lwbXIuYy00NDAtfVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTk0LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvaXBtci5jOjE1OTU6XHRcdFx0bXJ0ID0gaXBtcl9uZXdfdGFibGUobmV0LCB1dmFsKTtcbm5ldC9pcHY0L2lwbXIuYy0xNTk2LVx0XHRcdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xubmV0L2lwdjYvaXA2bXIuYy04Ni1cbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY2L2lwNm1yLmMtODgtc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTIyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNDEtXG5uZXQvaXB2Ni9pcDZtci5jOjI0MjpcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjQzLVx0aWYgKElTX0VSUihtcnQpKSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0zMjM9c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzI2LVxubmV0L2lwdjYvaXA2bXIuYzozMjc6XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XG5uZXQvaXB2Ni9pcDZtci5jLTMyOC1cdGlmIChJU19FUlIobXJ0KSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGlwNm1yX3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zODktXG5uZXQvaXB2Ni9pcDZtci5jOjM5MDpzdGF0aWMgdm9pZCBpcDZtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjYvaXA2bXIuYy0zOTEtXHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz00MDM9c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXA2bXJfbXJfdGFibGVfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDA3LVxubmV0L2lwdjYvaXA2bXIuYzo0MDg6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDE2LVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmM6NDE3Olx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xubmV0L2lwdjYvaXA2bXIuYy00MTgtfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTcxMj1pbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xODcyLVx0XHRyZXQgPSAwO1xubmV0L2lwdjYvaXA2bXIuYzoxODczOlx0XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB2KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTg3NC1cdFx0aWYgKElTX0VSUihtcnQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGFuZCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGBJUF9NUk9VVEVfQ09NTU9OYC4gVGhhdCBsYXN0IG9uZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSB0aGUgb3RoZXJzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKTm93LCBhIGNydWNpYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUgaXMgdGhlIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgIGlzIGVuYWJsZWQsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCBkcml2ZXMgdGhlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5UIGZsYWdzIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCBkYXRhLiBJIHJlYWxseSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgTUVNQ0dgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIG1lbWNnIGFjY291bnRpbmcgdG8gd29yaywgb3Igd2UgYXJlIHdhc3RpbmcgcmVzb3VyY2VzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGZvciBgTUVNQ0dgLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSB0aGF0IGBJUF9NVUxUSUNBU1RgIGlzIGVuYWJsZWQsIHNpbmNlIGBJUF9NUk9VVEVgIGRlcGVuZHMgb24gaXQsIGFuZCBgSVBWNmAgZm9yIGBJUFY2X01ST1VURWAuIEdvdHRhIGNvdmVyIGFsbCBteSBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyODEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE11bHRpY2FzdCBSb3V0aW5nIENvZGUgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGBNRU1DR2AsIGBJUF9NVUxUSUNBU1RgLCBhbmQgYElQVjZgLiBHb29kLCB0aGV5JiMzOTtyZSBhbGwgdGhlcmUuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgdGFibGUgYWxsb2NhdGlvbiwgY2FjaGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBvcHRpb25zLiBJIHdlbnQgdGhyb3VnaCB0aGUgbGlzdDogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcF9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBtcl9uZXdfdGFibGVgLCBgaXA2bXJfbmV3X3RhYmxlYC4gSSBjaGVja2VkIHRoZWlyIHN0YXRpYy9leHBvcnRlZCBzdGF0dXMuIGBpcG1yX2NhY2hlX2FsbG9jYCBhbmQgYGlwNm1yX2NhY2hlX2FsbG9jYCwgd2hpbGUgc3RhdGljLCBhcmUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmsgZmlsZXMsIG1lYW5pbmcgdGhleSBhcmUgdmVyeSByZWxldmFudC4gYG1yX3RhYmxlX2FsbG9jYCwgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX3J0bV9yb3V0ZWAsIGBpcG1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZ2V0cm91dGVgIGFyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZCwgbWVhbmluZyB0aGV5IGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCwgYGlwbXJfbWZjX2FkZGAsIGBpcDZtcl9tZmNfYWRkYCBhcmUgc3RhdGljIGJ1dCBjcml0aWNhbC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgYXJlYSBmb2N1c2VzIG9uIElQIG11bHRpY2FzdCByb3V0aW5nIGFuZCB0aGUgdGFibGUvY2FjaGUgbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcy4KCkFscmlnaHQsIGEgZmluYWwgZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyBncmVhdCwgbWVhbmluZyB0aGlzIGlzIHJlYWNoYWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgd2UmIzM5O3JlIHNlZWluZyBhZGRpdGlvbnMgb2YgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHRvIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBtYXRjaGVzIHdoYXQgSSBhbHJlYWR5IGNvbmZpcm1lZCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgSSBleGFtaW5lZC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGlzIGhpZ2gtdmFsdWUgY29kZSB0byBmb2N1cyBvbiwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgZGVhbGluZyB3aXRoIG11bHRpY2FzdCByb3V0aW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIHRoZSBhY2NvdW50aW5nIGZsYWdzIGFkZCBhZGRpdGlvbmFsIGludGVyZXN0LiBMZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcDZtcl9uZXdfdGFibGUmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXBtcl9ydG1fcm91dGUmIzM0OywKICAgICYjMzQ7aXBtcl9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcDZtcl9jYWNoZV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMgKG1yX3RhYmxlIGFsbG9jYXRpb24gYW5kIG1mYy9tZmM2IGttZW1fY2FjaGVzKSB0byB1c2UgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFuZCBTTEFCX0FDQ09VTlQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHN1YmplY3QgdG8gbWVtY2cgbGltaXRzIGFuZCBmYWlsdXJlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbmV3X3RhYmxlJiMzNDssCiAgICAmIzM0O2lwNm1yX25ld190YWJsZSYjMzQ7LAogICAgJiMzNDtpcG1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXA2bXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcG1yX3J0bV9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwNm1yX2NhY2hlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgc2xhYiBjYWNoZXMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSkgYW5kIHRoZSBtcl90YWJsZSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4gTm8gY2hhbmdlcyBhcmUgbWFkZSB0byBob3cgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhbmQgbXJfdGFibGUgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqICh6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgZXhwb3Nlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU3NDBmYmI3NDEzZTk4Mjk3NWZjNjVkZDI1ZTc5NzJkNDlhYjZjN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDExOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTMzNzYsNyAmIzQzOzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLAomIzQzOwkJCQlTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTsKIAogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcG1yX25ldF9vcHMpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCwKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlpbnQgZXJyOwogCi0JbXJ0ID0ga3phbGxvY19vYmooKm1ydCk7CiYjNDM7CW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTsKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyByZWxhdGVkIHRvIElQIG11bHRpY2FzdCByb3V0aW5nLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYCwgYW5kIHRoZSBhbGxvY2F0aW9uIG9mIGEgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYG1ydGAgaW4gYG5ldC9pcHY0L2lwbXJfYmFzZS5jYC4KClNwZWNpZmljYWxseToKCiogICBJbiBgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgLCB0aGV5JiMzOTt2ZSBhZGRlZCB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyB0byBga21lbV9jYWNoZWAgY2FsbHMuICBUaGlzIGlzIGludGVyZXN0aW5nLiAgYFNMQUJfQUNDT1VOVGAgbWVhbnMgdGhpcyBjYWNoZSBpcyBub3cgYWNjb3VudGVkIGZvciBpbiBtZW1vcnkgYWNjb3VudGluZywgd2hpY2gsIGluIGl0c2VsZiwgZG9lc24mIzM5O3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB0aGUgY2hhbmdlIG1lYW5zIHRoZSBhbGxvY2F0aW9ucyBjYW4gbm93IGJlIG1vbml0b3JlZC4KKiAgIEluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AgdGhleSYjMzk7cmUgdXNpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgbm93LiAgVGhpcyBpcyBhIG5vdGV3b3J0aHkgY2hhbmdlLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIEtNU0FOIG9wcG9ydHVuaXR5LiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5JiMzOTtyZSBzdGlsbCB1c2luZyBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyBhIHplcm9lZCBhbGxvY2F0aW9uLgoKSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgeWVzLCBiZWNhdXNlIGl0IHNlZW1zIHRoZSB0ZWFtIGlzIGFscmVhZHkgYXdhcmUgdGhhdCB0aGlzIGFyZWEgY291bGQgY2F1c2UgaXNzdWVzLiBIb3dldmVyLCBnaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGlzIGRpZmYgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IGV2ZW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRob3NlIG1lbW9yeSBhY2NvdW50aW5nIGNoYW5nZXMgKm1lYW4qIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBrbm93biBpc3N1ZT8gQXJlIHRoZXkgYXR0ZW1wdGluZyB0byBhZGRyZXNzIGEgcmVjZW50IEtNU0FOIGZpbmRpbmc/IEkgbmVlZCB0byBrbm93IGZvciBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IEtNU0FOIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmM9NDY9bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYzo1NTpcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cdGlmICghbXJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBga3phbGxvY19vYmpgIERlZmluaXRpb24qKgoKT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGt6YWxsb2Nfb2JqYC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hhdCBpdCBkb2VzLCBidXQgSSYjMzk7dmUgYmVlbiBidXJuZWQgYmVmb3JlIGJ5IGFzc3VtcHRpb25zLCBhbmQgc3VidGxlIGRldGFpbHMgY2FuIGJlIGNydWNpYWwgaW4ga2VybmVsIGRldmVsb3BtZW50LiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gSSYjMzk7bSBvbiB0aGUgc2FtZSBwYWdlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgZGVmaW5pdGlvbnMsIGVzcGVjaWFsbHkgaW4gbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBHb3R0YSBlbGltaW5hdGUgYW55IHJpc2sgb2YgbWlzaW50ZXJwcmV0aW5nIGhvdyB0aGF0IGFsbG9jYXRpb24gaXMgaGFuZGxlZCBhbmQgd2hhdCBpdHMgZ3VhcmFudGVlcyBhcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGlmIGl0JiMzOTtzIHVzZWQgaW4gYSBoaWdobHkgY29uY3VycmVudCBlbnZpcm9ubWVudC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSDigJMgbGV0JiMzOTtzIHZlcmlmeSB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU1OiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1Ni1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5MgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTXVsdGljYXN0IFJvdXRpbmcgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYWRkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgLCBmb3IgYWxsb2NhdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMsIGJvdGggSVB2NCBhbmQgSVB2Ni4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYG1ydF9jYWNoZXBgLCBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYHN0cnVjdCBtcl90YWJsZWAgYWxsb2NhdGlvbnMuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIGl0LCBhbmQgdGhlIGFuc3dlciBpcyBuby4gV2UmIzM5O3JlIG5vdCBjcmVhdGluZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnM7IHRoZSBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGBpcG1yX2Jhc2UuY2AsIHN0aWxsIHVzZSB6ZXJvLWluaXRpYWxpemF0aW9uIChga3phbGxvY19vYmpgKSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBBbHNvLCB0aGVzZSBmbGFncyAoYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgKSBhcmUgc3RyaWN0bHkgZm9yIGNncm91cCBtZW1vcnkgYWNjb3VudGluZy4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgY29kZSBwYXRocyB0aGF0IGludm9sdmUgYGNvcHlfdG9fdXNlcmAsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHBhZGRpbmcgbGVha3MsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIGluIHBsYWNlIGZvciBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGFuZCB3aGlsZSBLTVNBTiAqY291bGQqIGJlIHJlbGV2YW50IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYWRkaW5nIGFjY291bnRpbmcgZmxhZ3MgYWxvbmUgZG9lc24mIzM5O3QgdHJpZ2dlciBhIG5lZWQgZm9yIGl0LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIHdlIGhhdmUgemVybyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGFkZGluZyBtZW1jZyBhY2NvdW50aW5nIGZsYWdzIHRvIHNsYWIgY2FjaGVzIGFuZCBhbGxvY2F0aW9ucy4gV2UmIzM5O3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IG1lbW9yeSByZWFkcywgY29weWluZyBzdHJ1Y3RzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGV4cG9zdXJlcy4gVGhlIGFsbG9jYXRpb24gaW4gYGlwbXJfYmFzZS5jYCBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCBnZW5lcmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgc2xhYiBjYWNoZXMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSkgYW5kIHRoZSBtcl90YWJsZSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi4gTm8gY2hhbmdlcyBhcmUgbWFkZSB0byBob3cgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhbmQgbXJfdGFibGUgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqICh6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgZXhwb3Nlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjM4NzY3OTg3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzg3ODI2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9uZXdfdGFibGVcIixcbiAgICBcImlwNm1yX25ld190YWJsZVwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCIsXG4gICAgXCJpcG1yX3J0bV9yb3V0ZVwiLFxuICAgIFwiaXBtcl9jYWNoZV9hbGxvY1wiLFxuICAgIFwiaXA2bXJfY2FjaGVfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjM4NzY4NTA4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NzE2NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDExOjI3OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xcbitcXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXFxuK1xcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbiBcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBtcl9uZXRfb3BzKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xcbitcXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdG1ydC1cXHUwMDNlaWQgPSBpZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG4rXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFtcnRfY2FjaGVwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjEzLjgwNDAxNjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjgyMjExOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiSVBfTVVMVElDQVNUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXJfdGFibGVfYWxsb2NcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfbmV3X3RhYmxlXCIsXG4gICAgXCJpcDZtcl9uZXdfdGFibGVcIixcbiAgICBcImlwbXJfbWZjX2FkZFwiLFxuICAgIFwiaXA2bXJfbWZjX2FkZFwiLFxuICAgIFwiaXBtcl9ydG1fcm91dGVcIixcbiAgICBcImlwbXJfY2FjaGVfYWxsb2NcIixcbiAgICBcImlwNm1yX2NhY2hlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFsbG9jYXRpb25zIChtcl90YWJsZSBhbGxvY2F0aW9uIGFuZCBtZmMvbWZjNiBrbWVtX2NhY2hlcykgdG8gdXNlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5ULiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBzdWJqZWN0IHRvIG1lbWNnIGxpbWl0cyBhbmQgZmFpbHVyZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbisrKyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuK1x0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwbXJfbmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuKysrIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCk7XG4rXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0X2NhY2hlcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzoxMy44MDQwMTgwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMTM5NTk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBNdWx0aWNhc3QgUm91dGluZyBDaGFuZ2VzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmcsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcyBjaGFuZ2VkOiBgbmV0L2lwdjQvaXBtci5jYCwgYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZtci5jYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcsIGFuZCB0aGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY2FjaGluZy5cblxuT2theSwgaW4gYGlwbXIuY2AsIHRoZXkndmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGBLTUVNX0NBQ0hFYCBmbGFncyB3aGVuIGluaXRpYWxpemluZyBgbXJ0X2NhY2hlcGAgZm9yIHRoZSBJUHY0IG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlLiBUaGF0IHN1Z2dlc3RzIHRoZXkgd2FudCB0byB0cmFjayB0aGUgbWVtb3J5IHVzYWdlIG9mIHRoYXQgY2FjaGUgc3BlY2lmaWNhbGx5LiBJbnRlcmVzdGluZy5cblxuVGhlbiwgaW4gYGlwbXJfYmFzZS5jYCwgdGhlIGBremFsbG9jX29iamAgY2FsbCBmb3IgYWxsb2NhdGluZyBgbXJfdGFibGVgIHN0cnVjdHVyZXMgbm93IGluY2x1ZGVzIGBHRlBfS0VSTkVMX0FDQ09VTlRgLiBBbm90aGVyIG1lbW9yeSBhY2NvdW50aW5nIGNoYW5nZSDigJMgdGhpcyB0aW1lLCBmb3IgdGhlIHRhYmxlIGl0c2VsZi4gVGhleSBhcmUgcHJvYmFibHkgdHJ5aW5nIHRvIG1lYXN1cmUgdGhlIG1lbW9yeSB1c2FnZSBvZiB0aGUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzLCBhbmQgdGhlIGNhY2hlcyBmb3IgSVB2NC5cblxuRmluYWxseSwgaW4gYGlwNm1yLmNgLCB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpcyBhZGRlZCB0byB0aGUgYEtNRU1fQ0FDSEVgIGNhbGwgZm9yIGBtcnRfY2FjaGVwYCBmb3IgSVB2NiBtdWx0aWNhc3QuIFNvLCBzaW1pbGFyIHRvIHRoZSBJUHY0IHNpZGUsIHRoZXkgYXJlIG5vdyB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugb2YgdGhlIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUsIGp1c3QgbGlrZSBpbiBJUHY0LlxuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBwb3NzaWJseSBkZWJ1Z2dpbmcgbWVtb3J5IHVzYWdlIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0IHJvdXRpbmcgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSBmb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyBvciBtZW1vcnkgYmxvYXQgaW4gdGhlc2UgYXJlYXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGdpdCBjb250ZXh0IHRvIHNlZSBpZiB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgYnVnIHJlcG9ydCBvciByYXRpb25hbGUgZm9yIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgZ3JlcHBlci9yZWFkLWZpbGUgdG9vbHMgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MTguODE3OTc5ODE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MTguODY2MjAzODYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MjY1OTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBIZXJlJ3MgaG93IEknbSBhcHByb2FjaGluZyB0aGlzIGNvZGUgYW5hbHlzaXM6XG5cbioqTXkgQ29kZSBBbmFseXNpcyBTdHJhdGVneSoqXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyBJcyBpdCBwYXJ0IG9mIGFuIGFjdGl2ZSBwYXRoLCBvciBpcyBpdCBkZWFkIHdlaWdodD8gTmV4dCwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBjb2RlJ3MgaW5jbHVzaW9uIGFuZCBleGVjdXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gYW55IGRlZXBlciBkaXZlLiBBZnRlciB0aGF0LCBhIGNydWNpYWwganVkZ21lbnQgY2FsbDogaXMgdGhpcyBjb2RlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/IFdpbGwgaXQgb2ZmZXIgYSB2YWx1YWJsZSBhdHRhY2sgc3VyZmFjZT8gRmluYWxseSwgSSBzaG91bGQgaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIGFyZSBtb3N0IGltcG9ydGFudC4gXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGZvbGxvd2luZyBmaWxlczogYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlaXIgY29ycmVzcG9uZGluZyBLY29uZmlncyB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9ucyBpbiB0aGUgZmlyc3QgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjIxLjk1ODg2NTI5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoaXBtcnxpcDZtcnxpcG1yX2Jhc2UpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MjIuMDA1NTQ2MDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODIyODc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIElQdjYgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLlwiIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gc29tZSBhcmVhcywgYnV0IEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZyB3ZSBjb3VsZCBiZSBtaXNzaW5nIHNvbWV0aGluZyB1cHN0cmVhbS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFzIHdlbGwuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIGluIHRoZXJlIHdlIGhhdmVuJ3QgY29uc2lkZXJlZCwgb3IgcGVyaGFwcyBzb21lIHJlbGF0aW9uc2hpcHMgd2UgaGF2ZW4ndCBmdWxseSBncmFzcGVkLiBHb3R0YSBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGxldmVsIG9mIGNvbXBsZXhpdHkuIFRpbWUgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI3LjQ4Mzc3NzI3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZtclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI3LjUyOTgzNDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0MzE4MjM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqRXhhbWluaW5nIEtjb25maWcgZm9yIE11bHRpY2FzdCBSb3V0aW5nIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZy4gRmlyc3QsIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYElQX01ST1VURWAgYW5kIGBJUFY2X01ST1VURWAuIFRoZXNlIGFyZSB0aGUga2V5IGRlZmluZXMgZm9yIGVuYWJsaW5nIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHksIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIHdoZXJlIHRoZXkncmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXkgc2V0IGFzIGRlZmF1bHRzPyBBcmUgdGhleSBoaWRkZW4gYmVoaW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCBhbmQgdGhlbiBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgZm9yIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBteSB3b3JrIHdpdGggdGhpcyBzcGVjaWZpYyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzoyOS4zNzMwMTkzNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjYwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUC4qTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjI5LjQ0MTY4NTQzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1NzIyODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBkZWZpbml0aW9ucywgYW5kIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJICpyZWFsbHkqIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gdGhpbmtpbmcsIFwiRG9uJ3QganVzdCB0YWtlIHRoaXMgYXQgZmFjZSB2YWx1ZS5cIiBMZXQncyBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyDigJMgKnRoYXQncyogd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4gSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgKmV4YWN0bHkqIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaGluZ2Ugb24gdGhlc2UsIHdoYXQgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxheSwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlIG1pZ2h0IGJlLiBJdCdzIGFib3V0IGJlaW5nIHRob3JvdWdoLCBlbnN1cmluZyBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMuIEEgcXVpY2sgc2NhbiB3b24ndCBkbzsgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozMS40NTc0MTE3MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIElQX01ST1VURV9DT01NT05cXG4gMjE3OlxcdFxcdGJvb2xcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxuIDIxOTpcXHRcXG4gMjIwOlxcdGNvbmZpZyBJUF9NUk9VVEVcXG4gMjIxOlxcdFxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4gMjIyOlxcdFxcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXFxuIDIyMzpcXHRcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbiAyMjQ6XFx0XFx0aGVscFxcbiAyMjU6XFx0XFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcXG4gMjI2OlxcdFxcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcXG4gMjI3OlxcdFxcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcXG4gMjI4OlxcdFxcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XFxuIDIyOTpcXHRcXHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJ3QgaGVhcmQgYWJvdXQgaXQsIHlvdVxcbiAyMzA6XFx0XFx0ICBkb24ndCBuZWVkIGl0LlxcbiAyMzE6XFx0XFxuIDIzMjpcXHRjb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbiAyMzM6XFx0XFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFxcdTAwMjZcXHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAyMzU6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAyMzY6XFx0XFx0aGVscFxcbiAyMzc6XFx0XFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXFxuIDIzODpcXHRcXHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcXG4gMjM5OlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcXG4gMjQwOlxcdFxcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xcbiAyNDE6XFx0XFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXFxuIDI0MjpcXHRcXHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDU6XFx0XFxuIDI0NjpcXHRjb25maWcgSVBfUElNU01fVjFcXG4gMjQ3OlxcdFxcdGJvb2wgXFxcIklQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcXFwiXFxuIDI0ODpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbiAyNDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozMS40NTc1MjIxMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMDk5NzMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYG5ldC9pcHY2L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYElQVjZfTVJPVVRFYCBvcHRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBtdWx0aWNhc3Qgcm91dGluZyB3aXRoIElQdjYuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB1cCBhcyBJIHdvdWxkIGV4cGVjdCBpdCB0byBiZSwgYW5kIEkgbmVlZCB0byByZWNhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MzQuMzc4NTI5MDMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdCAgbm9ybWFsIGFuZCBzb3VyY2UgcHJlZml4IHNwZWNpZmljIHJvdXRlcyBpbiB0aGUgc2FtZSByb3V0aW5nIHRhYmxlXFxuIDI1MTpcXHRcXHQgIG1heSBzb21ldGltZXMgbGVhZCB0byB1bmludGVuZGVkIHJvdXRpbmcgYmVoYXZpb3IuICBUaGlzIGNhbiBiZVxcbiAyNTI6XFx0XFx0ICBhdm9pZGVkIGJ5IGRlZmluaW5nIGRpZmZlcmVudCByb3V0aW5nIHRhYmxlcyBmb3IgdGhlIG5vcm1hbCBhbmRcXG4gMjUzOlxcdFxcdCAgc291cmNlIHByZWZpeCBzcGVjaWZpYyByb3V0ZXMuXFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjU2OlxcdFxcbiAyNTc6XFx0Y29uZmlnIElQVjZfTVJPVVRFXFxuIDI1ODpcXHRcXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4gMjU5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyNjA6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjYxOlxcdFxcdGhlbHBcXG4gMjYyOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2NiBtdWx0aWNhc3QgZm9yd2FyZGluZy5cXG4gMjYzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjY0OlxcdFxcbiAyNjU6XFx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbiAyNjY6XFx0XFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbiAyNjc6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyNjg6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAyNjk6XFx0XFx0aGVscFxcbiAyNzA6XFx0XFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXFxuIDI3MTpcXHRcXHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcXG4gMjcyOlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG11bHRpY2FzdCByb3V0ZXJcXG4gMjczOlxcdFxcdCAgd2lsbCBhbHNvIGJlIGFibGUgdG8gdGFrZSBpbnRlcmZhY2VzIGFuZCBwYWNrZXQgbWFya3MgaW50b1xcbiAyNzQ6XFx0XFx0ICBhY2NvdW50IGFuZCBydW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJzcGFjZSBkYWVtb25zXFxuIDI3NTpcXHRcXHQgIHNpbXVsdGFuZW91c2x5LCBlYWNoIG9uZSBoYW5kbGluZyBhIHNpbmdsZSB0YWJsZS5cXG4gMjc2OlxcdFxcbiAyNzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNzg6XFx0XFxuIDI3OTpcXHRjb25maWcgSVBWNl9QSU1TTV9WMlxcbiAyODA6XFx0XFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbiAyODE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbiAyODI6XFx0XFx0aGVscFxcbiAyODM6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IFBJTSBtdWx0aWNhc3Qgcm91dGluZyBwcm90b2NvbCBQSU0tU012Mi5cXG4gMjg0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6MzQuMzc4NjE4NjAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Njk2NDA3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgQ29tbWl0KipcblxuQWxyaWdodCwgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgbGV0J3MgcmVhbGx5IGRpc3NlY3QgdGhpcyBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlICp3aGF0Ki4gTXkgZmlyc3Qgc3RvcCBpcywgbmF0dXJhbGx5LCB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUganVzdGlmaWNhdGlvbiBhbmQgYSBjb25jaXNlIG92ZXJ2aWV3LiBCdXQgSSdtIG5vdCBzdG9wcGluZyB0aGVyZTsgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGZ1bGwgY29tbWl0IGluZm8g4oCTIHRoZSBkaWZmcywgdGhlIGNvbnRleHQsIG1heWJlIHJlbGF0ZWQgaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHMuIEknbSBsb29raW5nIGZvciB0aGUgZnVsbCBuYXJyYXRpdmUgaGVyZS4gSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGFzc2VzcyBub3QganVzdCBpZiB0aGUgY2hhbmdlICp3b3JrcyosIGJ1dCBpZiBpdCdzIHRoZSByaWdodCBhcHByb2FjaCwgaWYgaXQgYWRkcmVzc2VzIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gZWZmZWN0aXZlbHksIGFuZCBpZiBpdCBhbGlnbnMgd2l0aCB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyYWwgZ29hbHMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBvciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCB0aGF0IHRoZSBjb21taXQgbWlnaHQgYnJpbmcgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjM2Ljk0ODI2MTg1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNzA6XFx0XFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbjMzNzE6XFx0XFx0IC5kb2l0ID0gaXBtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcG1yX3J0bV9kdW1wcm91dGUsXFxuMzM3MjpcXHRcXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuMzM3MzpcXHR9O1xcbjMzNzQ6XFx0XFxuMzM3NTpcXHRpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4zMzc2OlxcdHtcXG4zMzc3OlxcdFxcdGludCBlcnI7XFxuMzM3ODpcXHRcXG4zMzc5OlxcdFxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcXG4zMzgwOlxcdFxcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbjMzODE6XFx0XFxuMzM4MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcG1yX25ldF9vcHMpO1xcbjMzODM6XFx0XFx0aWYgKGVycilcXG4zMzg0OlxcdFxcdFxcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmlwX21yX25vdGlmaWVyKTtcXG4zMzg3OlxcdFxcdGlmIChlcnIpXFxuMzM4ODpcXHRcXHRcXHRnb3RvIHJlZ19ub3RpZl9mYWlsO1xcbjMzODk6XFx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxcbjMzOTA6XFx0XFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFxcdTAwMjZwaW1fcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcXHUwMDNjIDApIHtcXG4zMzkxOlxcdFxcdFxcdHByX2VycihcXFwiJXM6IGNhbid0IGFkZCBQSU0gcHJvdG9jb2xcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4zMzkyOlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMzM5MzpcXHRcXHRcXHRnb3RvIGFkZF9wcm90b19mYWlsO1xcbjMzOTQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozNi45NDg0NTI5ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1NTA1ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgaXA2bXIuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgc28gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L2lwNm1yLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGxpbmVzIGFyb3VuZCAxNDI3LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGEgY3JpdGljYWwgbG9vcCBvciBjb25kaXRpb25hbCBtaWdodCByZXNpZGUgd2l0aGluIHRoYXQgc291cmNlIGZpbGUsIHNvIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcXVpY2tseSBicmluZyB0byBtaW5kIHdoYXQgYXNwZWN0IG9mIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBzdGFjayBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgd2hlcmUgSSBsZWZ0IG9mZi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjM5LjEwMzUxMzI5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNm1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHR7Lm93bmVyID0gVEhJU19NT0RVTEUsIC5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQNk1SLFxcbjE0MjE6XFx0XFx0IC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbjE0MjI6XFx0XFx0IC5kb2l0ID0gaXA2bXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXA2bXJfcnRtX2R1bXByb3V0ZSxcXG4xNDIzOlxcdFxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG4xNDI0OlxcdH07XFxuMTQyNTpcXHRcXG4xNDI2OlxcdGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4xNDI3OlxcdHtcXG4xNDI4OlxcdFxcdGludCBlcnI7XFxuMTQyOTpcXHRcXG4xNDMwOlxcdFxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XFxuMTQzMTpcXHRcXHRpZiAoIW1ydF9jYWNoZXApXFxuMTQzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXA2bXJfbmV0X29wcyk7XFxuMTQzNTpcXHRcXHRpZiAoZXJyKVxcbjE0MzY6XFx0XFx0XFx0Z290byByZWdfcGVybmV0X2ZhaWw7XFxuMTQzNzpcXHRcXG4xNDM4OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2aXA2X21yX25vdGlmaWVyKTtcXG4xNDM5OlxcdFxcdGlmIChlcnIpXFxuMTQ0MDpcXHRcXHRcXHRnb3RvIHJlZ19ub3RpZl9mYWlsO1xcbjE0NDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyXFxuMTQ0MjpcXHRcXHRpZiAoaW5ldDZfYWRkX3Byb3RvY29sKFxcdTAwMjZwaW02X3Byb3RvY29sLCBJUFBST1RPX1BJTSkgXFx1MDAzYyAwKSB7XFxuMTQ0MzpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBjYW4ndCBhZGQgUElNIHByb3RvY29sXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTQ0NDpcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzozOS4xMDQ5MjkzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MzM2MTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgSVB2NCBNdWx0aWNhc3QgUm91dGVyIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHdlIHNob3VsZCBhbHNvIHNwZWNpZmljYWxseSBhbmFseXplIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudCBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZXJlZm9yZSB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byByZW1haW4uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBhbGxvY2F0aW9uIGhhcHBlbnMsIHdoYXQgcmVzb3VyY2VzIGl0IGlzIGRlcGVuZGVudCBvbiwgYW5kIGlmIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgYm90dGxlbmVjaywgb3IgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIG92ZXJhbGwgaGFuZGxpbmcgb2YgbXVsdGljYXN0IHRyYWZmaWMuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NDEuMjQ4Mjk0MDMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZtcnQtXFx1MDAzZXdvcmspO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgbXJfdGFibGUgKlxcbiAgNDY6XFx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXFxuICA0NzpcXHRcXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbiAgNDg6XFx0XFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxcbiAgNDk6XFx0XFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCkpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gIDUzOlxcdFxcdGludCBlcnI7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA1NjpcXHRcXHRpZiAoIW1ydClcXG4gIDU3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTg6XFx0XFx0bXJ0LVxcdTAwM2VpZCA9IGlkO1xcbiAgNTk6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQsIG5ldCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gIDYyOlxcdFxcdGVyciA9IHJobHRhYmxlX2luaXQoXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gsIG1ydC1cXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xcbiAgNjM6XFx0XFx0aWYgKGVycikge1xcbiAgNjQ6XFx0XFx0XFx0a2ZyZWUobXJ0KTtcXG4gIDY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNm1ydC1cXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcXG4gIDY5OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KTtcXG4gIDcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY191bnJlc19xdWV1ZSk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtcnQtXFx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuICA3NTpcXHRcXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xcbiAgNzY6XFx0XFx0cmV0dXJuIG1ydDtcXG4gIDc3OlxcdH1cXG4gIDc4OlxcdFxcbiAgNzk6XFx0dm9pZCAqbXJfbWZjX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCB2b2lkICpoYXNoYXJnLCBpbnQgcGFyZW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzo0MS4yNDgzNzU3MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM5MDY0ODM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFjY291bnRpbmcgaW4gTXVsdGljYXN0IFJvdXRpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYG1yX3RhYmxlX2FsbG9jYCBpcyB1c2luZyBga3phbGxvY19vYmpgIHdpdGggYEdGUF9LRVJORUxfQUNDT1VOVGAuIFNpbXVsdGFuZW91c2x5LCBgaXBfbXJfaW5pdGAgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGJvdGggbGV2ZXJhZ2luZyBgU0xBQl9BQ0NPVU5UYCB3aGVuIGluaXRpYWxpemluZyB0aGVpciByZXNwZWN0aXZlIGNhY2hlcywgYG1ydF9jYWNoZXBgLiBUaGUga2V5IHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGltcGFjdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYm90aCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBhbmQgYFNMQUJfQUNDT1VOVGAgYXJlIGludGVudGlvbmFsbHkgc2V0IHRvIGVuYWJsZSBtZW1jZyAobWVtb3J5IGNncm91cCkgYWNjb3VudGluZy4gVGhpcyBtZWFucyB0aGF0IGFueSBhbGxvY2F0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKGBzdHJ1Y3QgbXJfdGFibGVgKSBhbmQgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcyAoYHN0cnVjdCBtZmNfY2FjaGVgIGFuZCBgc3RydWN0IG1mYzZfY2FjaGVgKSDigJMgYXJlIG5vdyBkaXJlY3RseSBtYW5hZ2VkIGJ5IG1lbW9yeSBjZ3JvdXAgbGltaXRzLlxuXG5Ob3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBhcmUgdGhlc2UgYWxsb2NhdGlvbnMgcmVsZXZhbnQgaW4gYSBzdGFuZGFyZCBkZXBsb3ltZW50PyBBYnNvbHV0ZWx5LiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGFyZSBjb3JlIGNvbXBvbmVudHMgb2YgYW55IHR5cGljYWwgbmV0d29ya2luZyBzeXN0ZW0uIFRoZXNlIGFsbG9jYXRpb25zIGFyZSByZWFjaGVkIGJ5IHVzZXJsYW5kIHRocm91Z2ggYHNldHNvY2tvcHRgIChlLmcuIE1SVF9JTklULCBNUlRfQUREX1ZJRiwgTVJUX0FERF9NRkMsIE1SVF9ERUxfTUZDIG9uIHJhdyBJUFBST1RPX0lHTVAgb3IgTVJUNl9JTklUIG9uIHJhdyBJUFBST1RPX0lDTVBWNiBzb2NrZXRzKSBvciB0aGUgbW9yZSBtb2Rlcm4gcnRuZXRsaW5rL2ZpYiBydWxlcywgc28gdGhpcyBpcyBjcml0aWNhbC5cblxuVGhlIHByYWN0aWNhbCBjb25zZXF1ZW5jZSBoZXJlIGlzIHRoYXQsIHdoZW4gdGhlc2UgYWxsb2NhdGlvbnMgb2NjdXIgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgdGhlIHByZXNlbmNlIG9mIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGFuZCBgU0xBQl9BQ0NPVU5UYCBlZmZlY3RpdmVseSBzdWJqZWN0cyB0aGVtIHRvIG1lbWNnIGxpbWl0cy4gSWYgYSBjZ3JvdXAgZXhjZWVkcyBpdHMgbWVtb3J5IHF1b3RhLCB0aGVzZSBhbGxvY2F0aW9ucyBjYW4gZmFpbCB3aXRoIGAtRU5PTUVNYC4gVGhpcyBmYWlsdXJlLCBJIGFzc3VtZSwgd2lsbCB0cmlnZ2VyIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBtcl90YWJsZV9hbGxvY2AsIGBpcG1yX21mY19hZGRgLCBhbmQgYGlwNm1yX21mY19hZGRgIGFuZCBvdGhlcnMgdGhhdCBJIHdpbGwgd2FudCB0byByZXZpZXcuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgZGVlcGVyIGFuZCBleGFtaW5lIGV4YWN0bHkgd2hlcmUgYG1ydF9jYWNoZXBgIGlzIHVzZWQgd2l0aGluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBhY2NvdW50aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzcG90IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjQ3LjYzOTAyNzExOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwNDcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXJ0X2NhY2hlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDEtXFxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTc0Ni1cXG5uZXQvaXB2NC9pcG1yLmM6NzQ3OlxcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mY19jYWNoZSAqKWMpO1xcbm5ldC9pcHY0L2lwbXIuYy03NDgtfVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTk5ND1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyh2b2lkKVxcbm5ldC9pcHY0L2lwbXIuYy05OTUte1xcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lwbXIuYy05OTctXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAwNz1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY0L2lwbXIuYy0xMDA4LXtcXG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcXHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvaXBtci5jLTEwMTAtXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MzM3NT1pbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxcbm5ldC9pcHY0L2lwbXIuYzozMzc5OlxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cXHRcXHRcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcXG5uZXQvaXB2NC9pcG1yLmM6MzQwNzpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjQvaXBtci5jLTM0MDgtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTg0LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XFxubmV0L2lwdjYvaXA2bXIuYy04Ni1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTgwMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcXHRrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgKHN0cnVjdCBtZmM2X2NhY2hlICopYyk7XFxubmV0L2lwdjYvaXA2bXIuYy04MDQtfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDI1PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2Modm9pZClcXG5uZXQvaXB2Ni9pcDZtci5jLTEwMjYte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcXHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTAyOC1cXHRpZiAoIWMpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwMzc9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XFxubmV0L2lwdjYvaXA2bXIuYzoxMDM5OlxcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVxcdGlmICghYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjktXFxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlxcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XFxubmV0L2lwdjYvaXA2bXIuYzoxNDMxOlxcdGlmICghbXJ0X2NhY2hlcClcXG5uZXQvaXB2Ni9pcDZtci5jLTE0MzItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0NTktcmVnX3Blcm5ldF9mYWlsOlxcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNDYxLVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE0NjQ9dm9pZCBfX2luaXQgaXA2X21yX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3MS1cXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwNm1yX25ldF9vcHMpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTQ3MjpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NDcuNzE4MDc4NTA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjkxNTcxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgTmV0d29yayBNdWx0aWNhc3QgUm91dGluZyBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgdGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIG9iamVjdGl2ZSBpcyB0byB1bmNvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBtb2RpZmljYXRpb25zLiBUaGUgcHJpbWFyeSBnYXRlIGhlcmUgaXMgcmVhY2hhYmlsaXR5OyBpZiB0aGUgY29kZSBpc24ndCByZWFjaGFibGUsIGl0J3MgYSBuby1nby4gTm8gYmxpbmQgZmFpdGggaW4gXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcyBlaXRoZXIsIHJlZmFjdG9yZWQgcmVhY2hhYmxlIGNvZGUgaXMgZnV6emFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCBoaXRzIGNvZGUgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIHdoaWNoLCBhcyBhIG5ldHdvcmtpbmcgc3BlY2lhbGlzdCwgSSBrbm93IGlzIGluIHRoZSBoZWFydCBvZiB0aGUgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiAgVGhpcyBkaXJlY3RseSBtb2RpZmllcyBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3Mg4oCTIGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCDigJMgdXNlZCBmb3IgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIGFuZCBNRkMgY2FjaGVzLiBUaGlzIGlzICpyZWFjaGFibGUqIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBuZXR3b3JraW5nLCBydW5uaW5nIG9uIHN0YW5kYXJkIGFtZDY0IFFFTVUga2VybmVscy4gVGhlIGNvZGUgY2xlYXJseSBpc24ndCBkb2N1bWVudGF0aW9uLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoZXJlZm9yZSwgYnkgdGhlIGRlZmluZWQgcnVsZXMgaW4gdGhlIGZpcnN0IHRocmVlIHNlY3Rpb25zLCBpdCdzIGEgZmlybSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEkgaGF2ZSBubyByZXNlcnZhdGlvbnMgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gZGVmaW5lIGEgZ29vZCBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBJIHNob3VsZCB0YXJnZXQgd2l0aCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBtcl90YWJsZV9hbGxvY2AgaW4gYG5ldC9pcHY0L2lwbXJfYmFzZS5jYCBhbmQgYGlwX21yX2luaXRgIGluIGBuZXQvaXB2NC9pcG1yLmNgLiAgSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaWdub3JlIGBpcF9tcl9pbml0YCwgc2luY2UgaXQgaXMgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEkga25vdyBJIGhhdmUgdG8gcHJpb3JpdGl6ZSB0ZXN0YWJsZSBmdW5jdGlvbnMuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIGBtcl90YWJsZV9hbGxvY2AgYmVjYXVzZSBpdCBpcyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSBtb3N0IGxpa2VseSB0YXJnZXQgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzLiBTbyBub3cgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBjYWxsZXJzIG9mIGBtcl90YWJsZV9hbGxvY2AgYW5kIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbGxvY2F0aW5nIGZyb20gYG1ydF9jYWNoZXBgIHRvIGRlZmluZSBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTIuNTg3MjM5NzE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODAyNjA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcl90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDM3LVxcbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcG1yX21yX3RhYmxlX29wcyxcXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVxcdFxcdFxcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYz00NT1zdHJ1Y3QgbXJfdGFibGUgKlxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTQ3LVxcdCAgICAgICBzdHJ1Y3QgbXJfdGFibGVfb3BzICpvcHMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTQwOD1zdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cXG5uZXQvaXB2Ni9pcDZtci5jOjQxNjpcXHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcXG5uZXQvaXB2Ni9pcDZtci5jLTQxNy1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTIuNjc1MjcxMTc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzcwNTU4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMuIEknbSBmb2N1c2luZyBvbiBgbXJfdGFibGVfYWxsb2NgIGJlY2F1c2UgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY3JlYXRpb24gb2YgdGhlIHRhYmxlcyB0aGVtc2VsdmVzLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYG1yX3RhYmxlX2FsbG9jYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgc3RydWN0dXJlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGhzIGZvciBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBnZXR0aW5nIGNhbGxlZCBmcm9tLiBBIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGdldCBtZSBjbG9zZXIgdG8gdGhlIG92ZXJhbGwgY29udGV4dC4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgYG1mY19jYWNoZWAgb3IgYG1mYzZfY2FjaGVgIGFsbG9jYXRpb25zIGhhcHBlbiB3aXRoaW4gdGhpcyBjYWxsIGZsb3csIG9yIHBvdGVudGlhbGx5IGVsc2V3aGVyZS4gTG9jYXRpbmcgdGhlc2UgY2FjaGUgYWxsb2NhdGlvbnMsIGFsb25nc2lkZSB0aGUgbWFpbiB0YWJsZSBzdHJ1Y3R1cmUsIHNob3VsZCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVzb3VyY2Ugc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTQuOTEyMzMwMTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMyNTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcG1yX2NhY2hlX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9OTgxPXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTk5My0vKiBBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeSAqL1xcbm5ldC9pcHY0L2lwbXIuYzo5OTQ6c3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZClcXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDA2LVxcbm5ldC9pcHY0L2lwbXIuYzoxMDA3OnN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTEwMDgte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExNDI9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTExNjctXFx0XFx0LyogQ3JlYXRlIGEgbmV3IGVudHJ5IGlmIGFsbG93YWJsZSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoxMTY4OlxcdFxcdGMgPSBpcG1yX2NhY2hlX2FsbG9jX3VucmVzKCk7XFxubmV0L2lwdjQvaXBtci5jLTExNjktXFx0XFx0aWYgKCFjKSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTI0MT1zdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEyNzItXFxubmV0L2lwdjQvaXBtci5jOjEyNzM6XFx0YyA9IGlwbXJfY2FjaGVfYWxsb2MoKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTI3NC1cXHRpZiAoIWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI3OjU0Ljk2MzY2MTA2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjIyMjM4Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk11bHRpY2FzdCBSb3V0aW5nIE1vZHVsZSBFbnRyeXBvaW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBrZXJuZWwncyBtdWx0aWNhc3Qgcm91dGluZyBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZSBrZXkgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBtYW5hZ2VkLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UgY3JpdGljYWwgZW50cnkgcG9pbnRzLlxuXG5JJ3ZlIHNjb3BlZCBpbiBvbiB0aGUgSVB2NCAoYG5ldC9pcHY0L2lwbXIuY2ApIGFuZCBJUHY2IChgbmV0L2lwdjYvaXA2bXIuY2ApIG1vZHVsZXMgc3BlY2lmaWNhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyBtdWx0aWNhc3QgZm9yd2FyZGluZyBpcyBjb25zdHJ1Y3RlZC4gSSd2ZSBub3RlZCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lczogYG1yX3RhYmxlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY191bnJlc2AsIGBpcDZtcl9jYWNoZV9hbGxvY2AsIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AgZm9yIGNhY2hpbmcgYW5kIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gSSdtIG5vdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRhYmxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbjogYGlwbXJfbmV3X3RhYmxlYCwgYGlwNm1yX25ld190YWJsZWAuIEkgc2VlIHNvdXJjZS1zcGVjaWZpYyBtdWx0aWNhc3QgZnVuY3Rpb25zOiBgaXBtcl9tZmNfYWRkYCwgYGlwbXJfbWZjX2RlbGV0ZWAsIGBpcDZtcl9tZmNfYWRkYCwgYW5kIGBpcDZtcl9tZmNfZGVsZXRlYCB0aGF0IG1hbmFnZSBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSBlbnRyaWVzLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzLiBJJ2xsIG5lZWQgdG8gZm9sbG93IGhvdyB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBgc2V0c29ja29wdGAgYW5kIG5ldGxpbmsgZW50cnkgcG9pbnRzLCB0aG9zZSBhcmUgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjc6NTguNTg1OTAyODk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk1ODE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDctXFx0aWYgKGlwX21yb3V0ZV9vcHQob3B0bmFtZSkpXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDg6XFx0XFx0cmV0dXJuIGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDktXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTM3OD1zdGF0aWMgdm9pZCBtcnRzb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xNDA5LVxcbm5ldC9pcHY0L2lwbXIuYzoxNDEwOmludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY0L2lwbXIuYy0xNDExLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyNzo1OC42NTI4NjU0OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzODEwMDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKio2bXIgc2V0c29ja29wdCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYDZtciBzZXRzb2Nrb3B0YCBidXNpbmVzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyDigJMgaXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSd2ZSBkaXJlY3RseSBkZWFsdCB3aXRoIGl0LCBidXQgdGhlIGNvbmNlcHQgaXMgZGVmaW5pdGVseSBmYW1pbGlhci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHdoYXQgdW5kZXJseWluZyB0ZWNobm9sb2d5IGlzIGJlaW5nIHJlZmVyZW5jZWQgaGVyZSAtIEkgYXNzdW1lIHRoaXMgaXMgSVB2NiBNdWx0aWNhc3QgUm91dGVyIGZ1bmN0aW9uYWxpdHksIGJ1dCBJIHdhbnQgdG8gY29uZmlybS4gR2l2ZW4gdGhlIGNvbnRleHQsIGBzZXRzb2Nrb3B0YCBvYnZpb3VzbHkgcGxheXMgYSByb2xlLCBzbyBJIHdpbGwgbmVlZCB0byBjb25zaWRlciBzb2NrZXQgb3B0aW9ucyBmb3IgbXVsdGljYXN0IG9wZXJhdGlvbiBhbmQgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHBlcnRhaW5pbmcgdG8gSVB2NiBhbmQgcm91dGluZy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gc29ja2V0IG9wdGlvbiBmbGFncyByZWxhdGVkIHRvIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFuZCBzb3VyY2Utc3BlY2lmaWMgbXVsdGljYXN0LiBXaGF0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgcmVsZXZhbnQ/IFdoYXQgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYXJlIGxpa2VseSBpbiBwbGF5PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgd2l0aGluIGBzZXRzb2Nrb3B0YCBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBtdWx0aWNhc3Qgcm91dGVyIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgdGhlIGNvbW1vbiBmYWlsdXJlIHBvaW50cywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUgSSBoYXZlIGV4cGVyaWVuY2VkIGRpcmVjdGx5LCBvciBvbmUgdGhhdCBJJ3ZlIG9ubHkgcmVhZCBhYm91dC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbiBwZWN1bGlhcml0aWVzLiBEb2VzIHRoaXMgcmVsYXRlIHRvIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgcm91dGVyIGZ1bmN0aW9uYWxpdHksIHNldHRpbmcgdGhlIFRUTCwgb3IgY29udHJvbGxpbmcgdGhlIGludGVyZmFjZXMgdXNlZCBmb3IgbXVsdGljYXN0IHRyYWZmaWM/IElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGtlcm5lbCBtb2R1bGUgb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHZhcmlvdXMgYHNldHNvY2tvcHRgIGNhbGxzIG9uIHRoZSByb3V0aW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW1wYWN0cyBmb3J3YXJkaW5nIGRlY2lzaW9ucyBvciB0aGUgY3JlYXRpb24vcmVtb3ZhbCBvZiBtdWx0aWNhc3QgZm9yd2FyZGluZyBlbnRyaWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBuZXR3b3JrIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjAyLjE5MDk3MDIxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzMzQzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZtci5jPTE3MDM9RVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE3MTEtXFxubmV0L2lwdjYvaXA2bXIuYzoxNzEyOmludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2Ni9pcDZtci5jLTE3MTMtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTYtXFx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzozOTc6XFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjAyLjI1MTMwOTMyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg1MTk3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgUm91dGluZyBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgSVAgbXVsdGljYXN0IHJvdXRpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbmV0bGluayBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoZSByZWxldmFudCBmdW5jdGlvbnMgZm9yIGFkZGluZyBvciBtb2RpZnlpbmcgbXVsdGljYXN0IHJvdXRlcyBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGVpdGhlciBgaXBtcl9ydG1fcm91dGVgIG9yIGBpcG1yX3J0bV9uZXdyb3V0ZWAuIE9uZSBvZiB0aG9zZSBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSByb3V0ZXMgYXJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsgbWVzc2FnZXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjA0LjEzNjUxNjE0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNTk5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtcl9ydG1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MjYyMj1zdGF0aWMgdm9pZCBpZ21wbXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjY3MC1cXG5uZXQvaXB2NC9pcG1yLmM6MjY3MTpzdGF0aWMgaW50IGlwbXJfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwbXIuYy0yNjcyLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yNzI1LVxcbm5ldC9pcHY0L2lwbXIuYzoyNzI2OnN0YXRpYyBpbnQgaXBtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2lwdjQvaXBtci5jLTI3MjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjczNy1cXG5uZXQvaXB2NC9pcG1yLmM6MjczODpcXHRlcnIgPSBpcG1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoaW5fc2tiLCBubGgsIHRiLCBleHRhY2spO1xcbm5ldC9pcHY0L2lwbXIuYy0yNzM5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI3ODMtXFxubmV0L2lwdjQvaXBtci5jOjI3ODQ6c3RhdGljIGludCBpcG1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9pcHY0L2lwbXIuYy0yNzg1LXtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yODI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1faXBtcl9wb2xpY3lbUlRBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI4MzQtXFxubmV0L2lwdjQvaXBtci5jOjI4MzU6c3RhdGljIGJvb2wgaXBtcl9ydG1fdmFsaWRhdGVfcHJvdG8odW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2wpXFxubmV0L2lwdjQvaXBtci5jLTI4MzYte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTI4NjE9c3RhdGljIGludCBydG1fdG9faXBtcl9tZmNjKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjg4Mi1cXHQgICAgcnRtLVxcdTAwM2VydG1fc2NvcGUgIT0gUlRfU0NPUEVfVU5JVkVSU0UgfHxcXG5uZXQvaXB2NC9pcG1yLmM6Mjg4MzpcXHQgICAgIWlwbXJfcnRtX3ZhbGlkYXRlX3Byb3RvKHJ0bS1cXHUwMDNlcnRtX3Byb3RvY29sKSlcXG5uZXQvaXB2NC9pcG1yLmMtMjg4NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yOTQyLS8qIHRha2VzIGNhcmUgb2YgYm90aCBuZXdyb3V0ZSBhbmQgZGVscm91dGUgKi9cXG5uZXQvaXB2NC9pcG1yLmM6Mjk0MzpzdGF0aWMgaW50IGlwbXJfcnRtX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY0L2lwbXIuYy0yOTQ0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTMwMjQ9c3RhdGljIGludCBpcG1yX3ZhbGlkX2R1bXBsaW5rKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTMwNDgtXFxubmV0L2lwdjQvaXBtci5jOjMwNDk6c3RhdGljIGludCBpcG1yX3J0bV9kdW1wbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaXBtci5jLTMwNTAte1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTMzNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwbXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvaXB2NC9pcG1yLmMtMzM2NC1cXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcXG5uZXQvaXB2NC9pcG1yLmM6MzM2NTpcXHQgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXBsaW5rLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNjYtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX05FV1JPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzY3OlxcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNjgtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0RFTFJPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzY5OlxcdCAuZG9pdCA9IGlwbXJfcnRtX3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjQvaXBtci5jLTMzNzAtXFx0ey5wcm90b2NvbCA9IFJUTkxfRkFNSUxZX0lQTVIsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcbm5ldC9pcHY0L2lwbXIuYzozMzcxOlxcdCAuZG9pdCA9IGlwbXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXBtcl9ydG1fZHVtcHJvdXRlLFxcbm5ldC9pcHY0L2lwbXIuYy0zMzcyLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MDQuMjI1ODA0ODI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjA5Nzc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbXVsdGljYXN0IHJvdXRpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uIGluIGBpcG1yX2Jhc2UuY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBhcmVhcy4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGFtaW5lIGluY2x1ZGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwbXJfbWZjX2FkZGAsIGBpcDZtcl9tZmNfYWRkYCwgYGlwbXJfcnRtX3JvdXRlYCwgYW5kIGBpcDZtcl9ydG1fcm91dGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGlwNm1yX3J0bV9yb3V0ZWAgYWN0dWFsbHkgZXhpc3RzIHdpdGhpbiB0aGUgc3lzdGVtIGJlZm9yZSBhc3N1bWluZyBhbnkgZnVydGhlciBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjA2LjE0Njc4NDc1NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNm1yX3J0bV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk5OnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE0MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNm1yX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3Rfb3JfbW9kdWxlID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDIxLVxcdCAubXNndHlwZSA9IFJUTV9HRVRST1VURSxcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MjI6XFx0IC5kb2l0ID0gaXA2bXJfcnRtX2dldHJvdXRlLCAuZHVtcGl0ID0gaXA2bXJfcnRtX2R1bXByb3V0ZSxcXG5uZXQvaXB2Ni9pcDZtci5jLTE0MjMtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0yNjk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcDZtcl9nZXRyb3V0ZV9wb2xpY3lbUlRBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzAwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjcwMTpzdGF0aWMgaW50IGlwNm1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTI3MDItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3MzItXFxubmV0L2lwdjYvaXA2bXIuYzoyNzMzOnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjczNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3NDQtXFxubmV0L2lwdjYvaXA2bXIuYzoyNzQ1OlxcdGVyciA9IGlwNm1yX3J0bV92YWxpZF9nZXRyb3V0ZV9yZXEoaW5fc2tiLCBubGgsIHRiLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjc0Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjc4OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjI3OTA6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2Ni9pcDZtci5jLTI3OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODowNi4yNTIwMjk4NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwNTAwNzMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGluaXRpYWxpemF0aW9uIGlzIHNvdW5kLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgaGFyZCBsb29rIGF0IHRoZSBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnRzIGZvciBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nLiBJIHdhbnQgdG8gZW5zdXJlIHRoZXkncmUgc2V0dGluZyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UsIGFuZCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhleSBhcmUgaW5pdGlhbGl6aW5nIGFsbCB0aGUgcmVxdWlyZWQgbWVtYmVycyBjb3JyZWN0bHksIGluY2x1ZGluZyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBhbnkgaW5pdGlhbCBzdGF0ZSBmbGFncy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgaXMgZm91bmRhdGlvbmFsIGZvciBhbmFseXppbmcgaG93IG11bHRpY2FzdCByb3V0aW5nIGhhbmRsZXMgdGhlIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGZvcndhcmRpbmcgc3RhdGUuIEl0J3MgYSBrZXkgc3BvdCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgZGVmYXVsdCBiZWhhdmlvcnMgZWFybHkgb24uIExldCdzIHNlZSBpZiB0aGUgdGFibGUgY3JlYXRpb24gcHJvY2Vzc2VzIGhhbmRsZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBlcnJvciByZXBvcnRpbmcgcm9idXN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MDguMzU3MDQwOTc3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5Mjg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBbNl0/bXJfbmV3X3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwMj1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbm5ldC9pcHY0L2lwbXIuYy0xMDMtXFxubmV0L2lwdjQvaXBtci5jOjEwNDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcG1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XFxubmV0L2lwdjQvaXBtci5jLTEwNS1zdGF0aWMgdm9pZCBpcG1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjQyPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcG1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTI1NC1cXG5uZXQvaXB2NC9pcG1yLmM6MjU1OlxcdG1ydCA9IGlwbXJfbmV3X3RhYmxlKG5ldCwgUlRfVEFCTEVfREVGQVVMVCk7XFxubmV0L2lwdjQvaXBtci5jLTI1Ni1cXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMzU9c3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMzM4LVxcbm5ldC9pcHY0L2lwbXIuYzozMzk6XFx0bXJ0ID0gaXBtcl9uZXdfdGFibGUobmV0LCBSVF9UQUJMRV9ERUZBVUxUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMzQwLVxcdGlmIChJU19FUlIobXJ0KSlcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zOTk9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcG1yX3JodF9wYXJhbXMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDA3LVxcbm5ldC9pcHY0L2lwbXIuYzo0MDg6c3RhdGljIHZvaWQgaXBtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy00MDktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz00MjE9c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXBtcl9tcl90YWJsZV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDI1LVxcbm5ldC9pcHY0L2lwbXIuYzo0MjY6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjQvaXBtci5jLTQyNy17XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDM4LVxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjQvaXBtci5jOjQzOTpcXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcG1yX25ld190YWJsZV9zZXQpO1xcbm5ldC9pcHY0L2lwbXIuYy00NDAtfVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU5NC1cXHRcXHR9IGVsc2Uge1xcbm5ldC9pcHY0L2lwbXIuYzoxNTk1OlxcdFxcdFxcdG1ydCA9IGlwbXJfbmV3X3RhYmxlKG5ldCwgdXZhbCk7XFxubmV0L2lwdjQvaXBtci5jLTE1OTYtXFx0XFx0XFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz04NT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg4LXN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTIyOT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI0MS1cXG5uZXQvaXB2Ni9pcDZtci5jOjI0MjpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0yNDMtXFx0aWYgKElTX0VSUihtcnQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTMyMz1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMyNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0zMjgtXFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0zODE9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODktXFxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTM5MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTQwMz1zdGF0aWMgc3RydWN0IG1yX3RhYmxlX29wcyBpcDZtcl9tcl90YWJsZV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cXG5uZXQvaXB2Ni9pcDZtci5jOjQwODpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTYtXFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjYvaXA2bXIuYzo0MTc6XFx0XFx0XFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XFxubmV0L2lwdjYvaXA2bXIuYy00MTgtfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNzEyPWludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTg3Mi1cXHRcXHRyZXQgPSAwO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTg3MzpcXHRcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE4NzQtXFx0XFx0aWYgKElTX0VSUihtcnQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODowOC40ODI5NzU0NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxOTQ1NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX01ST1VURWAsIGBJUFY2X01ST1VURWAsIGFuZCBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGBJUF9NUk9VVEVfQ09NTU9OYC4gVGhhdCBsYXN0IG9uZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSB0aGUgb3RoZXJzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgYSBjcnVjaWFsIHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIHRoZSBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE1FTUNHYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0J3Mgd2hhdCBkcml2ZXMgdGhlIEdGUF9LRVJORUxfQUNDT1VOVCBhbmQgU0xBQl9BQ0NPVU5UIGZsYWdzIHRvIGdpdmUgdXMgbWVhbmluZ2Z1bCBkYXRhLiBJIHJlYWxseSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgTUVNQ0dgIGlzIGFjdHVhbGx5IHJlcXVpcmVkIGZvciB0aGlzIG1lbWNnIGFjY291bnRpbmcgdG8gd29yaywgb3Igd2UgYXJlIHdhc3RpbmcgcmVzb3VyY2VzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYE1FTUNHYC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhhdCBgSVBfTVVMVElDQVNUYCBpcyBlbmFibGVkLCBzaW5jZSBgSVBfTVJPVVRFYCBkZXBlbmRzIG9uIGl0LCBhbmQgYElQVjZgIGZvciBgSVBWNl9NUk9VVEVgLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjExLjIwMjQzNzM1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxNjA5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjExLjI1ODYwMjU5MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjI2MTMyNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE11bHRpY2FzdCBSb3V0aW5nIENvZGUgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIHNlZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByZXNlbnQ6IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBgTUVNQ0dgLCBgSVBfTVVMVElDQVNUYCwgYW5kIGBJUFY2YC4gR29vZCwgdGhleSdyZSBhbGwgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLCB0YWJsZSBhbGxvY2F0aW9uLCBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IG9wdGlvbnMuIEkgd2VudCB0aHJvdWdoIHRoZSBsaXN0OiBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGAsIGBpcG1yX25ld190YWJsZWAsIGBpcDZtcl9uZXdfdGFibGVgLiBJIGNoZWNrZWQgdGhlaXIgc3RhdGljL2V4cG9ydGVkIHN0YXR1cy4gYGlwbXJfY2FjaGVfYWxsb2NgIGFuZCBgaXA2bXJfY2FjaGVfYWxsb2NgLCB3aGlsZSBzdGF0aWMsIGFyZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29yayBmaWxlcywgbWVhbmluZyB0aGV5IGFyZSB2ZXJ5IHJlbGV2YW50LiBgbXJfdGFibGVfYWxsb2NgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwbXJfcnRtX3JvdXRlYCwgYGlwbXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgYXJlIGNvcmUgZnVuY3Rpb25hbGl0eS4gQW5kLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgIGFyZSBzdGF0aWMgYnV0IGNyaXRpY2FsLlxuXG5JdCdzIGNsZWFyIHRoYXQgdGhpcyBlbnRpcmUgYXJlYSBmb2N1c2VzIG9uIElQIG11bHRpY2FzdCByb3V0aW5nIGFuZCB0aGUgdGFibGUvY2FjaGUgbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcy5cblxuQWxyaWdodCwgYSBmaW5hbCBkb3VibGUtY2hlY2s6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIGdyZWF0LCBtZWFuaW5nIHRoaXMgaXMgcmVhY2hhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB3ZSdyZSBzZWVpbmcgYWRkaXRpb25zIG9mIGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCB0byBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBtYXRjaGVzIHdoYXQgSSBhbHJlYWR5IGNvbmZpcm1lZCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgSSBleGFtaW5lZC5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgaGlnaC12YWx1ZSBjb2RlIHRvIGZvY3VzIG9uLCBhcyBpdCdzIGRpcmVjdGx5IGRlYWxpbmcgd2l0aCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgYWNjb3VudGluZyBmbGFncyBhZGQgYWRkaXRpb25hbCBpbnRlcmVzdC4gTGV0J3MgZ2V0IHRoZSByZXN1bHRzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODEsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDExOjI4OjE2LjQ4NDczODEyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTM5MzA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX25ld190YWJsZVwiLFxuICAgIFwiaXA2bXJfbmV3X3RhYmxlXCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIixcbiAgICBcImlwbXJfcnRtX3JvdXRlXCIsXG4gICAgXCJpcG1yX2NhY2hlX2FsbG9jXCIsXG4gICAgXCJpcDZtcl9jYWNoZV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBhbGxvY2F0aW9ucyAobXJfdGFibGUgYWxsb2NhdGlvbiBhbmQgbWZjL21mYzYga21lbV9jYWNoZXMpIHRvIHVzZSBHRlBfS0VSTkVMX0FDQ09VTlQgYW5kIFNMQUJfQUNDT1VOVC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgc3ViamVjdCB0byBtZW1jZyBsaW1pdHMgYW5kIGZhaWx1cmUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9uZXdfdGFibGVcIixcbiAgICBcImlwNm1yX25ld190YWJsZVwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCIsXG4gICAgXCJpcG1yX3J0bV9yb3V0ZVwiLFxuICAgIFwiaXBtcl9jYWNoZV9hbGxvY1wiLFxuICAgIFwiaXA2bXJfY2FjaGVfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgYWxsb2NhdGlvbnMgKG1yX3RhYmxlIGFsbG9jYXRpb24gYW5kIG1mYy9tZmM2IGttZW1fY2FjaGVzKSB0byB1c2UgR0ZQX0tFUk5FTF9BQ0NPVU5UIGFuZCBTTEFCX0FDQ09VTlQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHN1YmplY3QgdG8gbWVtY2cgbGltaXRzIGFuZCBmYWlsdXJlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MTYuNjI2MTQyOTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTQ5MzUwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MTYuNjI3MDE2ODExWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc1NDg0NzExODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTc0MGZiYjc0MTNlOTgyOTc1ZmM2NWRkMjVlNzk3MmQ0OWFiNmM3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTE6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbisrKyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuK1x0XHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwbXJfbmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuKysrIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCk7XG4rXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pO1xuK1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0X2NhY2hlcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODoxNi42MjcwMTg1OTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2ODQyMzE3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb21taXQgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZXMgcmVsYXRlZCB0byBJUCBtdWx0aWNhc3Qgcm91dGluZywgc3BlY2lmaWNhbGx5IGluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIGFuZCB0aGUgYWxsb2NhdGlvbiBvZiBhIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGBtcnRgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuXG5cblNwZWNpZmljYWxseTpcblxuKiAgIEluIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2bXIuY2AsIHRoZXkndmUgYWRkZWQgdGhlIGBTTEFCX0FDQ09VTlRgIGZsYWcgdG8gYGttZW1fY2FjaGVgIGNhbGxzLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gIGBTTEFCX0FDQ09VTlRgIG1lYW5zIHRoaXMgY2FjaGUgaXMgbm93IGFjY291bnRlZCBmb3IgaW4gbWVtb3J5IGFjY291bnRpbmcsIHdoaWNoLCBpbiBpdHNlbGYsIGRvZXNuJ3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB0aGUgY2hhbmdlIG1lYW5zIHRoZSBhbGxvY2F0aW9ucyBjYW4gbm93IGJlIG1vbml0b3JlZC5cbiogICBJbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIHRoZXkncmUgdXNpbmcgYEdGUF9LRVJORUxfQUNDT1VOVGAgbm93LiAgVGhpcyBpcyBhIG5vdGV3b3J0aHkgY2hhbmdlLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIEtNU0FOIG9wcG9ydHVuaXR5LiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5J3JlIHN0aWxsIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0J3MgYSB6ZXJvZWQgYWxsb2NhdGlvbi5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyB5ZXMsIGJlY2F1c2UgaXQgc2VlbXMgdGhlIHRlYW0gaXMgYWxyZWFkeSBhd2FyZSB0aGF0IHRoaXMgYXJlYSBjb3VsZCBjYXVzZSBpc3N1ZXMuIEhvd2V2ZXIsIGdpdmVuIG15IGV4cGVydGlzZSwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBkaWZmIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSBldmVuIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aG9zZSBtZW1vcnkgYWNjb3VudGluZyBjaGFuZ2VzICptZWFuKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSXMgdGhpcyByZWxhdGVkIHRvIGEga25vd24gaXNzdWU/IEFyZSB0aGV5IGF0dGVtcHRpbmcgdG8gYWRkcmVzcyBhIHJlY2VudCBLTVNBTiBmaW5kaW5nPyBJIG5lZWQgdG8ga25vdyBmb3Igc3VyZS4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODozNS4zMTEyNTUyNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzg1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MzUuMzY0NjQ2NTc2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzYxNzgxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGt6YWxsb2Nfb2JqYCBEZWZpbml0aW9uKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYGt6YWxsb2Nfb2JqYC4gSSdtIHByZXR0eSBzdXJlIEkga25vdyB3aGF0IGl0IGRvZXMsIGJ1dCBJJ3ZlIGJlZW4gYnVybmVkIGJlZm9yZSBieSBhc3N1bXB0aW9ucywgYW5kIHN1YnRsZSBkZXRhaWxzIGNhbiBiZSBjcnVjaWFsIGluIGtlcm5lbCBkZXZlbG9wbWVudC4gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIEknbSBvbiB0aGUgc2FtZSBwYWdlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dC4gSXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayBkZWZpbml0aW9ucywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuIEdvdHRhIGVsaW1pbmF0ZSBhbnkgcmlzayBvZiBtaXNpbnRlcnByZXRpbmcgaG93IHRoYXQgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIGFuZCB3aGF0IGl0cyBndWFyYW50ZWVzIGFyZSwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIGFuZCBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaWYgaXQncyB1c2VkIGluIGEgaGlnaGx5IGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGxldCdzIHZlcmlmeSB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6MzcuNDQwODI3OTI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NTczMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTU6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU2LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMToyODozOS42Mzg0MDY0MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUzNzA0MjI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIGp1c3QgYWRkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFNMQUJfQUNDT1VOVGAgYW5kIGBHRlBfS0VSTkVMX0FDQ09VTlRgLCBmb3IgYWxsb2NhdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMsIGJvdGggSVB2NCBhbmQgSVB2Ni4gV2UncmUgdGFsa2luZyBhYm91dCBgbXJ0X2NhY2hlcGAsIGBtZmNfY2FjaGVgLCBgbWZjNl9jYWNoZWAsIGFuZCBgc3RydWN0IG1yX3RhYmxlYCBhbGxvY2F0aW9ucy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIGl0LCBhbmQgdGhlIGFuc3dlciBpcyBuby4gV2UncmUgbm90IGNyZWF0aW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVyczsgdGhlIGFsbG9jYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gYGlwbXJfYmFzZS5jYCwgc3RpbGwgdXNlIHplcm8taW5pdGlhbGl6YXRpb24gKGBremFsbG9jX29iamApLCBzbyB0aGF0J3MgYSBjaGVjay4gQWxzbywgdGhlc2UgZmxhZ3MgKGBTTEFCX0FDQ09VTlRgIGFuZCBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCkgYXJlIHN0cmljdGx5IGZvciBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcuIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgY29kZSBwYXRocyB0aGF0IGludm9sdmUgYGNvcHlfdG9fdXNlcmAsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHBhZGRpbmcgbGVha3MsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIGluIHBsYWNlIGZvciBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGFuZCB3aGlsZSBLTVNBTiAqY291bGQqIGJlIHJlbGV2YW50IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYWRkaW5nIGFjY291bnRpbmcgZmxhZ3MgYWxvbmUgZG9lc24ndCB0cmlnZ2VyIGEgbmVlZCBmb3IgaXQuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgd2UgaGF2ZSB6ZXJvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGFkZGluZyBtZW1jZyBhY2NvdW50aW5nIGZsYWdzIHRvIHNsYWIgY2FjaGVzIGFuZCBhbGxvY2F0aW9ucy4gV2UncmUgbm90IGV4cG9zaW5nIGFueSBuZXcgbWVtb3J5IHJlYWRzLCBjb3B5aW5nIHN0cnVjdHMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBidWZmZXIgZXhwb3N1cmVzLiBUaGUgYWxsb2NhdGlvbiBpbiBgaXBtcl9iYXNlLmNgIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBLQVNBTiBhbmQgZ2VuZXJhbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTE6Mjg6NDQuMTc1NDUzMjM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGZsYWdzIChTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCkgdG8gdGhlIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBzbGFiIGNhY2hlcyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlKSBhbmQgdGhlIG1yX3RhYmxlIHN0cnVjdHVyZSBhbGxvY2F0aW9uLiBObyBjaGFuZ2VzIGFyZSBtYWRlIHRvIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQsIGFuZCBtcl90YWJsZSBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmogKHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBleHBvc2VzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHNsYWIgY2FjaGVzIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUpIGFuZCB0aGUgbXJfdGFibGUgc3RydWN0dXJlIGFsbG9jYXRpb24uIE5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIG1yX3RhYmxlIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiAoemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGV4cG9zZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[1] Phase: Succeeded StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 11:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 11:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2] Phase: Succeeded StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 11:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 11:28:55 +0000 UTC FinishedAt: 2026-09-07 11:29:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2r4rs/series-workflow2r4rs-convert-artifact-2980606401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 11:29:05 +0000 UTC FinishedAt: 2026-09-07 11:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 11:29:05 +0000 UTC FinishedAt: 2026-09-07 11:47:42 +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:*6d1f764f-fee1-427e-aba9-d0a1337bea1e,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-workflow2r4rs/series-workflow2r4rs-convert-artifact-2980606401/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": "572f17a8-38f6-4d75-b9a7-c7248bd0c7f8", "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-workflow2r4rs/series-workflow2r4rs-build-action-1807063023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 11:29:05 +0000 UTC FinishedAt: 2026-09-07 11:47:32 +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:*6d1f764f-fee1-427e-aba9-d0a1337bea1e,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-workflow2r4rs/series-workflow2r4rs-convert-artifact-2980606401/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": "572f17a8-38f6-4d75-b9a7-c7248bd0c7f8", "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-workflow2r4rs/series-workflow2r4rs-build-action-1807063023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 11:47:42 +0000 UTC FinishedAt: 2026-09-07 11:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 11:47:42 +0000 UTC FinishedAt: 2026-09-07 11:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 11:47:42 +0000 UTC FinishedAt: 2026-09-07 11:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 11:47:42 +0000 UTC FinishedAt: 2026-09-07 11:47:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2r4rs/series-workflow2r4rs-convert-artifact-3388766356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 11:47:53 +0000 UTC FinishedAt: 2026-09-07 11:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 11:47:53 +0000 UTC FinishedAt: 2026-09-07 11:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*572f17a8-38f6-4d75-b9a7-c7248bd0c7f8,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-workflow2r4rs/series-workflow2r4rs-build-action-1807063023/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-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 11:50:03 +0000 UTC FinishedAt: 2026-09-07 11:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 11:50:03 +0000 UTC FinishedAt: 2026-09-07 11:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 11:50:03 +0000 UTC FinishedAt: 2026-09-07 12:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 11:50:03 +0000 UTC FinishedAt: 2026-09-07 12:10:48 +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:*6d1f764f-fee1-427e-aba9-d0a1337bea1e,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-workflow2r4rs/series-workflow2r4rs-convert-artifact-3388766356/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": "dea58df2-1e5a-46d2-9fda-64a698dd5a66", "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-workflow2r4rs/series-workflow2r4rs-build-action-1061478752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 11:50:03 +0000 UTC FinishedAt: 2026-09-07 12:10:38 +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:*6d1f764f-fee1-427e-aba9-d0a1337bea1e,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-workflow2r4rs/series-workflow2r4rs-convert-artifact-3388766356/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": "dea58df2-1e5a-46d2-9fda-64a698dd5a66", "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-workflow2r4rs/series-workflow2r4rs-build-action-1061478752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 12:10:48 +0000 UTC FinishedAt: 2026-09-07 12:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 12:10:48 +0000 UTC FinishedAt: 2026-09-07 12:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 12:10:48 +0000 UTC FinishedAt: 2026-09-07 12:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 12:10:48 +0000 UTC FinishedAt: 2026-09-07 12:12:31 +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:*dea58df2-1e5a-46d2-9fda-64a698dd5a66,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-workflow2r4rs/series-workflow2r4rs-build-action-1061478752/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-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +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":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"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:*572f17a8-38f6-4d75-b9a7-c7248bd0c7f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dea58df2-1e5a-46d2-9fda-64a698dd5a66,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-workflow2r4rs/series-workflow2r4rs-build-action-1807063023/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-workflow2r4rs/series-workflow2r4rs-build-action-1061478752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 12:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 12:12:49 +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":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"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-workflow2r4rs/series-workflow2r4rs-convert-artifact-3981922237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 12:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 12:12:41 +0000 UTC FinishedAt: 2026-09-07 12:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 12:12:42 +0000 UTC FinishedAt: 2026-09-07 12:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 12:12:52 +0000 UTC FinishedAt: 2026-09-07 15:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r4rs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_new_table","ip6mr_new_table","ipmr_mfc_add","ip6mr_mfc_add","ipmr_rtm_route","ipmr_cache_alloc","ip6mr_cache_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG","IP_MULTICAST","IPV6"],"series_id":"c4c0cadb-0fff-4369-b2d7-701dfff92c77","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 12:12:52 +0000 UTC FinishedAt: 2026-09-07 15:13:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*572f17a8-38f6-4d75-b9a7-c7248bd0c7f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dea58df2-1e5a-46d2-9fda-64a698dd5a66,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-workflow2r4rs/series-workflow2r4rs-build-action-1807063023/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-workflow2r4rs/series-workflow2r4rs-build-action-1061478752/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-workflow2r4rs/series-workflow2r4rs-convert-artifact-3981922237/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,}