Name: series-workflow2pg4p Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[0] Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e14d4302cbd0de773960bec33c2281508c8d8855", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e14d4302cbd0de773960bec33c2281508c8d8855", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "9e7bc821-c131-4450-8f21-e8487f63bbe8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "isw_prepare_wbs_switch", "cleanup_offline_cgwb", "cleanup_offline_cgwbs_workfn", "wb_memcg_offline", "inode_prepare_wbs_switch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e14d4302cbd0de773960bec33c2281508c8d8855", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDssCiAgICAmIzM0O2lub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzICYjMzk7aXN3X3ByZXBhcmVfd2JzX3N3aXRjaCYjMzk7IGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICYjMzk7c2Nhbm5lZCYjMzk7IGxpc3QgaGVhZCBzbyB0aGF0IHN1YnNlcXVlbnQgc2NhbnMgc3RhcnQgYXQgdW5zY2FubmVkIGlub2Rlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJiMzOTtzY2FubmVkJiMzOTsgYW5kICYjMzk7ZnVsbCYjMzk7KSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJiMzOTtib29sIGZ1bGwgPSBmYWxzZTsmIzM5OykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAmIzM5O2lzdyYjMzk7IHJlbWFpbnMgemVyby1pbml0aWFsaXplZCB2aWEga3phbGxvY19mbGV4KCksIGFuZCBubyBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggZmFsbCB1bmRlciB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gS01TQU4gd291bGQgbm90IGRldGVjdCBidWdzIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRiOGUyYzdlMWRlYmI4NjMyNjhhNTM2NTU4MDMwNzc4MGNiZTUzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmNcbmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC03MjcsMTkgJiM0Mzs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7XG4mIzQzO1x0TElTVF9IRUFEKHNjYW5uZWQpO1xuJiM0MztcdGJvb2wgZnVsbCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4mIzQzO1x0ICogZW5kLCBzbyB0aGUgbmV4dCBzY2FuIHJlc3VtZXMgYXQgdW5zY2FubmVkIGlub2RlcyBpbnN0ZWFkIG9mXG4mIzQzO1x0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXG4mIzQzO1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuJiM0MztcdCAqIGVuZCBtb3ZlX2V4cGlyZWRfaW5vZGVzKCkgcGlja3MgZnJvbTsgYl9hdHRhY2hlZCBpcyB1bm9yZGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4mIzQzO1x0XHRsaXN0X21vdmUoXHUwMDI2aW5vZGUtXHUwMDNlaV9pb19saXN0LCBcdTAwMjZzY2FubmVkKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIGxpc3QsIGlfaW9fbGlzdCkge1xuIFx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aXN3LVx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XG4gXHRcdCgqbnIpJiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRpZiAoKm5yIFx1MDAzZT0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkge1xuJiM0MztcdFx0XHRmdWxsID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0bGlzdF9zcGxpY2UoXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmdWxsO1xuIH1cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaCgpIGluIGZzL2ZzLXdyaXRlYmFjay5jLCBhbHRlcmluZyBsaXN0IHRyYXZlcnNhbCBhbmQgcmVvcmRlcmluZyBsb2dpYyBmb3IgaW5vZGVzIG9uIHRoZSB3cml0ZWJhY2sgaW8gbGlzdHMgKGJfYXR0YWNoZWQgYW5kIGJfZGlydHlfdGltZSkgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwLiBUaGlzIGFmZmVjdHMgY29yZSBWRlMvTU0gd3JpdGViYWNrIGRhdGEgc3RydWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aGVuIG9mZmxpbmluZyBtZW1vcnkgY2dyb3VwcyB3aXRoIGFjdGl2ZSBvciBsYXp5dGltZSBkaXJ0eSBpbm9kZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC03MjcsMTkgJiM0Mzs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLAogCQkJCSAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdywKIAkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKm5yKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7CiYjNDM7CUxJU1RfSEVBRChzY2FubmVkKTsKJiM0MzsJYm9vbCBmdWxsID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0CiYjNDM7CSAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZgomIzQzOwkgKiByZS13YWxraW5nIGFuIGV2ZXItZ3Jvd2luZyBydW4gb2YgcHJlcGFyZWQgYW5kIHNraXBwZWQgb25lcy4KJiM0MzsJICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZQomIzQzOwkgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7CiYjNDM7CQlsaXN0X21vdmUoJmFtcDtpbm9kZS0mZ3Q7aV9pb19saXN0LCAmYW1wO3NjYW5uZWQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7CiAJCWlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKQogCQkJY29udGludWU7CiAKIAkJaXN3LSZndDtpbm9kZXNbKm5yXSA9IGlub2RlOwogCQkoKm5yKSYjNDM7JiM0Mzs7CiAKLQkJaWYgKCpuciAmZ3Q7PSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoKm5yICZndDs9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHsKJiM0MzsJCQlmdWxsID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlsaXN0X3NwbGljZSgmYW1wO3NjYW5uZWQsIGxpc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gZnVsbDsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgRGlmZioqCgpPa2F5LCBzbyB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgY29udGV4dC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZiBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBtb2RpZmllZCBmaWxlIGlzIGBmcy9mcy13cml0ZWJhY2suY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBnbyBkaXJlY3RseSB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDcyNy4gSSBjYW4gdXNlIG15IGhhbmR5IHJlYWQtZmlsZSB0b29sIG9yIG1heWJlIGp1c3QgYSBxdWljayBncmVwcGVyIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgYW5kIG15IGltbWVkaWF0ZSBuZWVkcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE1Olx0XHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKGlub2RlLVx1MDAzZWlfd2IsIG5ld193YiwgMSk7XG4gNzE2Olx0XHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xuIDcxNzpcdFx0cmV0dXJuO1xuIDcxODpcdFxuIDcxOTpcdG91dF9mcmVlOlxuIDcyMDpcdFx0YXRvbWljX2RlYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3MjE6XHRcdGlmIChuZXdfd2IpXG4gNzIyOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDcyMzpcdFx0a2ZyZWUoaXN3KTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIDcyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIDcyODpcdFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiA3Mjk6XHR7XG4gNzMwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wO1xuIDczMTpcdFx0TElTVF9IRUFEKHNjYW5uZWQpO1xuIDczMjpcdFx0Ym9vbCBmdWxsID0gZmFsc2U7XG4gNzMzOlx0XG4gNzM0Olx0XHQvKlxuIDczNTpcdFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcbiA3MzY6XHRcdCAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZlxuIDczNzpcdFx0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXG4gNzM4Olx0XHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXG4gNzM5Olx0XHQgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLlxuIDc0MDpcdFx0ICovXG4gNzQxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcbiA3NDI6XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmlub2RlLVx1MDAzZWlfaW9fbGlzdCwgXHUwMDI2c2Nhbm5lZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIDc0NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDc0NjpcdFxuIDc0NzpcdFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiA3NDg6XHRcdFx0KCpucikmIzQzOyYjNDM7O1xuIDc0OTpcdFxuIDc1MDpcdFx0XHRpZiAoKm5yIFx1MDAzZT0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkge1xuIDc1MTpcdFx0XHRcdGZ1bGwgPSB0cnVlO1xuIDc1MjpcdFx0XHRcdGJyZWFrO1xuIDc1MzpcdFx0XHR9XG4gNzU0Olx0XHR9XG4gNzU1Olx0XHRsaXN0X3NwbGljZShcdTAwMjZzY2FubmVkLCBsaXN0KTtcbiA3NTY6XHRcbiA3NTc6XHRcdHJldHVybiBmdWxsO1xuIDc1ODpcdH1cbiA3NTk6XHRcbiA3NjA6XHQvKipcbiA3NjE6XHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuIDc2MjpcdCAqIEB3YjogdGFyZ2V0IHdiXG4gNzYzOlx0ICpcbiA3NjQ6XHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvciYjMzk7cyB3YiBpbiBvcmRlclxuIDc2NTpcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXG4gNzY2Olx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxuIDc2NzpcdCAqL1xuIDc2ODpcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIDc2OTpcdHtcbiA3NzA6XHRcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XG4gNzcxOlx0XHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XG4gNzcyOlx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xuIDc3MzpcdFx0aW50IG5yO1xuIDc3NDpcdFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XG4gNzc1Olx0XG4gNzc2Olx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc3NzpcdFx0aWYgKCFpc3cpXG4gNzc4Olx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc3OTpcdFxuIDc4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3ODE6XHRcbiA3ODI6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc4MzpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzg0Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc4NTpcdFx0XHRpZiAobmV3X3diKVxuIDc4NjpcdFx0XHRcdGJyZWFrO1xuIDc4NzpcdFx0fVxuIDc4ODpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc4OTpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgc29tZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGFuIG9mZmxpbmUgQ0dXQiAod2hhdGV2ZXIgdGhhdCBhY3JvbnltIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0IOKAkyBwcm9iYWJseSBjb250ZXh0LXNwZWNpZmljKS4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIGZvY3VzaW5nIG9uIGl0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldGllcyBoZXJlIHRoYXQgcmVxdWlyZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LgoKSSBhbHNvIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoaXMgaXMgY3J1Y2lhbC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgKndoeSogb2YgaXRzIGV4aXN0ZW5jZSBhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYW55d2hlcmUgZnJvbSBwcmUtc3dpdGNoIHZhbGlkYXRpb24gb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBhbnkgdHJpY2t5IGRlcGVuZGVuY2llcz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggaXMgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgc3dpdGNoLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIGEgYnJvYWRlciB3b3JrZmxvdy4gS25vd2luZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYWxsb3dzIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBzeXN0ZW0gaXMgZG9pbmcsIGFuZCB0aGUgY29udGV4dCB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLiBUaGlzIGlzIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGZpbmQgcG90ZW50aWFsIGlzc3Vlcywgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3OTU6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3OTY6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzk3Olx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc5ODpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc5OTpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA4MDI6XHRcdGlmICghcmVzdGFydClcbiA4MDM6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA4MDQ6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDgwNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA4MDY6XHRcbiA4MDc6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA4MDg6XHRcdGlmIChuciA9PSAwKSB7XG4gODA5Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gODEwOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDgxMTpcdFx0XHRrZnJlZShpc3cpO1xuIDgxMjpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA4MTM6XHRcdH1cbiA4MTQ6XHRcbiA4MTU6XHRcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUod2IsIG5ld193YiwgbnIpO1xuIDgxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA4MTc6XHRcbiA4MTg6XHRcdHJldHVybiByZXN0YXJ0O1xuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHQvKipcbiA4MjI6XHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcbiA4MjM6XHQgKiBAd2JjOiB3cml0ZWJhY2tfY29udHJvbCBvZiBpbnRlcmVzdFxuIDgyNDpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gODI1Olx0ICpcbiA4MjY6XHQgKiBAaW5vZGUgaXMgbG9ja2VkIGFuZCBhYm91dCB0byBiZSB3cml0dGVuIGJhY2sgdW5kZXIgdGhlIGNvbnRyb2wgb2YgQHdiYy5cbiA4Mjc6XHQgKiBSZWNvcmQgQGlub2RlJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxuIDgyODpcdCAqIHdyaXRlYmFjayBjb21wbGV0aW9uLCB3YmNfZGV0YWNoX2lub2RlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFRoaXMgaXMgdXNlZFxuIDgyOTpcdCAqIHRvIHRyYWNrIHRoZSBjZ3JvdXAgd3JpdGViYWNrIGNvbnRleHQuXG4gODMwOlx0ICovXG4gODMxOlx0c3RhdGljIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIDgzMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgzMzpcdFx0X19yZWxlYXNlcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spXG4gODM0Olx0e1xuIDgzNTpcdFx0aWYgKCFpbm9kZV9jZ3diX2VuYWJsZWQoaW5vZGUpKSB7XG4gODM2Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODM3Olx0XHRcdHJldHVybjtcbiA4Mzg6XHRcdH1cbiA4Mzk6XHRcbiA4NDA6XHRcdHdiYy1cdTAwM2V3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcbiA4NDE6XHRcdHdiYy1cdTAwM2Vpbm9kZSA9IGlub2RlO1xuIDg0MjpcdFxuIDg0MzpcdFx0d2JjLVx1MDAzZXdiX2lkID0gd2JjLVx1MDAzZXdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VpZDtcbiA4NDQ6XHRcdHdiYy1cdTAwM2V3Yl9sY2FuZF9pZCA9IGlub2RlLVx1MDAzZWlfd2JfZnJuX3dpbm5lcjtcbiA4NDU6XHRcdHdiYy1cdTAwM2V3Yl90Y2FuZF9pZCA9IDA7XG4gODQ2Olx0XHR3YmMtXHUwMDNld2JfYnl0ZXMgPSAwO1xuIDg0NzpcdFx0d2JjLVx1MDAzZXdiX2xjYW5kX2J5dGVzID0gMDtcbiA4NDg6XHRcdHdiYy1cdTAwM2V3Yl90Y2FuZF9ieXRlcyA9IDA7XG4gODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGlzIGNhbGxpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjbHVlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHV0aWxpemVkLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSB3aWxsIHBhaW50IGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIHRoZSBmbG93IG9mIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTc2MC0vKipcbmZzL2ZzLXdyaXRlYmFjay5jOjc2MTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuZnMvZnMtd3JpdGViYWNrLmMtNzYyLSAqIEB3YjogdGFyZ2V0IHdiXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNzY3LSAqL1xuZnMvZnMtd3JpdGViYWNrLmM6NzY4OmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuZnMvZnMtd3JpdGViYWNrLmMtNzY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oPTIxMD12b2lkIGNncm91cF93cml0ZWJhY2tfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaDoyMTE6Ym9vbCBjbGVhbnVwX29mZmxpbmVfY2d3YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpO1xuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yMTItXG4tLVxubW0vYmFja2luZy1kZXYuYz01OTg9c3RhdGljIExJU1RfSEVBRChvZmZsaW5lX2Nnd2JzKTtcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm1tL2JhY2tpbmctZGV2LmM6NjAwOnN0YXRpYyBERUNMQVJFX1dPUksoY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmssIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4pO1xubW0vYmFja2luZy1kZXYuYy02MDEtXG4tLVxubW0vYmFja2luZy1kZXYuYz04NTI9c3RhdGljIHZvaWQgY2d3Yl9iZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXG5tbS9iYWNraW5nLWRldi5jOjg3OTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuIC0gdHJ5IHRvIHJlbGVhc2UgZHlpbmcgY2d3YnNcbm1tL2JhY2tpbmctZGV2LmMtODgwLSAqXG4tLVxubW0vYmFja2luZy1kZXYuYy04ODQtICovXG5tbS9iYWNraW5nLWRldi5jOjg4NTpzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkxMi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG5tbS9iYWNraW5nLWRldi5jOjkxMzpcdFx0d2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSlcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm1tL2JhY2tpbmctZGV2LmM9OTMyPXZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vYmFja2luZy1kZXYuYy05NDItXG5tbS9iYWNraW5nLWRldi5jOjk0MzpcdHF1ZXVlX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmspO1xubW0vYmFja2luZy1kZXYuYy05NDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBPZmZsaW5lIENsZWFudXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3cgaGVyZS4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFuZCBgd2JfbWVtY2dfb2ZmbGluZWAgaXMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgdXAgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrYCBmb3IgbGF0ZXIgZXhlY3V0aW9uLiBSaWdodCwgYW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCBnZXRzIGludm9rZWQgd2hlbiBhIG1lbWNnIHRyYW5zaXRpb25zIHRvIGFuIG9mZmxpbmUgc3RhdGUuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3VhcmRpbmcgS2NvbmZpZyBvcHRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBrbm93LCBvZiBjb3Vyc2UsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBjb250cm9scyB0aGlzIGJlaGF2aW9yLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9mcy13cml0ZWJhY2suY2AgYW5kIGh1bnQgZG93biBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYWxsIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBibG9jazsgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBjYW5kaWRhdGUsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcy4gVGltZSB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTIyOS1cbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbmZzL2ZzLXdyaXRlYmFjay5jLTIzMS1cbi0tXG5mcy9mcy13cml0ZWJhY2suYz0xMjc5PWZzX2luaXRjYWxsKGNncm91cF93cml0ZWJhY2tfaW5pdCk7XG5mcy9mcy13cml0ZWJhY2suYy0xMjgwLVxuZnMvZnMtd3JpdGViYWNrLmM6MTI4MTojZWxzZVx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbmZzL2ZzLXdyaXRlYmFjay5jLTEyODItXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9MTMzNj1zdGF0aWMgaW5saW5lIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTEzNDItXG5mcy9mcy13cml0ZWJhY2suYzoxMzQzOiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbmZzL2ZzLXdyaXRlYmFjay5jLTEzNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgbGluZXMgMjMwIHRocm91Z2ggMTI4MSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGRpcmVjdGl2ZS4gUmlnaHQsIHRoaXMgc2NyZWFtcyB0aGF0IHRoZSBjb2RlIGJsb2NrIHdpdGhpbiB0aGF0IHJhbmdlIGlzIG9ubHkgYWN0aXZlIGlmIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGF0IG9wdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG5vdyB0byBmaW5kIHdoZXJlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgaXMgZGVmaW5lZC4gSSBiZXQgaXQmIzM5O2xsIGJlIGluIHRoZSBgY2dyb3VwYCBvciBgd3JpdGViYWNrYCBLY29uZmlnIHNlY3Rpb24sIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNncm91cC1yZWxhdGVkIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGVuIEkgY2FuIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIGNvZGUgYmxvY2sgaXMgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1dSSVRFQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEyNT1jb25maWcgQkxLX0NHUk9VUFxuLS1cbmluaXQvS2NvbmZpZy0xMTQ2LVxuaW5pdC9LY29uZmlnOjExNDc6Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbmluaXQvS2NvbmZpZy0xMTQ4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZm9jdXNpbmcgb24gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQ3LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhcmVhIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcgd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIG9yIHByb2JsZW0gaW4gbWluZCB0aGF0IEkmIzM5O20gaG9waW5nIHRvIGFkZHJlc3MgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGp1c3QgYSBnZW5lcmFsIGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHRoZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgYW5kIGxpbmUgMTE0NyBzaG91bGQgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGluc2lnaHRzLCBob3BlZnVsbHkhIFRpbWUgdG8gY3JhY2sgaXQgb3Blbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDZ3JvdXAgV3JpdGViYWNrIFBhdGNoKioKCk9rYXksIHNvIGBDR1JPVVBfV1JJVEVCQUNLYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgbG9uZyBhcyBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAgYXJlIGVuYWJsZWQuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggY29uY2VybmluZyB0aGUgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBsaXN0IG9mIGlub2RlcyBpcyBwcm9jZXNzZWQuIEJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeWAsIGp1c3Qgd2Fsa2luZyB0aHJvdWdoIHRoZSBsaXN0LiBGb3IgZWFjaCBgaW5vZGVgIGluIHRoZSBpbnB1dCBgbGlzdGAsIGl0JiMzOTtkIHJ1biBgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoYCwgYWRkIHRoZSBpbm9kZSB0byBhbiBhcnJheSBgaXN3LSZndDtpbm9kZXNgIGlmIHN1Y2Nlc3NmdWwsIGFuZCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgYCpucmAuIElmIHRoZSBjb3VudGVyIGhpdCBhIG1heGltdW0gdGhyZXNob2xkLCBpdCByZXR1cm5lZCB0cnVlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGUgbGlzdCBpdHNlbGYsIGBsaXN0YCwgd2FzbiYjMzk7dCBtb2RpZmllZCBkdXJpbmcgdGhpcyBpdGVyYXRpb24uIEl0IHdhcyBhIHNpbXBsZSwgc2VxdWVudGlhbCBwYXNzLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgTElTVF9IRUFEKHNjYW5uZWQpYCBhbmQgYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBXZSYjMzk7cmUgbm93IGl0ZXJhdGluZyBpbiByZXZlcnNlIG9yZGVyLiBJbnNpZGUgdGhlIGxvb3AsIGl0JiMzOTtzIG1vdmluZyBlYWNoIGBpbm9kZWAgZnJvbSB0aGUgb3JpZ2luYWwgYGxpc3RgIHRvIHRoaXMgdGVtcG9yYXJ5IGBzY2FubmVkYCBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY29tbWVudHMgbWVudGlvbiBtb3ZpbmcgJiMzNDtzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0IGVuZCYjMzQ7LiBJIHNlZSB0aGUgbG9naWM6IFRoaXMgYXBwcm9hY2ggc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuIEJ5IG1vdmluZyBwcm9jZXNzZWQgaW5vZGVzIHRvIHRoZSBlbmQsIHRoZSBuZXh0IHBhc3Mgd2lsbCBzdGFydCB3aXRoIHRoZSByZW1haW5pbmcsIHVucHJvY2Vzc2VkLCBpbm9kZXMuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW5jeS4gTm93LCBhZnRlciB0aGUgbG9vcCwgd2UgYGxpc3Rfc3BsaWNlYCBmcm9tIGBzY2FubmVkYCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGBsaXN0YC4KClNvLCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmc/IFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgb3JkZXIgdGhlIGlub2RlcyBhcmUgcHJvY2Vzc2VkIGluIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgbWF0dGVycy4gVGhlIGNoYW5nZSBtaWdodCBiZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHRoZSBmYWNlIG9mIG9uZ29pbmcgbW9kaWZpY2F0aW9ucyB0byB0aGF0IGBsaXN0YCwgd2hlcmUgZWFybGllciBpbm9kZXMgaW4gdGhlIGxpc3QgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvciBwcmVwYXJlZCwgYnV0IHN0aWxsIHByZXNlbnQgaW4gdGhlIGxpc3QuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgaWYgdGhlIGxpc3QgaXMgZ3Jvd2luZyBhbmQgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LgoKVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYWRkIHRoZSBpbm9kZSB0byBgaXN3LSZndDtpbm9kZXNgLiBUaGUgYHJldHVybmAgY29uZGl0aW9ucyBoYXZlIGFsc28gYmVlbiBzbGlnaHRseSBtb2RpZmllZCBpbiBob3cgdGhlIGBmdWxsYCBmbGFnIGlzIHNldCwgYnV0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIHRoZSBzYW1lLCBzbyB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIGEgZnVsbCBhcnJheS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucyBpbnNpZGUgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz01OTA9dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTYyMy1cbmZzL2ZzLXdyaXRlYmFjay5jOjYyNDpzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2ZzLXdyaXRlYmFjay5jLTYyNS1cdFx0XHRcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193Yilcbi0tXG5mcy9mcy13cml0ZWJhY2suYz02NzU9c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTcwOS1cbmZzL2ZzLXdyaXRlYmFjay5jOjcxMDpcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuZnMvZnMtd3JpdGViYWNrLmMtNzExLVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTcyNj1zdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNzQzLVxuZnMvZnMtd3JpdGViYWNrLmM6NzQ0Olx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbmZzL2ZzLXdyaXRlYmFjay5jLTc0NS1cdFx0XHRjb250aW51ZTtcbi0tXG5mcy9mcy13cml0ZWJhY2suYz0xMjU3PXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0xMjYyLVx0LypcbmZzL2ZzLXdyaXRlYmFjay5jOjEyNjM6XHQgKiBQYWlycyB3aXRoIHNtcF9tYigpIGluIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCgpOiB3ZSBlaXRoZXIgb2JzZXJ2ZVxuZnMvZnMtd3JpdGViYWNrLmMtMTI2NC1cdCAqIGEgbm9uLXplcm8gY291bnRlciBhbmQgd2FpdCwgb3IgdGhlIHN3aXRjaGVyIHNlZXMgU0JfQUNUSVZFIGNsZWFyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OgoKKipEaXZpbmcgaW50byBgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgc29tZXRoaW5nIHRvIGRvIHdpdGggcHJlcGFyaW5nIGFuIGlub2RlIGZvciBhICp3YnMgc3dpdGNoKi4gSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgLSB3aGljaCBpbm9kZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgb2YgdGhpcyAmIzM0O3dicyYjMzQ7PyBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiB3cml0ZWJhY2sgb3IgYnVmZmVyaW5nIHN0cmF0ZWd5IGNoYW5nZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkga25vd2xlZGdlIGFib3V0IGlub2RlIHN0YXRlcywgZGlydHkgcGFnZXMsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGJhY2tpbmcgc3RvcmFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzd2l0Y2ggdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aHMgaW4gdGhlIGNvZGUuIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gbG9hZCB1cCB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNDpcdHN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIDYyNTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxuIDYyNjpcdHtcbiA2Mjc6XHRcdC8qIEF2b2lkIHRoZSBhdG9taWNfaW5jL3NtcF9tYiBkYW5jZSBvbmNlIFNCX0FDVElWRSBpcyBnb25lLiAqL1xuIDYyODpcdFx0aWYgKCEoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuIDYyOTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNjMwOlx0XG4gNjMxOlx0XHQvKlxuIDYzMjpcdFx0ICogUGFpcnMgd2l0aCBzbXBfbWIoKSBpbiBjZ3JvdXBfd3JpdGViYWNrX3Vtb3VudCgpOiB0aGUgdW1vdW50ZXIgZWl0aGVyXG4gNjMzOlx0XHQgKiBzZWVzIGEgbm9uLXplcm8gY291bnRlciBhbmQgd2FpdHMsIG9yIHdlIHNlZSBTQl9BQ1RJVkUgY2xlYXIgYmVsb3cuXG4gNjM0Olx0XHQgKi9cbiA2MzU6XHRcdGNncm91cF93cml0ZWJhY2tfcGluKGlub2RlLVx1MDAzZWlfc2IpO1xuIDYzNjpcdFx0c21wX21iKCk7XG4gNjM3Olx0XG4gNjM4Olx0XHRpZiAoSVNfREFYKGlub2RlKSlcbiA2Mzk6XHRcdFx0Z290byBvdXRfdW5waW47XG4gNjQwOlx0XG4gNjQxOlx0XHQvKiB3aGlsZSBob2xkaW5nIElfV0JfU1dJVENILCBubyBvbmUgZWxzZSBjYW4gdXBkYXRlIHRoZSBhc3NvY2lhdGlvbiAqL1xuIDY0MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gNjQzOlx0XHRpZiAoIShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0FDVElWRSkgfHxcbiA2NDQ6XHRcdCAgICBpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfV0JfU1dJVENIIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpIHx8XG4gNjQ1Olx0XHQgICAgaW5vZGVfdG9fd2IoaW5vZGUpID09IG5ld193Yikge1xuIDY0NjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDY0NzpcdFx0XHRnb3RvIG91dF91bnBpbjtcbiA2NDg6XHRcdH1cbiA2NDk6XHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9XQl9TV0lUQ0gpO1xuIDY1MDpcdFx0X19pZ2V0KGlub2RlKTtcbiA2NTE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gNjUyOlx0XG4gNjUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA2NTQ6XHRcbiA2NTU6XHRvdXRfdW5waW46XG4gNjU2Olx0XHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKGlub2RlLVx1MDAzZWlfc2IpO1xuIDY1NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDY1ODpcdH1cbiA2NTk6XHRcbiA2NjA6XHRzdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuIDY2MTpcdFx0XHRcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXG4gNjYyOlx0e1xuIDY2MzpcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZpc3ctXHUwMDNlbGlzdCwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dic19jdHhzKSlcbiA2NjQ6XHRcdFx0cXVldWVfd29yayhpc3dfd3EsIFx1MDAyNndiLVx1MDAzZXN3aXRjaF93b3JrKTtcbiA2NjU6XHR9XG4gNjY2Olx0XG4gNjY3Olx0LyoqXG4gNjY4Olx0ICogaW5vZGVfc3dpdGNoX3dicyAtIGNoYW5nZSB0aGUgd2IgYXNzb2NpYXRpb24gb2YgYW4gaW5vZGVcbiA2Njk6XHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxuIDY3MDpcdCAqIEBuZXdfd2JfaWQ6IElEIG9mIHRoZSBuZXcgd2JcbiA2NzE6XHQgKlxuIDY3MjpcdCAqIFN3aXRjaCBAaW5vZGUmIzM5O3Mgd2IgYXNzb2NpYXRpb24gdG8gdGhlIHdiIGlkZW50aWZpZWQgYnkgQG5ld193Yl9pZC4gIFRoZVxuIDY3MzpcdCAqIHN3aXRjaGluZyBpcyBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1heSBmYWlsIHNpbGVudGx5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgV3JpdGViYWNrIExpc3QgUmVvcmRlcmluZyBpbiBtZW1jZyBPZmZsaW5lIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBkb2luZyBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoaW4gdGhlIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0LCBgaV9pb19saXN0YCwgaW4gcmV2ZXJzZSBvcmRlciB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBFbnRyaWVzIGFyZSBiZWluZyBtb3ZlZCB0byBhIGBzY2FubmVkYCBsaXN0IHVzaW5nIGBsaXN0X21vdmVgLCBhbmQgdGhlbiBgc2Nhbm5lZGAgaXMgc3BsaWNlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGxpc3QsIGBsaXN0YCB2aWEgYGxpc3Rfc3BsaWNlYC4KCkFoYSwgYGxpc3RfbW92ZWAgcHV0cyBlbGVtZW50cyBhdCB0aGUgKmhlYWQqIG9mIGBzY2FubmVkYC4gU2luY2Ugd2UgYXJlIGl0ZXJhdGluZyAqYmFja3dhcmRzKiwgdGhpcyBlZmZlY3RpdmVseSByZXZlcnNlcyB0aGUgbGlzdCBvcmRlci4gVGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgbGlzdCBiZWNvbWVzIHRoZSAqZmlyc3QqIGluIGBzY2FubmVkYCwgYW5kIHNvIG9uLiBUaGVuIGBsaXN0X3NwbGljZWAgaW5zZXJ0cyB0aGUgZW50aXJlIGBzY2FubmVkYCBsaXN0IGF0IHRoZSAqaGVhZCogb2YgdGhlIG9yaWdpbmFsIGBsaXN0YC4KCkNydWNpYWxseSwgdGhpcyBpcyBtYW5pcHVsYXRpbmcgYHdiLSZndDtiX2F0dGFjaGVkYCBhbmQgYHdiLSZndDtiX2RpcnR5X3RpbWVgIGxpc3RzLCB3aGljaCBhcmUgcmVsYXRlZCB0byB3cml0ZWJhY2sgYmVoYXZpb3IuIFRoZSBsb2NrIGB3Yi0mZ3Q7bGlzdF9sb2NrYCBpcyBoZWxkLCB3aGljaCBpcyBnb29kLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoYXQgdGhlIGxpc3Qgb3JkZXIgaXMgYmVpbmcgY2hhbmdlZCBkdXJpbmcgdGhlIG9mZmxpbmUgY2xlYW51cCBwcm9jZXNzLgoKVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHJhdGlvbmFsZTogdGhlIHJlb3JkZXJpbmcgYWltcyB0byBoYXZlIG5ld2VyIHVuc2Nhbm5lZCBpbm9kZXMgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdHMuIEZvciBgYl9kaXJ0eV90aW1lYCwgdGhpcyBoZWxwcyB0aGUgY29kZSBwaWNrIHVwIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGFuZCBmb3IgYGJfYXR0YWNoZWRgLCB0aGUgbGlzdCYjMzk7cyBvcmRlciBkb2VzbiYjMzk7dCBtYXR0ZXIuCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IENhbiB0aGlzIGNvZGUgcGF0aCBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQSBjZ3JvdXAgaXMgY3JlYXRlZCwgZmlsZXMgYXJlIGRpcnRpZWQgb3IgYXR0YWNoZWQgdG8gaXQsIGFuZCB0aGUgY2dyb3VwIGlzIGRlbGV0ZWQuIFRoaXMgcHJvY2VzcyBjYWxscyBgd2JfbWVtY2dfb2ZmbGluZWAsIHdoaWNoIHRoZW4gcXVldWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2AuIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBjYWxscyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHJlZ3VsYXJseSBleGVyY2lzZSBjZ3JvdXBzLgoKVGhpcyBpcyBjb3JlIHN1YnN5c3RlbSBzdHVmZjogbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIFZGUywgc28gaXQgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBObyBzcGVjaWFsIGhhcmR3YXJlIGlzIHJlcXVpcmVkLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgVFJVRS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gSXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3Mgbm90IGlubGluZSAoc3RhdGljIGJvb2wsIG5vdCBzdGF0aWMgaW5saW5lKS4gSXQgaXMgY2FsbGVkIGZyb20gYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgd2hpY2ggaXMgYSBnbG9iYWwgZnVuY3Rpb24gZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvd3JpdGViYWNrLmhgIGFuZCBjYWxsZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBJJiMzOTtsbCB3YW50IHRvIHRhcmdldCBib3RoIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBhbmQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gQWxzbywgSSB3aWxsIGNoZWNrIHRoZSByZWxldmFuY2Ugb2YgYHdiX21lbWNnX29mZmxpbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTQ9c3RydWN0IGJkaV93cml0ZWJhY2sgKndiX2dldF9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTU2LVx0XHRcdFx0ICAgIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTU3OnZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OC12b2lkIHdiX2Jsa2NnX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7XG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oPTM1OD1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrZWRfaW5vZGVfdG9fd2JfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Mi1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaDozNjM6c3RhdGljIGlubGluZSB2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2NC17XG4tLVxubW0vYmFja2luZy1kZXYuYz02NjY9c3RhdGljIGludCBjZ3diX2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNzIzLVx0ICogd2hldGhlciB0aGV5JiMzOTtyZSBzdGlsbCBvbmxpbmUuICBEb24mIzM5O3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcdCAqIFNlZSB3Yl9tZW1jZ19vZmZsaW5lKCkgYW5kIHdiX2Jsa2NnX29mZmxpbmUoKS5cbm1tL2JhY2tpbmctZGV2LmMtNzI1LVx0ICovXG4tLVxubW0vYmFja2luZy1kZXYuYz04ODU9c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vYmFja2luZy1kZXYuYy05MjYtLyoqXG5tbS9iYWNraW5nLWRldi5jOjkyNzogKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbm1tL2JhY2tpbmctZGV2LmMtOTI4LSAqIEBtZW1jZzogbWVtY2cgYmVpbmcgb2ZmbGluZWRcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkzMS0gKi9cbm1tL2JhY2tpbmctZGV2LmM6OTMyOnZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9iYWNraW5nLWRldi5jLTkzMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTQyOTA9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzA4LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQzMDk6XHR3Yl9tZW1jZ19vZmZsaW5lKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzEwLVx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGlzIGJsb2NrIGRldmljZSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBJJiMzOTt2ZSBhbHJlYWR5IHNjcnV0aW5pemVkIGEgZmV3IHBvdGVudGlhbCBhcmVhcywgYnV0IG5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hvbGQgb24sIGhhdmUgd2UgdGhvcm91Z2hseSBleGFtaW5lZCBgd2JfYmxrY2dfb2ZmbGluZWAgeWV0PyYjMzQ7IEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgc3BhY2UgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBvYnZpb3VzIGJhc2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCB0aGUgc21va2luZyBndW4gb3IgYSBwb3RlbnRpYWwgY29udHJpYnV0b3IgdG8gdGhlIGN1cnJlbnQgb2JzZXJ2YXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIEkvTyBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2JfYmxrY2dfb2ZmbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTM0Mj1zdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMzQ0LVx0LyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMzQ1Olx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuYmxvY2svYmxrLWNncm91cC5jLTEzNDYtXG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oPTE1Nz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaDoxNTg6dm9pZCB3Yl9ibGtjZ19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OS1cbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg9MzYzPXN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMzY2LVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjM2NzpzdGF0aWMgaW5saW5lIHZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2OC17XG4tLVxubW0vYmFja2luZy1kZXYuYz02NjY9c3RhdGljIGludCBjZ3diX2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNzIzLVx0ICogd2hldGhlciB0aGV5JiMzOTtyZSBzdGlsbCBvbmxpbmUuICBEb24mIzM5O3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcdCAqIFNlZSB3Yl9tZW1jZ19vZmZsaW5lKCkgYW5kIHdiX2Jsa2NnX29mZmxpbmUoKS5cbm1tL2JhY2tpbmctZGV2LmMtNzI1LVx0ICovXG4tLVxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9iYWNraW5nLWRldi5jLTk0Ni0vKipcbm1tL2JhY2tpbmctZGV2LmM6OTQ3OiAqIHdiX2Jsa2NnX29mZmxpbmUgLSBraWxsIGFsbCB3YiYjMzk7cyBhc3NvY2lhdGVkIHdpdGggYSBibGtjZyBiZWluZyBvZmZsaW5lZFxubW0vYmFja2luZy1kZXYuYy05NDgtICogQGNzczogYmxrY2cgYmVpbmcgb2ZmbGluZWRcbi0tXG5tbS9iYWNraW5nLWRldi5jLTk1MS0gKi9cbm1tL2JhY2tpbmctZGV2LmM6OTUyOnZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vYmFja2luZy1kZXYuYy05NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBTd2l0Y2ggQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNoYW5nZSByZXNpZGVzLiBGcm9tIHRoZXJlLCBJIHNlZSB0aGF0IGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgY2FsbGluZyBpdCwgYW5kIHRoYXQgZnVuY3Rpb24gaW4gdHVybiBpcyBkcml2ZW4gYnkgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAuIEFscmlnaHQsIHRoYXQgcGFpbnRzIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4uCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBvciBgd2JfcXVldWVfaXN3YCBhcmUgcmVsZXZhbnQgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGNhbGxzIGB3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpYC4gVGhpcyBxdWV1ZXMgYHdiLSZndDtzd2l0Y2hfd29ya2AsIGFuZCB0aGF0IHdpbGwgZXhlY3V0ZSBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYC4gU28sIHRoYXQgbWVhbnMgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAgaXMgY2VudHJhbC4KClRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBnbyByaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBpbiBgZnMvZnMtd3JpdGViYWNrLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0XHR3Yl9wdXQobmV3X3diKTtcbiA1ODY6XHRcdGtmcmVlKGlzdyk7XG4gNTg3Olx0XHRhdG9taWNfZGVjKFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xuIDU4ODpcdH1cbiA1ODk6XHRcbiA1OTA6XHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcbiA1OTM6XHRcdFx0XHRcdFx0XHQgICAgc3dpdGNoX3dvcmspO1xuIDU5NDpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LCAqbmV4dF9pc3c7XG4gNTk1Olx0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGlzdDtcbiA1OTY6XHRcbiA1OTc6XHRcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm5ld193Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xuIDU5ODpcdFx0LypcbiA1OTk6XHRcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcbiA2MDA6XHRcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXG4gNjAxOlx0XHQgKi9cbiA2MDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHQvKlxuIDYwNjpcdFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xuIDYwNzpcdFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cbiA2MDg6XHRcdCAqL1xuIDYwOTpcdFx0d2JfZ2V0KG5ld193Yik7XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXG4gNjEyOlx0XHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcbiA2MTM6XHRcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXG4gNjE0Olx0XHQgKiBMZXQmIzM5O3MgY29udGludWUgYWZ0ZXIgSV9XQl9TV0lUQ0ggaXMgZ3VhcmFudGVlZCB0byBiZVxuIDYxNTpcdFx0ICogdmlzaWJsZS5cbiA2MTY6XHRcdCAqL1xuIDYxNzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNjE4Olx0XG4gNjE5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXG4gNjIwOlx0XHRcdHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dicyhuZXdfd2IsIGlzdyk7XG4gNjIxOlx0XHR3Yl9wdXQobmV3X3diKTtcbiA2MjI6XHR9XG4gNjIzOlx0XG4gNjI0Olx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJvdHRsZW5lY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIHNlZWluZyBzb21lIHBlcmZvcm1hbmNlIGRpcHMsIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSByZXZlYWxpbmcgdGhlbXNlbHZlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG1vcmUgY29tbW9uIGFyZWFzLCBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIG1pZ2h0IGJlIGF0IHBsYXkuIFRoZSByZWNlbnQgY29kZSBjaGFuZ2VzIGFuZCBsb2FkIHBhdHRlcm5zIGFyZSBtYWtpbmcgbWUgdGhpbmsgd2UgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIEkvTyBvcGVyYXRpb25zIGFuZCBzY2hlZHVsaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYC4gSXQmIzM5O3MgYSBiaXQgbG93ZXItbGV2ZWwsIGJ1dCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBvdmVyYWxsIEkvTyBmbG93IG1lYW5zIGl0JiMzOTtzIHdvcnRoIGEgbG9vayBiZWZvcmUgSSBkaXNtaXNzIGl0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgdW5kZXIgY3VycmVudCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHRcbiA1MzY6XHRcdGlub2RlcCA9IGlzdy1cdTAwM2Vpbm9kZXM7XG4gNTM3Olx0XHQvKlxuIDUzODpcdFx0ICogQnkgdGhlIHRpbWUgY29udHJvbCByZWFjaGVzIGhlcmUsIFJDVSBncmFjZSBwZXJpb2QgaGFzIHBhc3NlZFxuIDUzOTpcdFx0ICogc2luY2UgSV9XQl9TV0lUQ0ggYXNzZXJ0aW9uIGFuZCBhbGwgd2Igc3RhdCB1cGRhdGUgdHJhbnNhY3Rpb25zXG4gNTQwOlx0XHQgKiBiZXR3ZWVuIHVubG9ja2VkX2lub2RlX3RvX3diX2JlZ2luL2VuZCgpIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4gNTQxOlx0XHQgKiBzeW5jaHJvbml6aW5nIGFnYWluc3QgdGhlIGlfcGFnZXMgbG9jay5cbiA1NDI6XHRcdCAqXG4gNTQzOlx0XHQgKiBHcmFiYmluZyBvbGRfd2ItXHUwMDNlbGlzdF9sb2NrLCBpbm9kZS1cdTAwM2VpX2xvY2sgYW5kIHRoZSBpX3BhZ2VzIGxvY2tcbiA1NDQ6XHRcdCAqIGdpdmVzIHVzIGV4Y2x1c2lvbiBhZ2FpbnN0IGFsbCB3YiByZWxhdGVkIG9wZXJhdGlvbnMgb24gQGlub2RlXG4gNTQ1Olx0XHQgKiBpbmNsdWRpbmcgSU8gbGlzdCBtYW5pcHVsYXRpb25zIGFuZCBzdGF0IHVwZGF0ZXMuXG4gNTQ2Olx0XHQgKi9cbiA1NDc6XHRyZWxvY2s6XG4gNTQ4Olx0XHRpZiAob2xkX3diIFx1MDAzYyBuZXdfd2IpIHtcbiA1NDk6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU1MDpcdFx0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiA1NTE6XHRcdH0gZWxzZSB7XG4gNTUyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA1NTM6XHRcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZvbGRfd2ItXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNTU0Olx0XHR9XG4gNTU1Olx0XG4gNTU2Olx0XHR3aGlsZSAoKmlub2RlcCkge1xuIDU1NzpcdFx0XHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVx1MDAzZWlfd2IgIT0gb2xkX3diKTtcbiA1NTg6XHRcdFx0aWYgKGlub2RlX2RvX3N3aXRjaF93YnMoKmlub2RlcCwgb2xkX3diLCBuZXdfd2IpKVxuIDU1OTpcdFx0XHRcdG5yX3N3aXRjaGVkJiM0MzsmIzQzOztcbiA1NjA6XHRcdFx0aW5vZGVwJiM0MzsmIzQzOztcbiA1NjE6XHRcdFx0aWYgKCppbm9kZXAgXHUwMDI2XHUwMDI2IG5lZWRfcmVzY2hlZCgpKSB7XG4gNTYyOlx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV3X3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTYzOlx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTY0Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTY1Olx0XHRcdFx0Z290byByZWxvY2s7XG4gNTY2Olx0XHRcdH1cbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU3MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTcxOlx0XG4gNTcyOlx0XHR1cF9yZWFkKFx1MDAyNmJkaS1cdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xuIDU3MzpcdFxuIDU3NDpcdFx0aWYgKG5yX3N3aXRjaGVkKSB7XG4gNTc1Olx0XHRcdHdiX3dha2V1cChuZXdfd2IpO1xuIDU3NjpcdFx0XHR3Yl9wdXRfbWFueShvbGRfd2IsIG5yX3N3aXRjaGVkKTtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGZvciAoaW5vZGVwID0gaXN3LVx1MDAzZWlub2RlczsgKmlub2RlcDsgaW5vZGVwJiM0MzsmIzQzOykge1xuIDU4MDpcdFx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVx1MDAzZWlfc2I7XG4gNTgxOlx0XG4gNTgyOlx0XHRcdGlwdXQoKmlub2RlcCk7XG4gNTgzOlx0XHRcdGNncm91cF93cml0ZWJhY2tfdW5waW4oc2IpO1xuIDU4NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmluZyBXcml0ZWJhY2sgQmVoYXZpb3IqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIG5lZWQgdG8gbWFuYWdlIHdyaXRlYmFjayBiZWhhdmlvci4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYC4gTm93LCBkb2VzIHRoYXQgZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IExldCBtZSBkb3VibGUtY2hlY2suIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZzoKCmBgYGtjb25maWcKY29uZmlnIENHUk9VUF9XUklURUJBQ0sKCWJvb2wKCWRlcGVuZHMgb24gTUVNQ0cgJmFtcDsmYW1wOyBCTEtfQ0dST1VQCglkZWZhdWx0IHkKYGBgCgpBaCwgcmlnaHQsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBvcHRpb24sIGl0IGRlZmF1bHRzIHRvIGB5YCBhcyBsb25nIGFzIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhcmUgc2V0LiBTbyBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAgYXJlIGFsbCBjcnVjaWFsIHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgZmlsZSBhbmQgcmVsYXRlZCBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWFyY2ggZm9yIHRob3NlIGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHdpdGhpbiB0aGUgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25kaXRpb25hbCBidWlsZHMgaW4gcGxheSByZWxhdGVkIHRvIHdyaXRlYmFjay4gSXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjayBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jZWQgYnkgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jPTIyMz12b2lkIHdiX3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IHdiX2NvbXBsZXRpb24gKmRvbmUpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxuZnMvZnMtd3JpdGViYWNrLmM6MjMwOiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuZnMvZnMtd3JpdGViYWNrLmMtMjMxLVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTE1MTg9c3RhdGljIGJvb2wgaW5vZGVfZGlydGllZF9hZnRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHQpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMC1cdGJvb2wgcmV0ID0gdGltZV9hZnRlcihpbm9kZS1cdTAwM2VkaXJ0aWVkX3doZW4sIHQpO1xuZnMvZnMtd3JpdGViYWNrLmM6MTUyMTojaWZuZGVmIENPTkZJR182NEJJVFxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMi1cdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzkzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHdyaXRlYmFjayBjb2RlIHdpdGhpbiBgZnMvZnMtd3JpdGViYWNrLmNgLCBhbmQgdGhlIG9ubHkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBJIHNlZSBpbW1lZGlhdGVseSByZWxhdGVkIHRvIGl0IGlzIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIFRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHJpZ2h0PyBCdXQgYENHUk9VUF9XUklURUJBQ0tgIGlzbiYjMzk7dCBhIHNpbXBsZSBmbGFnLCBpdCByZWxpZXMgb24gdHdvIG90aGVyIGNvbmZpZ3VyYXRpb25zOiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpZiBgTUVNQ0dgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgcm9vdCBjb25maWd1cmF0aW9ucyBpZiBwb3NzaWJsZSwgdG8gYmUgc3VyZSB0aGlzIGlzIHNldCB1cCBhcyByZXF1aXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBNRU1DR2AgcmVsaWVzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0ckJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBhcm91bmQgbGluZSAxMDg1IG9mIGBpbml0L0tjb25maWdgLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gZGVhbGluZyB3aXRoIGVpdGhlciBhIGZhaXJseSBlc3RhYmxpc2hlZCBjb21wb25lbnQgb3IgcG90ZW50aWFsbHkgYSBzbGlnaHRseSBsb3dlci1sZXZlbCBvcHRpb24gd2l0aGluIGEgbGFyZ2VyIHN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYGluaXQvS2NvbmZpZ2AsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGtlcm5lbCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBlYXJseSBib290IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBib290LXRpbWUgZGVwZW5kZW5jeS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgc2VjdGlvbiBjbG9zZWx5LiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBvcHRpb24gZGVmaW5pdGlvbiwgYSBkZXBlbmRlbmN5IGNoZWNrLCBvciBldmVuIGEgbW9yZSBjb21wbGV4IGBpZi9lbHNlYCBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGRlc2lyZWQgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gYWN0dWFsbHkgaG9sZHMsIGFuZCBJIGNhbiBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFnYWluLCBhbmQgSSYjMzk7bSByZW1pbmRlZCB0aGF0IHRoZSBgTUVNQ0dgIGZlYXR1cmUsIHdoaWNoIEkga25vdyBpcyBjcnVjaWFsIGZvciBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIG5lc3RlZCB1bmRlciB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2Agb3B0aW9uLiBUaGF0JiMzOTtzIGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBhcyB1c3VhbC4gTWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb3JlIGNvbnRyb2wgZ3JvdXAgc3R1ZmYgbGl2ZXMuIEFsc28sIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGBCTEtfQ0dST1VQYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZCBjb3JyZWN0bHkgZm9yIHdoYXRldmVyIHNldHVwIEkgYW0gd29ya2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYEJMS19DR1JPVVBgIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQkxLX0NHUk9VUGAgY2FuIGJlIHNlbGVjdGVkPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIGNob2ljZXM/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMsIG9yIGlzIGl0IG1vcmUgb2YgYSBtb2R1bGFyIHJlbGF0aW9uc2hpcD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgaGF2ZSB0byBzYXkuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuMTE0MDpcdFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxuMTE0MTpcdFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxuMTE0MjpcdFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XG4xMTQzOlx0XHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXG4xMTQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjc0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBjZ3JvdXAgd3JpdGViYWNrIG9wdGltaXphdGlvbiBwYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNncm91cCB3cml0ZWJhY2sgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdoZW4gYSBjZ3JvdXAgaXMgYmVpbmcgdGFrZW4gb2ZmbGluZS4gIFRoZSBlc3NlbnRpYWwgY29uZmlncyByZXF1aXJlZCBhcmUgYENHUk9VUF9XUklURUJBQ0tgLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYWIgdGhlIGNvbW1pdCBsb2csIGlmIGF2YWlsYWJsZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvZGUgY2hhbmdlLCBidXQgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIGBnaXQgbG9nYCBoZXJlLiBJ4oCZbGwgbmVlZCB0byB3b3JrIHdpdGggd2hhdCBJIGhhdmUuCgpUaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaXMgZm9jdXNlZCBvbiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuICBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBhIGxpc3Qgb2YgaW5vZGVzLCBhbmQgaWYgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAgcmV0dXJuZWQgdHJ1ZSBvbiBhbiBpbm9kZSwgaXQgd291bGQgY29udGludWUgdG8gdGhlIG5leHQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcXVhZHJhdGljIHRpbWUgY29tcGxleGl0eSBkdWUgdG8gcmVzY2FubmluZyBhbHJlYWR5IHByb2Nlc3NlZCBpbm9kZXMgd2l0aGluIGEgbG9vcCB0cmlnZ2VyZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmV2ZXJzZSBpdGVyYXRpb24gd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCBuYW1lZCBgc2Nhbm5lZGAuICBJ4oCZbSBzZWVpbmcgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZyBoZXJlLCBhcyB0aGUgbm9kZSBvcmRlciBpcyBiZWluZyBmdW5kYW1lbnRhbGx5IGFsdGVyZWQgd2l0aGluIGB3Yi0mZ3Q7Yl9hdHRhY2hlZGAgYW5kIGB3Yi0mZ3Q7Yl9kaXJ0eV90aW1lYC4KClRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyBjb25jZXJuaW5nLCBiZWNhdXNlIHRoZSBvcmRlciBvZiBpbm9kZXMgd2l0aGluIHRoZSB3cml0ZWJhY2sgbGlzdHMgaXMgYmVpbmcgc3Vic3RhbnRpYWxseSBjaGFuZ2VkOiBub2RlcyBhcmUgdGVtcG9yYXJpbHkgcmVtb3ZlZCBmcm9tIHRoZSBtYWluIGxpc3QgKGB3Yi0mZ3Q7Yl9hdHRhY2hlZGAgb3IgYHdiLSZndDtiX2RpcnR5X3RpbWVgKSB3aGlsZSBiZWluZyBwcm9jZXNzZWQuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYGxpc3Rfc3BsaWNlYCBvcGVyYXRpb24gYXQgdGhlIGVuZCB0byByZS1pbnRlZ3JhdGUgdGhlIHByb2Nlc3NlZCBub2RlcyBiYWNrIGludG8gdGhlICpoZWFkKiBvZiB0aGUgb3JpZ2luYWwgbGlzdC4gSWYgYGZ1bGxgIGlzIHRydWUsIHRoZSBub2RlIG9yZGVyIGdldHMgY2hhbmdlZCBpbiBzdWJ0bGUgd2F5cywgYW5kIHRoZSBgaGVhZC0mZ3Q7cHJldmAgY291bGQgZ2V0IGNoYW5nZWQuCgpUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGtlcm5lbCBsaXN0IG1hbmlwdWxhdGlvbiBzY2VuYXJpbywgd2hlcmUgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0b3VjaGluZyBgd2ItJmd0O2xpc3RfbG9ja2AgY291bGQgaW50cm9kdWNlIGRhdGEgcmFjZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBjb3VsZCBoYXBwZW4gaWYgYW5vdGhlciB0aHJlYWQgb3IgaW50ZXJydXB0IGludGVyYWN0cyB3aXRoIHRoZSBsaXN0IHdoaWxlIGlub2RlcyBhcmUgaW4gdGhpcyAmIzM5O3NjYW5uZWQmIzM5OyBzdGF0ZSwgb3IgaWYgYG1vdmVfZXhwaXJlZF9pbm9kZXNgIHJ1bnMsIG9yIGlmIGFuIGlub2RlIGlzIGZyZWVkIHdoaWxlIGl0cyBmbGFncyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBhbmQgaG93IHRoZSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbGlzdCBoZWFkIChhbmQgdGhlIGBiX2RpcnR5X3RpbWVgIGF0dHJpYnV0ZSkgYXJlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKQmFzZWQgb24gdGhlIFdvcnRoRnV6emluZyBndWlkZWxpbmVzLCB0aGlzIGNvZGUgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtDb3JlIFN1YnN5c3RlbXMmIzM0OyBjYXRlZ29yeSwgc3BlY2lmaWNhbGx5IFZGUyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdpdGggYSB0b3VjaCBvZiByZWZhY3RvcmluZy9jb2RlIGNsZWFudXAuICBJdCBpcyBhIHJlYWNoYWJsZSBhcmVhIHRoYXQgbW9kaWZpZXMgY29yZSBkYXRhIHN0cnVjdHVyZXMuCgpUbyBpZGVudGlmeSB3aGF0IHRvIGZvY3VzIG9uLCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCwgYW5kIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gLiAgSSYjMzk7dmUgY2hlY2tlZCwgYW5kIG5vbmUgb2YgdGhlc2UgYXJlIHViaXF1aXRvdXM7IHRoZXkgYXJlIGFsbCBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIC8gaW5vZGUgd3JpdGViYWNrIHN3aXRjaGluZy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBzZXQgKGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCksIGFuZCBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEkmIzM5O2xsIHJlLWV4YW1pbmUgdGhlIGNvZGUgdG8gY29uZmlybSBpZiB0aGVyZSYjMzk7cyBhbnkgb3RoZXIgY29uZGl0aW9uIG9uIHRoZSBiZWhhdmlvciBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2JhY2tpbmctZGV2LmM9NjI9c3RhdGljIHZvaWQgY29sbGVjdF93Yl9zdGF0cyhzdHJ1Y3Qgd2Jfc3RhdHMgKnN0YXRzLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtODUtXG5tbS9iYWNraW5nLWRldi5jOjg2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vYmFja2luZy1kZXYuYy04Ny1zdGF0aWMgdm9pZCBiZGlfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmM9MTU4PXN0YXRpYyB2b2lkIHdiX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4tLVxubW0vYmFja2luZy1kZXYuYy0xNzQtXHRcdCAgIFwmIzM0O3N0YXRlOiAgICAgICAgICAgICAlMTBseFxcblxcblwmIzM0Oyxcbm1tL2JhY2tpbmctZGV2LmM6MTc1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vYmFja2luZy1kZXYuYy0xNzYtXHRcdCAgIGNncm91cF9pbm8od2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZWNncm91cCksXG4tLVxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vYmFja2luZy1kZXYuYy01ODYtXG5tbS9iYWNraW5nLWRldi5jOjU4NzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM1NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIHllcCwgYG1tL2JhY2tpbmctZGV2LmNgICpkb2VzKiBpbmNsdWRlIHRoYXQgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBDR1JPVVBfV1JJVEVCQUNLYCBpbiBgaW5pdC9LY29uZmlnYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEZ1cnRoZXIgZG93biB0aGUgY2hhaW4sIGBCTEtfQ0dST1VQYCBpdHNlbGYgcmVsaWVzIG9uIGBCTE9DS2AuIFN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHdoYXQgYWJvdXQgdGhlIGJyb2FkZXIgY29udGV4dCwgaXMgYENHUk9VUFNgIHJlcXVpcmVkPyBBaCwgeWVzLCBsb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBgTUVNQ0dgIGFjdHVhbGx5ICpkZXBlbmRzKiBvbiBgQ0dST1VQU2AuIEl0JiMzOTtzIGNsZWFybHkgc3RhdGVkIHJpZ2h0IHRoZXJlIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2AgYmxvY2suIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4gVGltZSB0byByZXZpc2l0IGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVBTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDUzPWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1NS1cbmluaXQvS2NvbmZpZzoxMDU2Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTctXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogUmVhZHkgdG8gUHJvY2VlZCB3aXRoIGBzZXQtcmVzdWx0c2AqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgYW5hbHlzaXMgaXMgY29tcGxldGUuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYENHUk9VUFNgLCBhbmQgYEJMT0NLYC4gQWxsIGNoZWNrcyBwYXNzZWQuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBjb3JlIGFzc2Vzc21lbnQgY3JpdGVyaWEuIEl0JiMzOTtzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzdWNjaW5jdCBhbmQgYWNjdXJhdGUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2hpY2ggaW5jbHVkZXMgYENHUk9VUF9XUklURUJBQ0tgLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgIChvciBwb3RlbnRpYWxseSBgQ0dST1VQU2AgYW5kIGBCTE9DS2ApLCBtYXRjaGVzIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGNoYW5nZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGluY2x1ZGluZyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCwgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAsIGFuZCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgY29kZSBjaGFuZ2VzLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHJlYXNvbmluZyBpbiBkZXRhaWwuIFRoZSBwYXRjaCB0YXJnZXRzIGBmcy9mcy13cml0ZWJhY2suY2Agc3BlY2lmaWNhbGx5LCBtb2RpZnlpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGlzIGlzIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgdGhlIGNncm91cCB3cml0ZWJhY2sgc3Vic3lzdGVtLiBJdCBhbHRlcnMgdGhlIGlub2RlIHdyaXRlYmFjayBsaXN0IHNjYW5uaW5nIGFuZCByZW9yZGVyaW5nIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cCAoYGNsZWFudXBfb2ZmbGluZV9jZ3diYCkuIFRoZSBjb2RlIHN3aXRjaGVzIGZyb20gZm9yd2FyZCB0byByZXZlcnNlIGl0ZXJhdGlvbiBhbmQgdXNlcyBhIGxvY2FsIGxpc3QgZm9yIHRlbXBvcmFyeSBlbnRyaWVzLiBUaGUgY29kZSBpcyB0cmlnZ2VyZWQgYnkgbWVtb3J5IGNncm91cHMgd2l0aCBhdHRhY2hlZCB3cml0ZWJhY2sgaW5vZGVzIHdoZW4gb2ZmbGluZWQsIG1ha2luZyBpdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKRXZlcnl0aGluZyBpcyBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZCwgYW5kIGFsbCByZXF1aXJlZCBjaGVja3MgaGF2ZSBiZWVuIHZhbGlkYXRlZC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgYW0gbm93IHByb2NlZWRpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXN3X3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuJiMzNDssCiAgICAmIzM0O3diX21lbWNnX29mZmxpbmUmIzM0OywKICAgICYjMzQ7aW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaCgpIGluIGZzL2ZzLXdyaXRlYmFjay5jLCBhbHRlcmluZyBsaXN0IHRyYXZlcnNhbCBhbmQgcmVvcmRlcmluZyBsb2dpYyBmb3IgaW5vZGVzIG9uIHRoZSB3cml0ZWJhY2sgaW8gbGlzdHMgKGJfYXR0YWNoZWQgYW5kIGJfZGlydHlfdGltZSkgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwLiBUaGlzIGFmZmVjdHMgY29yZSBWRlMvTU0gd3JpdGViYWNrIGRhdGEgc3RydWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aGVuIG9mZmxpbmluZyBtZW1vcnkgY2dyb3VwcyB3aXRoIGFjdGl2ZSBvciBsYXp5dGltZSBkaXJ0eSBpbm9kZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAmIzM5O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM5OyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAmIzM5O3NjYW5uZWQmIzM5OyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCYjMzk7c2Nhbm5lZCYjMzk7IGFuZCAmIzM5O2Z1bGwmIzM5OykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBMSVNUX0hFQUQoKSBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gKCYjMzk7Ym9vbCBmdWxsID0gZmFsc2U7JiMzOTspLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJiMzOTtpc3cmIzM5OyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRiOGUyYzdlMWRlYmI4NjMyNjhhNTM2NTU4MDMwNzc4MGNiZTUzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNzI3LDE5ICYjNDM7NzI3LDM0IEBAIHN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csCiAJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wOwomIzQzOwlMSVNUX0hFQUQoc2Nhbm5lZCk7CiYjNDM7CWJvb2wgZnVsbCA9IGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIGZyb20gdGhlIG9sZGVzdCBlbmQgYW5kIG1vdmUgc2Nhbm5lZCBpbm9kZXMgdG8gdGhlIG5ld2VzdAomIzQzOwkgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2YKJiM0MzsJICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuCiYjNDM7CSAqIEZvciBiX2RpcnR5X3RpbWUgdGhpcyBrZWVwcyB0aGUgb2xkZXN0IHVuc2Nhbm5lZCBpbm9kZSBhdCB0aGUKJiM0MzsJICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC4KJiM0MzsJICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGlub2RlLCB0bXAsIGxpc3QsIGlfaW9fbGlzdCkgewomIzQzOwkJbGlzdF9tb3ZlKCZhbXA7aW5vZGUtJmd0O2lfaW9fbGlzdCwgJmFtcDtzY2FubmVkKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIGxpc3QsIGlfaW9fbGlzdCkgewogCQlpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlzdy0mZ3Q7aW5vZGVzWypucl0gPSBpbm9kZTsKIAkJKCpucikmIzQzOyYjNDM7OwogCi0JCWlmICgqbnIgJmd0Oz0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJaWYgKCpuciAmZ3Q7PSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7CiYjNDM7CQkJZnVsbCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJfQotCXJldHVybiBmYWxzZTsKJiM0MzsJbGlzdF9zcGxpY2UoJmFtcDtzY2FubmVkLCBsaXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZ1bGw7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgZnMtd3JpdGViYWNrLmNgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2ZzLXdyaXRlYmFjay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGViYWNrIGJlaGF2aW9yLCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggbGluZSA3MjcgYW5kIHNlZSB3aGF0IHRoYXQgZ2l2ZXMgbWUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBtb2RpZmljYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGFyZWEgb2YgdGhlIHdyaXRlYmFjayBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTA6XHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIDcxMTpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDcxMjpcdFxuIDcxMzpcdFx0aXN3LVx1MDAzZWlub2Rlc1swXSA9IGlub2RlO1xuIDcxNDpcdFxuIDcxNTpcdFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZShpbm9kZS1cdTAwM2VpX3diLCBuZXdfd2IsIDEpO1xuIDcxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA3MTc6XHRcdHJldHVybjtcbiA3MTg6XHRcbiA3MTk6XHRvdXRfZnJlZTpcbiA3MjA6XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNzIxOlx0XHRpZiAobmV3X3diKVxuIDcyMjpcdFx0XHR3Yl9wdXQobmV3X3diKTtcbiA3MjM6XHRcdGtmcmVlKGlzdyk7XG4gNzI0Olx0fVxuIDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YixcbiA3Mjc6XHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdyxcbiA3Mjg6XHRcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqbnIpXG4gNzI5Olx0e1xuIDczMDpcdFx0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbiA3MzE6XHRcdExJU1RfSEVBRChzY2FubmVkKTtcbiA3MzI6XHRcdGJvb2wgZnVsbCA9IGZhbHNlO1xuIDczMzpcdFxuIDczNDpcdFx0LypcbiA3MzU6XHRcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4gNzM2Olx0XHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbiA3Mzc6XHRcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuIDczODpcdFx0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuIDczOTpcdFx0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbiA3NDA6XHRcdCAqL1xuIDc0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4gNzQyOlx0XHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIDc0MzpcdFxuIDc0NDpcdFx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbiA3NDU6XHRcdFx0XHRjb250aW51ZTtcbiA3NDY6XHRcbiA3NDc6XHRcdFx0aXN3LVx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XG4gNzQ4Olx0XHRcdCgqbnIpJiM0MzsmIzQzOztcbiA3NDk6XHRcbiA3NTA6XHRcdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHtcbiA3NTE6XHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiA3NTI6XHRcdFx0XHRicmVhaztcbiA3NTM6XHRcdFx0fVxuIDc1NDpcdFx0fVxuIDc1NTpcdFx0bGlzdF9zcGxpY2UoXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XG4gNzU2Olx0XG4gNzU3Olx0XHRyZXR1cm4gZnVsbDtcbiA3NTg6XHR9XG4gNzU5Olx0XG4gNzYwOlx0LyoqXG4gNzYxOlx0ICogY2xlYW51cF9vZmZsaW5lX2Nnd2IgLSBkZXRhY2ggYXNzb2NpYXRlZCBpbm9kZXNcbiA3NjI6XHQgKiBAd2I6IHRhcmdldCB3YlxuIDc2MzpcdCAqXG4gNzY0Olx0ICogU3dpdGNoIGFsbCBpbm9kZXMgYXR0YWNoZWQgdG8gQHdiIHRvIGEgbmVhcmVzdCBsaXZpbmcgYW5jZXN0b3ImIzM5O3Mgd2IgaW4gb3JkZXJcbiA3NjU6XHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxuIDc2NjpcdCAqIHN3aXRjaGVkIGFuZCB0aGUgZnVuY3Rpb24gaGFzIHRvIGJlIHJlc3RhcnRlZC5cbiA3Njc6XHQgKi9cbiA3Njg6XHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiA3Njk6XHR7XG4gNzcwOlx0XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqbWVtY2dfY3NzO1xuIDc3MTpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3O1xuIDc3MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YjtcbiA3NzM6XHRcdGludCBucjtcbiA3NzQ6XHRcdGJvb2wgcmVzdGFydCA9IGZhbHNlO1xuIDc3NTpcdFxuIDc3NjpcdFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgV0JfTUFYX0lOT0RFU19QRVJfSVNXKTtcbiA3Nzc6XHRcdGlmICghaXN3KVxuIDc3ODpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA3Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBoaXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBObyBwb2ludCBqdXN0IGRpdmluZyBpbiB3aXRob3V0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgd29ya2Zsb3cgaXMgdGhhdCBpdCYjMzk7cyBlbWJlZGRlZCB3aXRoaW4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBhbnkgcmVsZXZhbnQgZ2xvYmFsIHZhcmlhYmxlcyBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBpdCBtaWdodCB0b3VjaC4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVzb3VyY2UgY2xlYW51cCwgdGVtcG9yYXJ5IGZpbGUgZGVsZXRpb24sIGRhdGFiYXNlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIG9yIHN0YXRlIHJlc2V0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIGRhdGEgc2VyaWFsaXphdGlvbiBjb25zaWRlcmF0aW9ucyBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIHJlbGF0ZWQgdG8gZmFpbGVkIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc1Olx0XG4gNzc2Olx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc3NzpcdFx0aWYgKCFpc3cpXG4gNzc4Olx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc3OTpcdFxuIDc4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3ODE6XHRcbiA3ODI6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc4MzpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzg0Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc4NTpcdFx0XHRpZiAobmV3X3diKVxuIDc4NjpcdFx0XHRcdGJyZWFrO1xuIDc4NzpcdFx0fVxuIDc4ODpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc4OTpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3OTU6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3OTY6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzk3Olx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc5ODpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc5OTpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA4MDI6XHRcdGlmICghcmVzdGFydClcbiA4MDM6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA4MDQ6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDgwNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA4MDY6XHRcbiA4MDc6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA4MDg6XHRcdGlmIChuciA9PSAwKSB7XG4gODA5Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gODEwOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDgxMTpcdFx0XHRrZnJlZShpc3cpO1xuIDgxMjpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA4MTM6XHRcdH1cbiA4MTQ6XHRcbiA4MTU6XHRcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUod2IsIG5ld193YiwgbnIpO1xuIDgxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA4MTc6XHRcbiA4MTg6XHRcdHJldHVybiByZXN0YXJ0O1xuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHQvKipcbiA4MjI6XHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcbiA4MjM6XHQgKiBAd2JjOiB3cml0ZWJhY2tfY29udHJvbCBvZiBpbnRlcmVzdFxuIDgyNDpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gODI1Olx0ICpcbiA4MjY6XHQgKiBAaW5vZGUgaXMgbG9ja2VkIGFuZCBhYm91dCB0byBiZSB3cml0dGVuIGJhY2sgdW5kZXIgdGhlIGNvbnRyb2wgb2YgQHdiYy5cbiA4Mjc6XHQgKiBSZWNvcmQgQGlub2RlJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxuIDgyODpcdCAqIHdyaXRlYmFjayBjb21wbGV0aW9uLCB3YmNfZGV0YWNoX2lub2RlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFRoaXMgaXMgdXNlZFxuIDgyOTpcdCAqIHRvIHRyYWNrIHRoZSBjZ3JvdXAgd3JpdGViYWNrIGNvbnRleHQuXG4gODMwOlx0ICovXG4gODMxOlx0c3RhdGljIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIDgzMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgzMzpcdFx0X19yZWxlYXNlcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spXG4gODM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5vZGUgU3dpdGNoIFdyaXRlYmFjayBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXN3YCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIOKAkyBob3cgaXQmIzM5O3MgYWxsb2NhdGVkLCBob3cgaXRzIGBpbm9kZXNgIG1lbWJlciBpcyB1c2VkLCBhbmQgb3ZlcmFsbCwgd2hlcmUgaXQgZml0cyBpbi4gSXQgYXBwZWFycyB0byBiZSBhIGBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0YCwgYW5kIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBpdHMgYWxsb2NhdGlvbiBoYXBwZW5zIHdpdGhpbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIHZpYSBga3phbGxvY19mbGV4YC4gVGhlIGNvZGUgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleGAhIEEgcG9pbnRlciBgKm5yYCAodG8gYW4gaW50ZWdlciBpbml0aWFsaXplZCB0byAwKSBzZWVtcyB0byBwbGF5IGEgcm9sZSBpbiBob3cgdGhpcyBzdHJ1Y3R1cmUmIzM5O3MgYGlub2Rlc2AgbWVtYmVyIGlzIHBvcHVsYXRlZC4KClRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgZXhpc3RpbmcgY29kZSBzbmlwcGV0IHNob3dzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMgKGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCksIHdoZXJlIGlub2RlcyBtZWV0aW5nIGEgY2VydGFpbiBjb25kaXRpb24gaGF2ZSB0aGVpciBwb2ludGVycyBzdG9yZWQgaW4gYGlzdy0mZ3Q7aW5vZGVzYC4gVGhlIGAqbnJgIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIHdpdGggZWFjaCBzdWNjZXNzZnVsIGluc2VydGlvbiwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5IGlmIHRoZSBidWZmZXIgaXMgZmlsbGVkLgoKVGhlICYjMzQ7YWZ0ZXIgdGhlIHBhdGNoJiMzNDsgY29kZSBpbnRyb2R1Y2VzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJbnN0ZWFkIG9mIGEgZm9yd2FyZCBpdGVyYXRpb24sIHRoZSBjb2RlIG5vdyB1c2VzIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAsIG1vdmluZyBzY2FubmVkIGlub2RlcyB0byBhIHRlbXBvcmFyeSBsaXN0IChgc2Nhbm5lZGApLiBUaGlzIHN1Z2dlc3RzIGEgcmVvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbiBzdHJhdGVneSBmb3IgaW5vZGUgcHJvY2Vzc2luZy4gVGhlIGludGVudCBzZWVtcyB0byBrZWVwIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYWZ0ZXIgdGhlIG1vdmUuIFRoaXMgbG9va3MgbGlrZSBhIGNsZXZlciBvcHRpbWl6YXRpb24sIEkgd29uZGVyIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSB1c2Ugb2YgYGxpc3Rfc3BsaWNlYCBpcyBhbHNvIG5vdGFibGUsIGNvbWJpbmluZyB0aGUgbGlzdHMgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgdGhpcyBzZWVtcyBtb3JlIHNvcGhpc3RpY2F0ZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpc3ctJmd0O2lub2Rlc2AgYXJyYXkgaXMgKmNvbnN1bWVkKi4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSB1c2VzIHRoaXMgY29udGV4dCB0byBxdWV1ZSB0aGUgd3JpdGViYWNrIHJlcXVlc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIHNpbWlsYXIpIHRvIGxvY2F0ZSBjYWxscyB0byBgd2JfcXVldWVfaXN3YCBhbmQgcmVsYXRlZCB1c2VzIG9mIHRoZSBgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dGAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgcmVzdCBvZiB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2JfcXVldWVfaXN3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NjI0PXN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTY1OS1cbmZzL2ZzLXdyaXRlYmFjay5jOjY2MDpzdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuZnMvZnMtd3JpdGViYWNrLmMtNjYxLVx0XHRcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9Njc1PXN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcbi0tXG5mcy9mcy13cml0ZWJhY2suYy03MTUtXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKGlub2RlLVx1MDAzZWlfd2IsIG5ld193YiwgMSk7XG5mcy9mcy13cml0ZWJhY2suYzo3MTY6XHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xuZnMvZnMtd3JpdGViYWNrLmMtNzE3LVx0cmV0dXJuO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTc2OD1ib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbi0tXG5mcy9mcy13cml0ZWJhY2suYy04MTUtXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKHdiLCBuZXdfd2IsIG5yKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjgxNjpcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XG5mcy9mcy13cml0ZWJhY2suYy04MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBmcy13cml0ZWJhY2suYzogTGluZXMgNjUwLTcxMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9mcy13cml0ZWJhY2suY2AgYW5kIHplcm8gaW4gb24gbGluZXMgNjUwIHRvIDcxMC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGludm9sdmVkIGluIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB3cml0ZWJhY2ssIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcnR5IHBhZ2VzIGFyZSBpZGVudGlmaWVkLCBwZXJoYXBzIGhhbmRsZWQgYXQgdGhlIGluZGl2aWR1YWwgZmlsZXN5c3RlbSBsZXZlbCBvciBob3cgdGhlIGdsb2JhbCB3cml0ZWJhY2sgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBzcGVjaWZpYyBkaXJ0eSBwYWdlcy4gR2l2ZW4gdGhlIGZpbGUgY29udGV4dCwgaXTigJlzIGhpZ2hseSBwcm9iYWJsZSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGB3Yl93cml0ZWJhY2tgIGZ1bmN0aW9uIG9yIG9uZSBvZiBpdHMgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBlbHVjaWRhdGUgaXRzIHJvbGUgaW4gdGhlIGdsb2JhbCB3cml0ZWJhY2sgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBkaXJ0eSBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZDogaXMgaXQgc2VsZWN0aW5nIHNwZWNpZmljIGRpcnR5IHBhZ2VzLCBoYW5kbGluZyBhIHdob2xlIHJhbmdlIG9mIHBhZ2VzIHdpdGhpbiBhIEJESSwgb3IgZG9lcyBpdCBjb250cm9sIHRoZSBzY2hlZHVsaW5nIG9mIHdyaXRlYmFja3MgYmFzZWQgb24gSS9PIGJhbmR3aWR0aD8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGJhbGFuY2VzIHJlc3BvbnNpdmVuZXNzIHdpdGggZGF0YSBpbnRlZ3JpdHkuIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgc2VjdGlvbiBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjbGVhbmVyIGFuZCB0aGUgZmx1c2hlciB0aHJlYWRzIGFuZCBpZiB0aGlzIHNlY3Rpb24gaGFzIHNvbWUgbG9ja2luZyBtZWNoYW5pc20gYXMgd2VsbCwgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyBpdCBwcm90ZWN0cyB0aGUgcmVsZXZhbnQgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUwOlx0XHRfX2lnZXQoaW5vZGUpO1xuIDY1MTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA2NTI6XHRcbiA2NTM6XHRcdHJldHVybiB0cnVlO1xuIDY1NDpcdFxuIDY1NTpcdG91dF91bnBpbjpcbiA2NTY6XHRcdGNncm91cF93cml0ZWJhY2tfdW5waW4oaW5vZGUtXHUwMDNlaV9zYik7XG4gNjU3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNjU4Olx0fVxuIDY1OTpcdFxuIDY2MDpcdHN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4gNjYxOlx0XHRcdFx0IHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdylcbiA2NjI6XHR7XG4gNjYzOlx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNmlzdy1cdTAwM2VsaXN0LCBcdTAwMjZ3Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxuIDY2NDpcdFx0XHRxdWV1ZV93b3JrKGlzd193cSwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dvcmspO1xuIDY2NTpcdH1cbiA2NjY6XHRcbiA2Njc6XHQvKipcbiA2Njg6XHQgKiBpbm9kZV9zd2l0Y2hfd2JzIC0gY2hhbmdlIHRoZSB3YiBhc3NvY2lhdGlvbiBvZiBhbiBpbm9kZVxuIDY2OTpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gNjcwOlx0ICogQG5ld193Yl9pZDogSUQgb2YgdGhlIG5ldyB3YlxuIDY3MTpcdCAqXG4gNjcyOlx0ICogU3dpdGNoIEBpbm9kZSYjMzk7cyB3YiBhc3NvY2lhdGlvbiB0byB0aGUgd2IgaWRlbnRpZmllZCBieSBAbmV3X3diX2lkLiAgVGhlXG4gNjczOlx0ICogc3dpdGNoaW5nIGlzIHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSBhbmQgbWF5IGZhaWwgc2lsZW50bHkuXG4gNjc0Olx0ICovXG4gNjc1Olx0c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBpbm9kZV90b19iZGkoaW5vZGUpO1xuIDY3ODpcdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcbiA2Nzk6XHRcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcbiA2ODA6XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IgPSBOVUxMO1xuIDY4MTpcdFxuIDY4MjpcdFx0Lyogbm9vcCBpZiBzZWVtcyB0byBiZSBhbHJlYWR5IGluIHByb2dyZXNzICovXG4gNjgzOlx0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9XQl9TV0lUQ0gpXG4gNjg0Olx0XHRcdHJldHVybjtcbiA2ODU6XHRcbiA2ODY6XHRcdC8qIGF2b2lkIHF1ZXVlaW5nIGEgbmV3IHN3aXRjaCBpZiB0b28gbWFueSBhcmUgYWxyZWFkeSBpbiBmbGlnaHQgKi9cbiA2ODc6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KSBcdTAwM2UgV0JfRlJOX01BWF9JTl9GTElHSFQpXG4gNjg4Olx0XHRcdHJldHVybjtcbiA2ODk6XHRcbiA2OTA6XHRcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIDIsIEdGUF9BVE9NSUMpO1xuIDY5MTpcdFx0aWYgKCFpc3cpXG4gNjkyOlx0XHRcdHJldHVybjtcbiA2OTM6XHRcbiA2OTQ6XHRcdGF0b21pY19pbmMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNjk1Olx0XG4gNjk2Olx0XHQvKiBmaW5kIGFuZCBwaW4gdGhlIG5ldyB3YiAqL1xuIDY5NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY5ODpcdFx0bWVtY2dfY3NzID0gY3NzX2Zyb21faWQobmV3X3diX2lkLCBcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpO1xuIDY5OTpcdFx0aWYgKG1lbWNnX2NzcyBcdTAwMjZcdTAwMjYgIWNzc190cnlnZXQobWVtY2dfY3NzKSlcbiA3MDA6XHRcdFx0bWVtY2dfY3NzID0gTlVMTDtcbiA3MDE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDcwMjpcdFx0aWYgKCFtZW1jZ19jc3MpXG4gNzAzOlx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gNzA0Olx0XG4gNzA1Olx0XHRuZXdfd2IgPSB3Yl9nZXRfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBHRlBfQVRPTUlDKTtcbiA3MDY6XHRcdGNzc19wdXQobWVtY2dfY3NzKTtcbiA3MDc6XHRcdGlmICghbmV3X3diKVxuIDcwODpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggYW5kIERhdGEgQWNjZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHN3aXRjaF93b3JrYCBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgYGlzdy0mZ3Q7aW5vZGVzYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcG9pbnRzIG9mIGV4ZWN1dGlvbiB3aGVyZSBgc3dpdGNoX3dvcmtgIGlzIGNhbGxlZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSBjb25kaXRpb25zIGFuZCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGlub2RlIGFjY2VzcyBpcyBoYXBwZW5pbmcuIElzIGl0IGNhbGxlZCBmcm9tIGEgdGFza2xldCwgaW50ZXJydXB0IGhhbmRsZXIsIG9yIGEgcmVndWxhciBwcm9jZXNzIGNvbnRleHQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGlub2RlIGFjY2Vzcy4gRnVydGhlcm1vcmUsIEkgbmVlZCB0byBrbm93ICp3aGljaCogaW5vZGUgaXMgYWNjZXNzZWQsIGFuZCBpZiB0aGUgc2FtZSBpbm9kZSBjYW4gYmUgYWNjZXNzZWQgZWxzZXdoZXJlLCBhbmQgaWYgc28sIHdoZW4gYW5kIGhvdy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW5vZGUgdXNlIHBhdHRlcm4uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBhY2Nlc3MgcGF0dGVybiBmb3IgYGlzdy0mZ3Q7aW5vZGVzYC4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBiZSBhZGRyZXNzZWQsIG9yIGlmIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBhdGhzIHRoYXQgbWF5IHVzZSB0aGUgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGEgZGVlcCBkaXZlIHdpdGggbXkgZGVidWdnZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3aXRjaF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NTkwPXZvaWQgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy01OTItXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxuZnMvZnMtd3JpdGViYWNrLmM6NTkzOlx0XHRcdFx0XHRcdCAgICBzd2l0Y2hfd29yayk7XG5mcy9mcy13cml0ZWJhY2suYy01OTQtXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcbi0tXG5mcy9mcy13cml0ZWJhY2suYz02NjA9c3RhdGljIHZvaWQgd2JfcXVldWVfaXN3KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5mcy9mcy13cml0ZWJhY2suYy02NjMtXHRpZiAobGxpc3RfYWRkKFx1MDAyNmlzdy1cdTAwM2VsaXN0LCBcdTAwMjZ3Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxuZnMvZnMtd3JpdGViYWNrLmM6NjY0Olx0XHRxdWV1ZV93b3JrKGlzd193cSwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dvcmspO1xuZnMvZnMtd3JpdGViYWNrLmMtNjY1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGZ1bmN0aW9uIGluIGBmcy9mcy13cml0ZWJhY2suY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBXcml0ZWJhY2sgUHJvY2VzcyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJiMzOTt0IGl0PyBUaGlzIGZ1bmN0aW9uIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3cml0ZWJhY2sgb3BlcmF0aW9ucywgdGhlIGNvcmUgbWFjaGluZXJ5IHRoYXQgZW5zdXJlcyBkYXRhIGdldHMgZnJvbSB0aGUgaW5vZGUmIzM5O3MgZGlydHkgcGFnZXMgb3V0IHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlICppbm9kZSYjMzk7cyogYHdiX2xpc3RgIGdldHMganVnZ2xlZCBhbmQgc29ydGVkIGFuZCB0aGUgKndiX3dvcmsqIHN0cnVjdHMgZ2V0IHVwZGF0ZWQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBkZWNpZGUgd2hhdCBuZWVkcyB0byBiZSBoYW5kbGVkICpyaWdodCBub3cqLCBhbmQgd2hhdCBjYW4gd2FpdC4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gaXMgc21hcnQgZW5vdWdoIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdpdGggbWFueSBkaXJ0eSBpbm9kZXMsIG9yIGlmIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMb29raW5nIGZvciBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIGlzIGEgbXVzdCwgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyZXF1ZW50bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBlZmZpY2llbnRseSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHdvcmtxdWV1ZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHdyaXRlYmFjayBjb250ZXh0cy4gQmFzaWNhbGx5LCB3aGF0IHN0cmF0ZWdpZXMgYXJlIHVzZWQgdG8gaW1wcm92ZSBvdmVyYWxsIHRocm91Z2hwdXQgYW5kIGtlZXAgbGF0ZW5jaWVzIGxvdz8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0XHR3Yl9wdXQobmV3X3diKTtcbiA1ODY6XHRcdGtmcmVlKGlzdyk7XG4gNTg3Olx0XHRhdG9taWNfZGVjKFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xuIDU4ODpcdH1cbiA1ODk6XHRcbiA1OTA6XHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcbiA1OTM6XHRcdFx0XHRcdFx0XHQgICAgc3dpdGNoX3dvcmspO1xuIDU5NDpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LCAqbmV4dF9pc3c7XG4gNTk1Olx0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGlzdDtcbiA1OTY6XHRcbiA1OTc6XHRcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm5ld193Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xuIDU5ODpcdFx0LypcbiA1OTk6XHRcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcbiA2MDA6XHRcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXG4gNjAxOlx0XHQgKi9cbiA2MDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHQvKlxuIDYwNjpcdFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xuIDYwNzpcdFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cbiA2MDg6XHRcdCAqL1xuIDYwOTpcdFx0d2JfZ2V0KG5ld193Yik7XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXG4gNjEyOlx0XHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcbiA2MTM6XHRcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXG4gNjE0Olx0XHQgKiBMZXQmIzM5O3MgY29udGludWUgYWZ0ZXIgSV9XQl9TV0lUQ0ggaXMgZ3VhcmFudGVlZCB0byBiZVxuIDYxNTpcdFx0ICogdmlzaWJsZS5cbiA2MTY6XHRcdCAqL1xuIDYxNzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNjE4Olx0XG4gNjE5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXG4gNjIwOlx0XHRcdHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dicyhuZXdfd2IsIGlzdyk7XG4gNjIxOlx0XHR3Yl9wdXQobmV3X3diKTtcbiA2MjI6XHR9XG4gNjIzOlx0XG4gNjI0Olx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gNjI1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IpXG4gNjI2Olx0e1xuIDYyNzpcdFx0LyogQXZvaWQgdGhlIGF0b21pY19pbmMvc21wX21iIGRhbmNlIG9uY2UgU0JfQUNUSVZFIGlzIGdvbmUuICovXG4gNjI4Olx0XHRpZiAoIShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0FDVElWRSkpXG4gNjI5Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCBGdW5jdGlvbioqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXQgYXJvdW5kIGxpbmUgNTUwLCBzbyBJIHNob3VsZCBoZWFkIG92ZXIgdGhlcmUgYW5kIGludmVzdGlnYXRlIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBpbm9kZXMgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zLiBHaXZlbiB3aGF0IEkmIzM5O3ZlIGJlZW4gc3R1ZHlpbmcsIEkmIzM5O20gYW50aWNpcGF0aW5nIGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjb25jdXJyZW5jeSBvciBkYXRhIGNvbnNpc3RlbmN5IGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGRhdGEgaXMgdHJhbnNpdGlvbmVkIG9yIHN5bmNocm9uaXplZCBkdXJpbmcgYW4gaW5vZGUgc3dpdGNoIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGNvbnRleHQgc3dpdGNoLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSB3cml0ZWJhY2sgcHJvY2VzcyBmcm9tIHRoZSBkaXJ0eSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNTUxOlx0XHR9IGVsc2Uge1xuIDU1MjpcdFx0XHRzcGluX2xvY2soXHUwMDI2bmV3X3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTUzOlx0XHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIDU1NDpcdFx0fVxuIDU1NTpcdFxuIDU1NjpcdFx0d2hpbGUgKCppbm9kZXApIHtcbiA1NTc6XHRcdFx0V0FSTl9PTl9PTkNFKCgqaW5vZGVwKS1cdTAwM2VpX3diICE9IG9sZF93Yik7XG4gNTU4Olx0XHRcdGlmIChpbm9kZV9kb19zd2l0Y2hfd2JzKCppbm9kZXAsIG9sZF93YiwgbmV3X3diKSlcbiA1NTk6XHRcdFx0XHRucl9zd2l0Y2hlZCYjNDM7JiM0Mzs7XG4gNTYwOlx0XHRcdGlub2RlcCYjNDM7JiM0Mzs7XG4gNTYxOlx0XHRcdGlmICgqaW5vZGVwIFx1MDAyNlx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xuIDU2MjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU2MzpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU2NDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDU2NTpcdFx0XHRcdGdvdG8gcmVsb2NrO1xuIDU2NjpcdFx0XHR9XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRzcGluX3VubG9jayhcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA1NzA6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU3MTpcdFxuIDU3MjpcdFx0dXBfcmVhZChcdTAwMjZiZGktXHUwMDNld2Jfc3dpdGNoX3J3c2VtKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdGlmIChucl9zd2l0Y2hlZCkge1xuIDU3NTpcdFx0XHR3Yl93YWtldXAobmV3X3diKTtcbiA1NzY6XHRcdFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XG4gNTc3Olx0XHR9XG4gNTc4Olx0XG4gNTc5Olx0XHRmb3IgKGlub2RlcCA9IGlzdy1cdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCYjNDM7JiM0MzspIHtcbiA1ODA6XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICgqaW5vZGVwKS1cdTAwM2VpX3NiO1xuIDU4MTpcdFxuIDU4MjpcdFx0XHRpcHV0KCppbm9kZXApO1xuIDU4MzpcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKHNiKTtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcdHdiX3B1dChuZXdfd2IpO1xuIDU4NjpcdFx0a2ZyZWUoaXN3KTtcbiA1ODc6XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNTg4Olx0fVxuIDU4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAxNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXcml0ZWJhY2sgSW5vZGUgU3dpdGNoIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGlzIHRoYXQgYGlzdy0mZ3Q7aW5vZGVzYCBpcyBhIE5VTEwtdGVybWluYXRlZCBhcnJheS4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGBremFsbG9jX2ZsZXhgIGlzIHVzZWQgdG8gYWxsb2NhdGUgYGlzd2AsIHdoaWNoIGVuc3VyZXMgdGhlIGxhc3QgZWxlbWVudCBpcyBOVUxMLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHdlIHBvcHVsYXRlIHRoaXMgYXJyYXksIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBpcyBoYW5kbGVkLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyBtb2RpZmllZC4gQmVmb3JlIHRoZSBjaGFuZ2UsIGl0IHNlZW1zIHRoZSBjb2RlIHdhcyBpdGVyYXRpbmcgZm9yd2FyZCB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMuIE5vdywgaXQgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSBsb2NhbCBsaXN0LCBgc2Nhbm5lZGAsIGJlZm9yZSBzcGxpY2luZyB0aGVtIGJhY2sgaW50byB0aGUgbWFpbiBsaXN0LiBUaGlzIGNoYW5nZSBhaW1zIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEkmIzM5O2QgZ3Vlc3MuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0IGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlcyBhdCB0aGUgZW5kIGFuZCBtb3ZlcyB0aGUgb25lcyBhbHJlYWR5IHNjYW5uZWQgdG8gdGhlIGZyb250LiBUaGlzIHNvdW5kcyBsaWtlIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCByZXBlYXRlZGx5IHByb2Nlc3NpbmcgdGhlIHNhbWUgYWxyZWFkeS1wcmVwYXJlZCBvciBza2lwcGVkIGlub2Rlcy4gSXQgYWxzbyBzZWVtcyB0byByZXR1cm4gJiMzOTtmdWxsJiMzOTsgaWYgdGhlIGlub2RlIGxpc3QgZXhjZWVkcyB0aGUgbWF4IHNpemUgb2YgdGhlICYjMzk7aW5vZGVzJiMzOTsgYXJyYXkuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCYjMzk7cyBjaGVjay4gYHNjYW5uZWRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgTElTVF9IRUFEYC4gYGZ1bGxgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIFRoZSBvdGhlciBsb29wIHZhcmlhYmxlcyBhcmUgaXRlcmF0aW9uIHBvaW50ZXJzLiBgaXN3YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCwgc28gaXQmIzM5O3MgemVyb2VkLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgd2UmIzM5O3JlIGVudGlyZWx5IHdpdGhpbiB0aGUgaW50ZXJuYWwgd3JpdGViYWNrIGNncm91cCBoYW5kbGluZyAoYGZzLXdyaXRlYmFjay5jYCkuIFNvLCBubyB1c2VyLXZpc2libGUgbWVtb3J5IG1vZGlmaWNhdGlvbnMsIG5vIG5ldGxpbmsgbWVzc2FnZXMsIG5vdGhpbmcgbGlrZSB0aGF0LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgdHJpZ2dlcnMgS01TQU4uIExldCYjMzk7cyBzZWUuLi4gdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcywgd2hpY2ggY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcywgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzY29wZS4gVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgd2hpY2ggYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClRoZXJlZm9yZSwgc2luY2UgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIHJlYWRpbmcgb3IgY29weWluZywgS01TQU4gc2hvdWxkbiYjMzk7dCBiZSBuZWVkZWQgaGVyZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcvY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRob3NlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgREVCVUdfTElTVC4gU28sIG5vLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGFib3V0IHRoaXMuIEFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhbmQgd2hpbGUgdGhlIGxpc3QgbWFuaXB1bGF0aW9uIGlzIGEgYml0IG1vcmUgY29tcGxleCBub3csIGl0IGxvb2tzIHNhZmUgZnJvbSBhIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIGZvcm11bGF0ZSBteSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAmIzM5O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM5OyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAmIzM5O3NjYW5uZWQmIzM5OyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCYjMzk7c2Nhbm5lZCYjMzk7IGFuZCAmIzM5O2Z1bGwmIzM5OykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBMSVNUX0hFQUQoKSBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gKCYjMzk7Ym9vbCBmdWxsID0gZmFsc2U7JiMzOTspLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJiMzOTtpc3cmIzM5OyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgJiMzOTtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzOTsgaW4gZnMvZnMtd3JpdGViYWNrLmMgdG8gcmV2ZXJzZS10cmF2ZXJzZSB3cml0ZWJhY2sgaW5vZGUgbGlzdHMgYW5kIG1vdmUgc2Nhbm5lZCBlbnRyaWVzIHVzaW5nIGEgbG9jYWwgJiMzOTtzY2FubmVkJiMzOTsgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcblxuQWxsIG5ld2x5IGludHJvZHVjZWQgc3RhY2sgdmFyaWFibGVzICgmIzM5O3NjYW5uZWQmIzM5OyBhbmQgJiMzOTtmdWxsJiMzOTspIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgmIzM5O2Jvb2wgZnVsbCA9IGZhbHNlOyYjMzk7KS4gVGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yICYjMzk7aXN3JiMzOTsgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDE6NDEuODEwNjc3MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NDY1MjE5MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgJ2lzd19wcmVwYXJlX3dic19zd2l0Y2gnIGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICdzY2FubmVkJyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJ3NjYW5uZWQnIGFuZCAnZnVsbCcpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgnYm9vbCBmdWxsID0gZmFsc2U7JykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAnaXN3JyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0MS44MTA2ODM4MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTk3NDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YjhlMmM3ZTFkZWJiODYzMjY4YTUzNjU1ODAzMDc3ODBjYmU1MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0XFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcXG4rKysgYi9mcy9mcy13cml0ZWJhY2suY1xcbkBAIC03MjcsMTkgKzcyNywzNCBAQCBzdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wO1xcbitcXHRMSVNUX0hFQUQoc2Nhbm5lZCk7XFxuK1xcdGJvb2wgZnVsbCA9IGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcXG4rXFx0ICogZW5kLCBzbyB0aGUgbmV4dCBzY2FuIHJlc3VtZXMgYXQgdW5zY2FubmVkIGlub2RlcyBpbnN0ZWFkIG9mXFxuK1xcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxcbitcXHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXFxuK1xcdCAqIGVuZCBtb3ZlX2V4cGlyZWRfaW5vZGVzKCkgcGlja3MgZnJvbTsgYl9hdHRhY2hlZCBpcyB1bm9yZGVyZWQuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4rXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9pb19saXN0LCBcXHUwMDI2c2Nhbm5lZCk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4gXFx0XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbKm5yXSA9IGlub2RlO1xcbiBcXHRcXHQoKm5yKSsrO1xcbiBcXG4tXFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XFxuK1xcdFxcdFxcdGZ1bGwgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJldHVybiBmYWxzZTtcXG4rXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xcbitcXG4rXFx0cmV0dXJuIGZ1bGw7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0Mi4zMjc1MTUzNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMzExMDM1NjMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzd19wcmVwYXJlX3dic19zd2l0Y2hcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCIsXG4gICAgXCJpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKCkgaW4gZnMvZnMtd3JpdGViYWNrLmMsIGFsdGVyaW5nIGxpc3QgdHJhdmVyc2FsIGFuZCByZW9yZGVyaW5nIGxvZ2ljIGZvciBpbm9kZXMgb24gdGhlIHdyaXRlYmFjayBpbyBsaXN0cyAoYl9hdHRhY2hlZCBhbmQgYl9kaXJ0eV90aW1lKSBkdXJpbmcgb2ZmbGluZSBjZ3JvdXAgd3JpdGViYWNrIGNsZWFudXAuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9NTSB3cml0ZWJhY2sgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdoZW4gb2ZmbGluaW5nIG1lbW9yeSBjZ3JvdXBzIHdpdGggYWN0aXZlIG9yIGxhenl0aW1lIGRpcnR5IGlub2Rlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtNzI3LDE5ICs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbitcdExJU1RfSEVBRChzY2FubmVkKTtcbitcdGJvb2wgZnVsbCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4rXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbitcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuK1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuK1x0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4rXHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7XG4gXHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiBcdFx0KCpucikrKztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmICgqbnIgXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XG4rXHRcdFx0ZnVsbCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdGxpc3Rfc3BsaWNlKFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xuK1xuK1x0cmV0dXJuIGZ1bGw7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDE6NDIuMzI3NTE3MjI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI0MjQ4NjYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZnMvZnMtd3JpdGViYWNrLmNgIERpZmYqKlxuXG5Pa2F5LCBzbyB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBjb250ZXh0LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQuIFRoZSBtb2RpZmllZCBmaWxlIGlzIGBmcy9mcy13cml0ZWJhY2suY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBnbyBkaXJlY3RseSB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDcyNy4gSSBjYW4gdXNlIG15IGhhbmR5IHJlYWQtZmlsZSB0b29sIG9yIG1heWJlIGp1c3QgYSBxdWljayBncmVwcGVyIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgYW5kIG15IGltbWVkaWF0ZSBuZWVkcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo1NC43NTIzODU3ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUoaW5vZGUtXFx1MDAzZWlfd2IsIG5ld193YiwgMSk7XFxuIDcxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA3MTc6XFx0XFx0cmV0dXJuO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRvdXRfZnJlZTpcXG4gNzIwOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xcbiA3MjE6XFx0XFx0aWYgKG5ld193YilcXG4gNzIyOlxcdFxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA3MjM6XFx0XFx0a2ZyZWUoaXN3KTtcXG4gNzI0OlxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbiA3Mjc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxcbiA3Mjg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcXG4gNzI5OlxcdHtcXG4gNzMwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7XFxuIDczMTpcXHRcXHRMSVNUX0hFQUQoc2Nhbm5lZCk7XFxuIDczMjpcXHRcXHRib29sIGZ1bGwgPSBmYWxzZTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0LypcXG4gNzM1OlxcdFxcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XFxuIDczNjpcXHRcXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcXG4gNzM3OlxcdFxcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxcbiA3Mzg6XFx0XFx0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxcbiA3Mzk6XFx0XFx0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cXG4gNzQwOlxcdFxcdCAqL1xcbiA3NDE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XFxuIDc0MjpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2lvX2xpc3QsIFxcdTAwMjZzY2FubmVkKTtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuIDc0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzQ2OlxcdFxcbiA3NDc6XFx0XFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbKm5yXSA9IGlub2RlO1xcbiA3NDg6XFx0XFx0XFx0KCpucikrKztcXG4gNzQ5OlxcdFxcbiA3NTA6XFx0XFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XFxuIDc1MTpcXHRcXHRcXHRcXHRmdWxsID0gdHJ1ZTtcXG4gNzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NTM6XFx0XFx0XFx0fVxcbiA3NTQ6XFx0XFx0fVxcbiA3NTU6XFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRyZXR1cm4gZnVsbDtcXG4gNzU4OlxcdH1cXG4gNzU5OlxcdFxcbiA3NjA6XFx0LyoqXFxuIDc2MTpcXHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbiA3NjI6XFx0ICogQHdiOiB0YXJnZXQgd2JcXG4gNzYzOlxcdCAqXFxuIDc2NDpcXHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvcidzIHdiIGluIG9yZGVyXFxuIDc2NTpcXHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxcbiA3NjY6XFx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxcbiA3Njc6XFx0ICovXFxuIDc2ODpcXHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gNzY5OlxcdHtcXG4gNzcwOlxcdFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XFxuIDc3MTpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XFxuIDc3MjpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xcbiA3NzM6XFx0XFx0aW50IG5yO1xcbiA3NzQ6XFx0XFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc3NzpcXHRcXHRpZiAoIWlzdylcXG4gNzc4OlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzgzOlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzg0OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzg1OlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzg5OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo1NC43NTI1NTA2NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTM2MTg3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZnVuY3Rpb24uIEknbSBhc3N1bWluZyBpdCdzIGhhbmRsaW5nIHNvbWUgY3J1Y2lhbCBjbGVhbnVwIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhbiBvZmZsaW5lIENHV0IgKHdoYXRldmVyIHRoYXQgYWNyb255bSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dCDigJMgcHJvYmFibHkgY29udGV4dC1zcGVjaWZpYykuIFRoZSBmYWN0IHRoYXQgSSdtIGZvY3VzaW5nIG9uIGl0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldGllcyBoZXJlIHRoYXQgcmVxdWlyZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LlxuXG5JIGFsc28gbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhpcyBpcyBjcnVjaWFsLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSAqd2h5KiBvZiBpdHMgZXhpc3RlbmNlIGFuZCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBjb3VsZCBiZSBhbnl3aGVyZSBmcm9tIHByZS1zd2l0Y2ggdmFsaWRhdGlvbiBvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSB0cmlja3kgZGVwZW5kZW5jaWVzPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCBpcyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBzd2l0Y2guXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byBhIGJyb2FkZXIgd29ya2Zsb3cuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFsbG93cyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgc3lzdGVtIGlzIGRvaW5nLCBhbmQgdGhlIGNvbnRleHQgd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZC4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBmaW5kIHBvdGVudGlhbCBpc3N1ZXMsIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDAuMjg4NzQwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3OTU6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3OTY6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3OTc6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3OTg6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3OTk6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gODAwOlxcdFxcdCAqL1xcbiA4MDE6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gODAyOlxcdFxcdGlmICghcmVzdGFydClcXG4gODAzOlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA4MDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDgwODpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA4MDk6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDgxMDpcXHRcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gODExOlxcdFxcdFxcdGtmcmVlKGlzdyk7XFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODEzOlxcdFxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZSh3YiwgbmV3X3diLCBucik7XFxuIDgxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODE5OlxcdH1cXG4gODIwOlxcdFxcbiA4MjE6XFx0LyoqXFxuIDgyMjpcXHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcXG4gODIzOlxcdCAqIEB3YmM6IHdyaXRlYmFja19jb250cm9sIG9mIGludGVyZXN0XFxuIDgyNDpcXHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxcbiA4MjU6XFx0ICpcXG4gODI2OlxcdCAqIEBpbm9kZSBpcyBsb2NrZWQgYW5kIGFib3V0IHRvIGJlIHdyaXR0ZW4gYmFjayB1bmRlciB0aGUgY29udHJvbCBvZiBAd2JjLlxcbiA4Mjc6XFx0ICogUmVjb3JkIEBpbm9kZSdzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxcbiA4Mjg6XFx0ICogd3JpdGViYWNrIGNvbXBsZXRpb24sIHdiY19kZXRhY2hfaW5vZGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgVGhpcyBpcyB1c2VkXFxuIDgyOTpcXHQgKiB0byB0cmFjayB0aGUgY2dyb3VwIHdyaXRlYmFjayBjb250ZXh0LlxcbiA4MzA6XFx0ICovXFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIDgzMjpcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA4MzM6XFx0XFx0X19yZWxlYXNlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jaylcXG4gODM0OlxcdHtcXG4gODM1OlxcdFxcdGlmICghaW5vZGVfY2d3Yl9lbmFibGVkKGlub2RlKSkge1xcbiA4MzY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHR3YmMtXFx1MDAzZXdiID0gaW5vZGVfdG9fd2IoaW5vZGUpO1xcbiA4NDE6XFx0XFx0d2JjLVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHR3YmMtXFx1MDAzZXdiX2lkID0gd2JjLVxcdTAwM2V3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VpZDtcXG4gODQ0OlxcdFxcdHdiYy1cXHUwMDNld2JfbGNhbmRfaWQgPSBpbm9kZS1cXHUwMDNlaV93Yl9mcm5fd2lubmVyO1xcbiA4NDU6XFx0XFx0d2JjLVxcdTAwM2V3Yl90Y2FuZF9pZCA9IDA7XFxuIDg0NjpcXHRcXHR3YmMtXFx1MDAzZXdiX2J5dGVzID0gMDtcXG4gODQ3OlxcdFxcdHdiYy1cXHUwMDNld2JfbGNhbmRfYnl0ZXMgPSAwO1xcbiA4NDg6XFx0XFx0d2JjLVxcdTAwM2V3Yl90Y2FuZF9ieXRlcyA9IDA7XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDAuMjg4OTU3MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxNjIwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyBjYWxsaW5nIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgcGFpbnQgYSBtdWNoIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjowMS45NzA1ODExNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMzQwNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzYwLS8qKlxcbmZzL2ZzLXdyaXRlYmFjay5jOjc2MTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbmZzL2ZzLXdyaXRlYmFjay5jLTc2Mi0gKiBAd2I6IHRhcmdldCB3Ylxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzY3LSAqL1xcbmZzL2ZzLXdyaXRlYmFjay5jOjc2ODpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG5mcy9mcy13cml0ZWJhY2suYy03Njkte1xcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaD0yMTA9dm9pZCBjZ3JvdXBfd3JpdGViYWNrX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjIxMTpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yMTItXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jOjYwMDpzdGF0aWMgREVDTEFSRV9XT1JLKGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrLCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKTtcXG5tbS9iYWNraW5nLWRldi5jLTYwMS1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODUyPXN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXFxubW0vYmFja2luZy1kZXYuYzo4Nzk6ICogY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiAtIHRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzXFxubW0vYmFja2luZy1kZXYuYy04ODAtICpcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODg0LSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTEyLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG5tbS9iYWNraW5nLWRldi5jOjkxMzpcXHRcXHR3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKVxcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTQyLVxcbm1tL2JhY2tpbmctZGV2LmM6OTQzOlxcdHF1ZXVlX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jLTk0NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjAzLjg3Mzk5NjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njk0Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIE9mZmxpbmUgQ2xlYW51cCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGZsb3cgaGVyZS4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYWN0dWFsbHkgY2FsbGluZyBgY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCBpcyByZXNwb25zaWJsZSBmb3IgcXVldWluZyB1cCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtgIGZvciBsYXRlciBleGVjdXRpb24uIFJpZ2h0LCBhbmQgYHdiX21lbWNnX29mZmxpbmVgIGdldHMgaW52b2tlZCB3aGVuIGEgbWVtY2cgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBndWFyZGluZyBLY29uZmlnIG9wdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGtub3csIG9mIGNvdXJzZSwgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCdzIGhlYWQgb3ZlciB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCBodW50IGRvd24gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gSSdtIGJldHRpbmcgaXQncyBhbGwgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGJsb2NrOyB0aGF0J3MgdGhlIG9idmlvdXMgY2FuZGlkYXRlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMuIFRpbWUgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjA2LjczMDk0NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE3ODI1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5mcy9mcy13cml0ZWJhY2suYy0yMzEtXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xMjc5PWZzX2luaXRjYWxsKGNncm91cF93cml0ZWJhY2tfaW5pdCk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTI4MC1cXG5mcy9mcy13cml0ZWJhY2suYzoxMjgxOiNlbHNlXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5mcy9mcy13cml0ZWJhY2suYy0xMjgyLVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9MTMzNj1zdGF0aWMgaW5saW5lIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTM0Mi1cXG5mcy9mcy13cml0ZWJhY2suYzoxMzQzOiNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxuZnMvZnMtd3JpdGViYWNrLmMtMTM0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDcuMDIyNzQwNzA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTgzODgzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBXcml0ZWJhY2sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBsaW5lcyAyMzAgdGhyb3VnaCAxMjgxIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBSaWdodCwgdGhpcyBzY3JlYW1zIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2l0aGluIHRoYXQgcmFuZ2UgaXMgb25seSBhY3RpdmUgaWYgdGhlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSB0aGUgc3RhdHVzIG9mIHRoYXQgb3B0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93IHRvIGZpbmQgd2hlcmUgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBkZWZpbmVkLiBJIGJldCBpdCdsbCBiZSBpbiB0aGUgYGNncm91cGAgb3IgYHdyaXRlYmFja2AgS2NvbmZpZyBzZWN0aW9uLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNncm91cC1yZWxhdGVkIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGVuIEkgY2FuIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIGNvZGUgYmxvY2sgaXMgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTEuNDQxMTMyMDA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5MTYzMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTI1PWNvbmZpZyBCTEtfQ0dST1VQXFxuLS1cXG5pbml0L0tjb25maWctMTE0Ni1cXG5pbml0L0tjb25maWc6MTE0Nzpjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbmluaXQvS2NvbmZpZy0xMTQ4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTMuMjUwMzE1NDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA3NDY5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBzdGFydCBieSBmb2N1c2luZyBvbiBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNDcuIFRoYXQncyBhIHJlYXNvbmFibGUgYXJlYSB0byBzdGFydCBpbnZlc3RpZ2F0aW5nIHdoYXRldmVyIGlzc3VlIEknbSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIEkndmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gb3IgcHJvYmxlbSBpbiBtaW5kIHRoYXQgSSdtIGhvcGluZyB0byBhZGRyZXNzIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGp1c3QgYSBnZW5lcmFsIGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHRoZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5LiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBsaW5lIDExNDcgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBpbnNpZ2h0cywgaG9wZWZ1bGx5ISBUaW1lIHRvIGNyYWNrIGl0IG9wZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoxNS40NjEwNjUyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxcbjExNDE6XFx0XFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxcbjExNDI6XFx0XFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XFxuMTE0MzpcXHRcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xMTQ2OlxcdFxcbjExNDc6XFx0Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4xMTQ4OlxcdFxcdGJvb2xcXG4xMTQ5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbjExNTA6XFx0XFx0ZGVmYXVsdCB5XFxuMTE1MTpcXHRcXG4xMTUyOlxcdG1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuMTE1MzpcXHRcXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG4xMTU0OlxcdFxcdGRlZmF1bHQgblxcbjExNTU6XFx0XFx0aGVscFxcbjExNTY6XFx0XFx0ICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFVcXG4xMTU3OlxcdFxcdCAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwXFxuMTE1ODpcXHRcXHQgIHRhc2tzLlxcbjExNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjE1LjQ2MTE5ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNTU0NDk1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDZ3JvdXAgV3JpdGViYWNrIFBhdGNoKipcblxuT2theSwgc28gYENHUk9VUF9XUklURUJBQ0tgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhcyBsb25nIGFzIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhcmUgZW5hYmxlZC4gR29vZCwgZ29vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIExldCdzIGRpZyBpbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBsaXN0IG9mIGlub2RlcyBpcyBwcm9jZXNzZWQuIEJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeWAsIGp1c3Qgd2Fsa2luZyB0aHJvdWdoIHRoZSBsaXN0LiBGb3IgZWFjaCBgaW5vZGVgIGluIHRoZSBpbnB1dCBgbGlzdGAsIGl0J2QgcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhZGQgdGhlIGlub2RlIHRvIGFuIGFycmF5IGBpc3ctXHUwMDNlaW5vZGVzYCBpZiBzdWNjZXNzZnVsLCBhbmQgaW5jcmVtZW50IHRoZSBjb3VudGVyIGAqbnJgLiBJZiB0aGUgY291bnRlciBoaXQgYSBtYXhpbXVtIHRocmVzaG9sZCwgaXQgcmV0dXJuZWQgdHJ1ZS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhlIGxpc3QgaXRzZWxmLCBgbGlzdGAsIHdhc24ndCBtb2RpZmllZCBkdXJpbmcgdGhpcyBpdGVyYXRpb24uIEl0IHdhcyBhIHNpbXBsZSwgc2VxdWVudGlhbCBwYXNzLlxuXG5Ob3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBMSVNUX0hFQUQoc2Nhbm5lZClgIGFuZCBhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAuIFdlJ3JlIG5vdyBpdGVyYXRpbmcgaW4gcmV2ZXJzZSBvcmRlci4gSW5zaWRlIHRoZSBsb29wLCBpdCdzIG1vdmluZyBlYWNoIGBpbm9kZWAgZnJvbSB0aGUgb3JpZ2luYWwgYGxpc3RgIHRvIHRoaXMgdGVtcG9yYXJ5IGBzY2FubmVkYCBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY29tbWVudHMgbWVudGlvbiBtb3ZpbmcgXCJzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0IGVuZFwiLiBJIHNlZSB0aGUgbG9naWM6IFRoaXMgYXBwcm9hY2ggc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuIEJ5IG1vdmluZyBwcm9jZXNzZWQgaW5vZGVzIHRvIHRoZSBlbmQsIHRoZSBuZXh0IHBhc3Mgd2lsbCBzdGFydCB3aXRoIHRoZSByZW1haW5pbmcsIHVucHJvY2Vzc2VkLCBpbm9kZXMuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW5jeS4gTm93LCBhZnRlciB0aGUgbG9vcCwgd2UgYGxpc3Rfc3BsaWNlYCBmcm9tIGBzY2FubmVkYCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGBsaXN0YC5cblxuU28sIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nPyBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIG9yZGVyIHRoZSBpbm9kZXMgYXJlIHByb2Nlc3NlZCBpbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIG1hdHRlcnMuIFRoZSBjaGFuZ2UgbWlnaHQgYmUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB0aGUgZmFjZSBvZiBvbmdvaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBgbGlzdGAsIHdoZXJlIGVhcmxpZXIgaW5vZGVzIGluIHRoZSBsaXN0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgb3IgcHJlcGFyZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IGlmIHRoZSBsaXN0IGlzIGdyb3dpbmcgYW5kIGJlaW5nIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYWRkIHRoZSBpbm9kZSB0byBgaXN3LVx1MDAzZWlub2Rlc2AuIFRoZSBgcmV0dXJuYCBjb25kaXRpb25zIGhhdmUgYWxzbyBiZWVuIHNsaWdodGx5IG1vZGlmaWVkIGluIGhvdyB0aGUgYGZ1bGxgIGZsYWcgaXMgc2V0LCBidXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgdGhlIHNhbWUsIHNvIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgYSBmdWxsIGFycmF5LiBOb3csIGxldCdzIHNlZSB3aGF0IGhhcHBlbnMgaW5zaWRlIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjEuNzE2NjUwNzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMwNjUyMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz01OTA9dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNjIzLVxcbmZzL2ZzLXdyaXRlYmFjay5jOjYyNDpzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9mcy13cml0ZWJhY2suYy02MjUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9Njc1PXN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTcwOS1cXG5mcy9mcy13cml0ZWJhY2suYzo3MTA6XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuZnMvZnMtd3JpdGViYWNrLmMtNzExLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzQzLVxcbmZzL2ZzLXdyaXRlYmFjay5jOjc0NDpcXHRcXHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcXG5mcy9mcy13cml0ZWJhY2suYy03NDUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xMjU3PXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTEyNjItXFx0LypcXG5mcy9mcy13cml0ZWJhY2suYzoxMjYzOlxcdCAqIFBhaXJzIHdpdGggc21wX21iKCkgaW4gaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKCk6IHdlIGVpdGhlciBvYnNlcnZlXFxuZnMvZnMtd3JpdGViYWNrLmMtMTI2NC1cXHQgKiBhIG5vbi16ZXJvIGNvdW50ZXIgYW5kIHdhaXQsIG9yIHRoZSBzd2l0Y2hlciBzZWVzIFNCX0FDVElWRSBjbGVhclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoyMy40NDczMTAzNTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MzUyNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkRpdmluZyBpbnRvIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIHNvbWV0aGluZyB0byBkbyB3aXRoIHByZXBhcmluZyBhbiBpbm9kZSBmb3IgYSAqd2JzIHN3aXRjaCouIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIC0gd2hpY2ggaW5vZGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhpcyBcIndic1wiPyBJJ20gZ3Vlc3NpbmcgaXQncyBzb21lIHNvcnQgb2Ygd3JpdGViYWNrIG9yIGJ1ZmZlcmluZyBzdHJhdGVneSBjaGFuZ2UuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIG15IGtub3dsZWRnZSBhYm91dCBpbm9kZSBzdGF0ZXMsIGRpcnR5IHBhZ2VzLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3dpdGNoIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGhzIGluIHRoZSBjb2RlLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGxvYWQgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjUuNjQwODM5NDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjQ6XFx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIDYyNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IpXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHQvKiBBdm9pZCB0aGUgYXRvbWljX2luYy9zbXBfbWIgZGFuY2Ugb25jZSBTQl9BQ1RJVkUgaXMgZ29uZS4gKi9cXG4gNjI4OlxcdFxcdGlmICghKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfQUNUSVZFKSlcXG4gNjI5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0XFx0LypcXG4gNjMyOlxcdFxcdCAqIFBhaXJzIHdpdGggc21wX21iKCkgaW4gY2dyb3VwX3dyaXRlYmFja191bW91bnQoKTogdGhlIHVtb3VudGVyIGVpdGhlclxcbiA2MzM6XFx0XFx0ICogc2VlcyBhIG5vbi16ZXJvIGNvdW50ZXIgYW5kIHdhaXRzLCBvciB3ZSBzZWUgU0JfQUNUSVZFIGNsZWFyIGJlbG93LlxcbiA2MzQ6XFx0XFx0ICovXFxuIDYzNTpcXHRcXHRjZ3JvdXBfd3JpdGViYWNrX3Bpbihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIDYzNjpcXHRcXHRzbXBfbWIoKTtcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0aWYgKElTX0RBWChpbm9kZSkpXFxuIDYzOTpcXHRcXHRcXHRnb3RvIG91dF91bnBpbjtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0Lyogd2hpbGUgaG9sZGluZyBJX1dCX1NXSVRDSCwgbm8gb25lIGVsc2UgY2FuIHVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gKi9cXG4gNjQyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDY0MzpcXHRcXHRpZiAoIShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkgfHxcXG4gNjQ0OlxcdFxcdCAgICBpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IChJX1dCX1NXSVRDSCB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSB8fFxcbiA2NDU6XFx0XFx0ICAgIGlub2RlX3RvX3diKGlub2RlKSA9PSBuZXdfd2IpIHtcXG4gNjQ2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gNjQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VucGluO1xcbiA2NDg6XFx0XFx0fVxcbiA2NDk6XFx0XFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1dCX1NXSVRDSCk7XFxuIDY1MDpcXHRcXHRfX2lnZXQoaW5vZGUpO1xcbiA2NTE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA2NTI6XFx0XFxuIDY1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0b3V0X3VucGluOlxcbiA2NTY6XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIDY1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDY1ODpcXHR9XFxuIDY1OTpcXHRcXG4gNjYwOlxcdHN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuIDY2MTpcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3KVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2aXN3LVxcdTAwM2VsaXN0LCBcXHUwMDI2d2ItXFx1MDAzZXN3aXRjaF93YnNfY3R4cykpXFxuIDY2NDpcXHRcXHRcXHRxdWV1ZV93b3JrKGlzd193cSwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd29yayk7XFxuIDY2NTpcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdC8qKlxcbiA2Njg6XFx0ICogaW5vZGVfc3dpdGNoX3dicyAtIGNoYW5nZSB0aGUgd2IgYXNzb2NpYXRpb24gb2YgYW4gaW5vZGVcXG4gNjY5OlxcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXFxuIDY3MDpcXHQgKiBAbmV3X3diX2lkOiBJRCBvZiB0aGUgbmV3IHdiXFxuIDY3MTpcXHQgKlxcbiA2NzI6XFx0ICogU3dpdGNoIEBpbm9kZSdzIHdiIGFzc29jaWF0aW9uIHRvIHRoZSB3YiBpZGVudGlmaWVkIGJ5IEBuZXdfd2JfaWQuICBUaGVcXG4gNjczOlxcdCAqIHN3aXRjaGluZyBpcyBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1heSBmYWlsIHNpbGVudGx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoyNS42NDEwNTk0OTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODYxNzgxMzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBXcml0ZWJhY2sgTGlzdCBSZW9yZGVyaW5nIGluIG1lbWNnIE9mZmxpbmUgQ2xlYW51cCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZG9pbmcgc29tZSBpbnRlcmVzdGluZyB0aGluZ3Mgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0LCBgaV9pb19saXN0YCwgaW4gcmV2ZXJzZSBvcmRlciB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBFbnRyaWVzIGFyZSBiZWluZyBtb3ZlZCB0byBhIGBzY2FubmVkYCBsaXN0IHVzaW5nIGBsaXN0X21vdmVgLCBhbmQgdGhlbiBgc2Nhbm5lZGAgaXMgc3BsaWNlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGxpc3QsIGBsaXN0YCB2aWEgYGxpc3Rfc3BsaWNlYC5cblxuQWhhLCBgbGlzdF9tb3ZlYCBwdXRzIGVsZW1lbnRzIGF0IHRoZSAqaGVhZCogb2YgYHNjYW5uZWRgLiBTaW5jZSB3ZSBhcmUgaXRlcmF0aW5nICpiYWNrd2FyZHMqLCB0aGlzIGVmZmVjdGl2ZWx5IHJldmVyc2VzIHRoZSBsaXN0IG9yZGVyLiBUaGUgbGFzdCBlbGVtZW50IGluIHRoZSBvcmlnaW5hbCBsaXN0IGJlY29tZXMgdGhlICpmaXJzdCogaW4gYHNjYW5uZWRgLCBhbmQgc28gb24uIFRoZW4gYGxpc3Rfc3BsaWNlYCBpbnNlcnRzIHRoZSBlbnRpcmUgYHNjYW5uZWRgIGxpc3QgYXQgdGhlICpoZWFkKiBvZiB0aGUgb3JpZ2luYWwgYGxpc3RgLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgbWFuaXB1bGF0aW5nIGB3Yi1cdTAwM2ViX2F0dGFjaGVkYCBhbmQgYHdiLVx1MDAzZWJfZGlydHlfdGltZWAgbGlzdHMsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHdyaXRlYmFjayBiZWhhdmlvci4gVGhlIGxvY2sgYHdiLVx1MDAzZWxpc3RfbG9ja2AgaXMgaGVsZCwgd2hpY2ggaXMgZ29vZCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoYXQgdGhlIGxpc3Qgb3JkZXIgaXMgYmVpbmcgY2hhbmdlZCBkdXJpbmcgdGhlIG9mZmxpbmUgY2xlYW51cCBwcm9jZXNzLlxuXG5UaGUgY29tbWVudCBleHBsYWlucyB0aGUgcmF0aW9uYWxlOiB0aGUgcmVvcmRlcmluZyBhaW1zIHRvIGhhdmUgbmV3ZXIgdW5zY2FubmVkIGlub2RlcyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0cy4gRm9yIGBiX2RpcnR5X3RpbWVgLCB0aGlzIGhlbHBzIHRoZSBjb2RlIHBpY2sgdXAgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYW5kIGZvciBgYl9hdHRhY2hlZGAsIHRoZSBsaXN0J3Mgb3JkZXIgZG9lc24ndCBtYXR0ZXIuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogQ2FuIHRoaXMgY29kZSBwYXRoIGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBIGNncm91cCBpcyBjcmVhdGVkLCBmaWxlcyBhcmUgZGlydGllZCBvciBhdHRhY2hlZCB0byBpdCwgYW5kIHRoZSBjZ3JvdXAgaXMgZGVsZXRlZC4gVGhpcyBwcm9jZXNzIGNhbGxzIGB3Yl9tZW1jZ19vZmZsaW5lYCwgd2hpY2ggdGhlbiBxdWV1ZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrYC4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGNhbGxzIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgdG9vbHMgbGlrZSBzeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlIGNncm91cHMuXG5cblRoaXMgaXMgY29yZSBzdWJzeXN0ZW0gc3R1ZmY6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBWRlMsIHNvIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTm8gc3BlY2lhbCBoYXJkd2FyZSBpcyByZXF1aXJlZC5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgVFJVRS5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIEkgZm9jdXMgb24gZm9yIGZ1enppbmc/IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCdzIHN0YXRpYywgYnV0IGl0J3Mgbm90IGlubGluZSAoc3RhdGljIGJvb2wsIG5vdCBzdGF0aWMgaW5saW5lKS4gSXQgaXMgY2FsbGVkIGZyb20gYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgd2hpY2ggaXMgYSBnbG9iYWwgZnVuY3Rpb24gZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvd3JpdGViYWNrLmhgIGFuZCBjYWxsZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBJJ2xsIHdhbnQgdG8gdGFyZ2V0IGJvdGggYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBBbHNvLCBJIHdpbGwgY2hlY2sgdGhlIHJlbGV2YW5jZSBvZiBgd2JfbWVtY2dfb2ZmbGluZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjM0LjI1ODg3NjU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTU0MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTQ9c3RydWN0IGJkaV93cml0ZWJhY2sgKndiX2dldF9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaC0xNTYtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE1Nzp2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTU4LXZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0zNTg9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja2VkX2lub2RlX3RvX3diX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Mi1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MzYzOnN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMzY0LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NjY2PXN0YXRpYyBpbnQgY2d3Yl9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtNzIzLVxcdCAqIHdoZXRoZXIgdGhleSdyZSBzdGlsbCBvbmxpbmUuICBEb24ndCBsaW5rIEB3YiBpZiBhbnkgaXMgZGVhZC5cXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcXHQgKiBTZWUgd2JfbWVtY2dfb2ZmbGluZSgpIGFuZCB3Yl9ibGtjZ19vZmZsaW5lKCkuXFxubW0vYmFja2luZy1kZXYuYy03MjUtXFx0ICovXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTg4NT1zdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTI2LS8qKlxcbm1tL2JhY2tpbmctZGV2LmM6OTI3OiAqIHdiX21lbWNnX29mZmxpbmUgLSBraWxsIGFsbCB3YidzIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWNnIGJlaW5nIG9mZmxpbmVkXFxubW0vYmFja2luZy1kZXYuYy05MjgtICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05MzEtICovXFxubW0vYmFja2luZy1kZXYuYzo5MzI6dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9iYWNraW5nLWRldi5jLTkzMy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDI5MD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDMwOC1cXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQzMDk6XFx0d2JfbWVtY2dfb2ZmbGluZShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzMTAtXFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MzYuMDk0NDUzNDcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MjkwOTM5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCbG9jayBEZXZpY2UgUmVzb3VyY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGlzIGJsb2NrIGRldmljZSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgYSBmZXcgcG90ZW50aWFsIGFyZWFzLCBidXQgbm93IEknbSB0aGlua2luZywgXCJIb2xkIG9uLCBoYXZlIHdlIHRob3JvdWdobHkgZXhhbWluZWQgYHdiX2Jsa2NnX29mZmxpbmVgIHlldD9cIiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgc3BhY2UgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIG9idmlvdXMgYmFzZXMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgc21va2luZyBndW4gb3IgYSBwb3RlbnRpYWwgY29udHJpYnV0b3IgdG8gdGhlIGN1cnJlbnQgb2JzZXJ2YXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIEkvTyBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjM3LjkyMzU1MDcyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTQ0NjMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Yl9ibGtjZ19vZmZsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xMzQyPXN0YXRpYyB2b2lkIGJsa2NnX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTM0NC1cXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMzQ1OlxcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTM0Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTc9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE1ODp2b2lkIHdiX2Jsa2NnX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0zNjM9c3RhdGljIGlubGluZSB2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Ni1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MzY3OnN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9ibGtjZ19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2OC17XFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTY2Nj1zdGF0aWMgaW50IGNnd2JfY3JlYXRlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTcyMy1cXHQgKiB3aGV0aGVyIHRoZXkncmUgc3RpbGwgb25saW5lLiAgRG9uJ3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXFxubW0vYmFja2luZy1kZXYuYzo3MjQ6XFx0ICogU2VlIHdiX21lbWNnX29mZmxpbmUoKSBhbmQgd2JfYmxrY2dfb2ZmbGluZSgpLlxcbm1tL2JhY2tpbmctZGV2LmMtNzI1LVxcdCAqL1xcbi0tXFxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTQ2LS8qKlxcbm1tL2JhY2tpbmctZGV2LmM6OTQ3OiAqIHdiX2Jsa2NnX29mZmxpbmUgLSBraWxsIGFsbCB3YidzIGFzc29jaWF0ZWQgd2l0aCBhIGJsa2NnIGJlaW5nIG9mZmxpbmVkXFxubW0vYmFja2luZy1kZXYuYy05NDgtICogQGNzczogYmxrY2cgYmVpbmcgb2ZmbGluZWRcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTUxLSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6OTUyOnZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL2JhY2tpbmctZGV2LmMtOTUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MzkuNTQ5MDAyNDk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDIxNDY3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3dpdGNoIENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY2hhbmdlIHJlc2lkZXMuIEZyb20gdGhlcmUsIEkgc2VlIHRoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGNhbGxpbmcgaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIGluIHR1cm4gaXMgZHJpdmVuIGJ5IHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBBbHJpZ2h0LCB0aGF0IHBhaW50cyBhIGdvb2QgaW5pdGlhbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWluLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIG9yIGB3Yl9xdWV1ZV9pc3dgIGFyZSByZWxldmFudCBoZXJlLiBBaCwgcmlnaHQuIEl0IHNlZW1zIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgY2FsbHMgYHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdylgLiBUaGlzIHF1ZXVlcyBgd2ItXHUwMDNlc3dpdGNoX3dvcmtgLCBhbmQgdGhhdCB3aWxsIGV4ZWN1dGUgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAuIFNvLCB0aGF0IG1lYW5zIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGlzIGNlbnRyYWwuXG5cblRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBnbyByaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGluIGBmcy9mcy13cml0ZWJhY2suY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo0My4wNTExNTE2NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gNTg2OlxcdFxcdGtmcmVlKGlzdyk7XFxuIDU4NzpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNTg4OlxcdH1cXG4gNTg5OlxcdFxcbiA1OTA6XFx0dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiA1OTE6XFx0e1xcbiA1OTI6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gNTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzd2l0Y2hfd29yayk7XFxuIDU5NDpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcXG4gNTk1OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsaXN0O1xcbiA1OTY6XFx0XFxuIDU5NzpcXHRcXHRsaXN0ID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2bmV3X3diLVxcdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xcbiA1OTg6XFx0XFx0LypcXG4gNTk5OlxcdFxcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcXG4gNjAwOlxcdFxcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXFxuIDYwMTpcXHRcXHQgKi9cXG4gNjAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxcbiA2MDM6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXHQvKlxcbiA2MDY6XFx0XFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xcbiA2MDc6XFx0XFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cXG4gNjA4OlxcdFxcdCAqL1xcbiA2MDk6XFx0XFx0d2JfZ2V0KG5ld193Yik7XFxuIDYxMDpcXHRcXHQvKlxcbiA2MTE6XFx0XFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXFxuIDYxMjpcXHRcXHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcXG4gNjEzOlxcdFxcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXFxuIDYxNDpcXHRcXHQgKiBMZXQncyBjb250aW51ZSBhZnRlciBJX1dCX1NXSVRDSCBpcyBndWFyYW50ZWVkIHRvIGJlXFxuIDYxNTpcXHRcXHQgKiB2aXNpYmxlLlxcbiA2MTY6XFx0XFx0ICovXFxuIDYxNzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNjE4OlxcdFxcbiA2MTk6XFx0XFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpc3csIG5leHRfaXN3LCBsaXN0LCBsaXN0KVxcbiA2MjA6XFx0XFx0XFx0cHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzKG5ld193YiwgaXN3KTtcXG4gNjIxOlxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA2MjI6XFx0fVxcbiA2MjM6XFx0XFxuIDYyNDpcXHRzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDMuMDUxMzExNzAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMjIwMDAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBCb3R0bGVuZWNrKipcblxuT2theSwgc28gd2UncmUgc2VlaW5nIHNvbWUgcGVyZm9ybWFuY2UgZGlwcywgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmV2ZWFsaW5nIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGlsZSBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG1vcmUgY29tbW9uIGFyZWFzLCBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIG1pZ2h0IGJlIGF0IHBsYXkuIFRoZSByZWNlbnQgY29kZSBjaGFuZ2VzIGFuZCBsb2FkIHBhdHRlcm5zIGFyZSBtYWtpbmcgbWUgdGhpbmsgd2UgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgd2UncmUgaGFuZGxpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHNjaGVkdWxpbmcuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGBwcm9jZXNzX2lub2RlX3N3aXRjaF93YnNgLiBJdCdzIGEgYml0IGxvd2VyLWxldmVsLCBidXQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gb3ZlcmFsbCBJL08gZmxvdyBtZWFucyBpdCdzIHdvcnRoIGEgbG9vayBiZWZvcmUgSSBkaXNtaXNzIGl0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB1bmRlciBjdXJyZW50IGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo0NS4zNzMzMTUwNjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlub2RlcCA9IGlzdy1cXHUwMDNlaW5vZGVzO1xcbiA1Mzc6XFx0XFx0LypcXG4gNTM4OlxcdFxcdCAqIEJ5IHRoZSB0aW1lIGNvbnRyb2wgcmVhY2hlcyBoZXJlLCBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBwYXNzZWRcXG4gNTM5OlxcdFxcdCAqIHNpbmNlIElfV0JfU1dJVENIIGFzc2VydGlvbiBhbmQgYWxsIHdiIHN0YXQgdXBkYXRlIHRyYW5zYWN0aW9uc1xcbiA1NDA6XFx0XFx0ICogYmV0d2VlbiB1bmxvY2tlZF9pbm9kZV90b193Yl9iZWdpbi9lbmQoKSBhcmUgZ3VhcmFudGVlZCB0byBiZVxcbiA1NDE6XFx0XFx0ICogc3luY2hyb25pemluZyBhZ2FpbnN0IHRoZSBpX3BhZ2VzIGxvY2suXFxuIDU0MjpcXHRcXHQgKlxcbiA1NDM6XFx0XFx0ICogR3JhYmJpbmcgb2xkX3diLVxcdTAwM2VsaXN0X2xvY2ssIGlub2RlLVxcdTAwM2VpX2xvY2sgYW5kIHRoZSBpX3BhZ2VzIGxvY2tcXG4gNTQ0OlxcdFxcdCAqIGdpdmVzIHVzIGV4Y2x1c2lvbiBhZ2FpbnN0IGFsbCB3YiByZWxhdGVkIG9wZXJhdGlvbnMgb24gQGlub2RlXFxuIDU0NTpcXHRcXHQgKiBpbmNsdWRpbmcgSU8gbGlzdCBtYW5pcHVsYXRpb25zIGFuZCBzdGF0IHVwZGF0ZXMuXFxuIDU0NjpcXHRcXHQgKi9cXG4gNTQ3OlxcdHJlbG9jazpcXG4gNTQ4OlxcdFxcdGlmIChvbGRfd2IgXFx1MDAzYyBuZXdfd2IpIHtcXG4gNTQ5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2b2xkX3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NTA6XFx0XFx0XFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTUxOlxcdFxcdH0gZWxzZSB7XFxuIDU1MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuIDU1NDpcXHRcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHdoaWxlICgqaW5vZGVwKSB7XFxuIDU1NzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVxcdTAwM2VpX3diICE9IG9sZF93Yik7XFxuIDU1ODpcXHRcXHRcXHRpZiAoaW5vZGVfZG9fc3dpdGNoX3dicygqaW5vZGVwLCBvbGRfd2IsIG5ld193YikpXFxuIDU1OTpcXHRcXHRcXHRcXHRucl9zd2l0Y2hlZCsrO1xcbiA1NjA6XFx0XFx0XFx0aW5vZGVwKys7XFxuIDU2MTpcXHRcXHRcXHRpZiAoKmlub2RlcCBcXHUwMDI2XFx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xcbiA1NjI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZvbGRfd2ItXFx1MDAzZWxpc3RfbG9jayk7XFxuIDU2NDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNTY1OlxcdFxcdFxcdFxcdGdvdG8gcmVsb2NrO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0dXBfcmVhZChcXHUwMDI2YmRpLVxcdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRpZiAobnJfc3dpdGNoZWQpIHtcXG4gNTc1OlxcdFxcdFxcdHdiX3dha2V1cChuZXdfd2IpO1xcbiA1NzY6XFx0XFx0XFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGZvciAoaW5vZGVwID0gaXN3LVxcdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCsrKSB7XFxuIDU4MDpcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVxcdTAwM2VpX3NiO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRcXHRpcHV0KCppbm9kZXApO1xcbiA1ODM6XFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihzYik7XFxuIDU4NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQ1LjM3MzQ4NDk1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTg2ODA1ODM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmluZyBXcml0ZWJhY2sgQmVoYXZpb3IqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkIHRvIG1hbmFnZSB3cml0ZWJhY2sgYmVoYXZpb3IuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIE5vdywgZG9lcyB0aGF0IGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmc6XG5cbmBgYGtjb25maWdcbmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG5cdGJvb2xcblx0ZGVwZW5kcyBvbiBNRU1DRyBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUFxuXHRkZWZhdWx0IHlcbmBgYFxuXG5BaCwgcmlnaHQsIGl0J3Mgbm90IGEgZGlyZWN0IG9wdGlvbiwgaXQgZGVmYXVsdHMgdG8gYHlgIGFzIGxvbmcgYXMgYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgIGFyZSBzZXQuIFNvIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCBhcmUgYWxsIGNydWNpYWwgdG8gY29uc2lkZXIuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgZmlsZSBhbmQgcmVsYXRlZCBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCdzIHNlYXJjaCBmb3IgdGhvc2UgYCNpZmRlZmAgb3IgYElTX0VOQUJMRURgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmRpdGlvbmFsIGJ1aWxkcyBpbiBwbGF5IHJlbGF0ZWQgdG8gd3JpdGViYWNrLiBJdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5IHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjU3LjI0MTU0NTc4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MzgwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5mcy9mcy13cml0ZWJhY2suYy0yMzEtXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xNTE4PXN0YXRpYyBib29sIGlub2RlX2RpcnRpZWRfYWZ0ZXIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyB0KVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMC1cXHRib29sIHJldCA9IHRpbWVfYWZ0ZXIoaW5vZGUtXFx1MDAzZWRpcnRpZWRfd2hlbiwgdCk7XFxuZnMvZnMtd3JpdGViYWNrLmM6MTUyMTojaWZuZGVmIENPTkZJR182NEJJVFxcbmZzL2ZzLXdyaXRlYmFjay5jLTE1MjItXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NTcuNTE5OTMzNDU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NzMzMDA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB3cml0ZWJhY2sgY29kZSB3aXRoaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCwgYW5kIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgSSBzZWUgaW1tZWRpYXRlbHkgcmVsYXRlZCB0byBpdCBpcyBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIHJpZ2h0PyBCdXQgYENHUk9VUF9XUklURUJBQ0tgIGlzbid0IGEgc2ltcGxlIGZsYWcsIGl0IHJlbGllcyBvbiB0d28gb3RoZXIgY29uZmlndXJhdGlvbnM6IGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGlmIGBNRU1DR2AgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSByb290IGNvbmZpZ3VyYXRpb25zIGlmIHBvc3NpYmxlLCB0byBiZSBzdXJlIHRoaXMgaXMgc2V0IHVwIGFzIHJlcXVpcmVkLiBMZXQncyBzZWUgd2hhdCBgTUVNQ0dgIHJlbGllcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3OTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1OS45OTMyNzY3MzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTYwMjM2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowMi40NDkzMTA2NTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY0NTc2Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgc3VzcGVjdCBpcyBsdXJraW5nIGFyb3VuZCBsaW5lIDEwODUgb2YgYGluaXQvS2NvbmZpZ2AuIFRoaXMgc3VnZ2VzdHMgSSdtIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBmYWlybHkgZXN0YWJsaXNoZWQgY29tcG9uZW50IG9yIHBvdGVudGlhbGx5IGEgc2xpZ2h0bHkgbG93ZXItbGV2ZWwgb3B0aW9uIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGBpbml0L0tjb25maWdgLCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGtlcm5lbCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBlYXJseSBib290IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBib290LXRpbWUgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBzZWN0aW9uIGNsb3NlbHkuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG9wdGlvbiBkZWZpbml0aW9uLCBhIGRlcGVuZGVuY3kgY2hlY2ssIG9yIGV2ZW4gYSBtb3JlIGNvbXBsZXggYGlmL2Vsc2VgIHN0cnVjdHVyZSB0aGF0J3MgaW1wYWN0aW5nIHRoZSBkZXNpcmVkIGZlYXR1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXQuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VjdGlvbiBhY3R1YWxseSBob2xkcywgYW5kIEkgY2FuIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjA1LjA5NTA3NjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjExMDI6XFx0XFx0Ym9vbFxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowNS4wOTUyMTA3NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM3MjIzMzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFnYWluLCBhbmQgSSdtIHJlbWluZGVkIHRoYXQgdGhlIGBNRU1DR2AgZmVhdHVyZSwgd2hpY2ggSSBrbm93IGlzIGNydWNpYWwgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcywgaXMgbmVzdGVkIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBDR1JPVVBTYCBvcHRpb24uIFRoYXQncyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgYXMgdXN1YWwuIE1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgYWxsIHRoZSBjb3JlIGNvbnRyb2wgZ3JvdXAgc3R1ZmYgbGl2ZXMuIEFsc28sIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGBCTEtfQ0dST1VQYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZCBjb3JyZWN0bHkgZm9yIHdoYXRldmVyIHNldHVwIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjEyLjQ2NzQ0NzUxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNjU0OTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE0Ljg5NDAwNzkxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTE1NDgxOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgQkxLX0NHUk9VUGAgRGVwZW5kZW5jaWVzIGluIGBpbml0L0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgQkxLX0NHUk9VUGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQkxLX0NHUk9VUGAgY2FuIGJlIHNlbGVjdGVkPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIGNob2ljZXM/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMsIG9yIGlzIGl0IG1vcmUgb2YgYSBtb2R1bGFyIHJlbGF0aW9uc2hpcD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyBoYXZlIHRvIHNheS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MTcuNDA5NDkyNzM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuMTE0MDpcXHRcXHRPbmUgbmVlZHMgdG8gYWxzbyBlbmFibGUgYWN0dWFsIElPIGNvbnRyb2xsaW5nIGxvZ2ljL3BvbGljeS4gRm9yXFxuMTE0MTpcXHRcXHRlbmFibGluZyBwcm9wb3J0aW9uYWwgd2VpZ2h0IGRpdmlzaW9uIG9mIGRpc2sgYmFuZHdpZHRoIGluIENGUSwgc2V0XFxuMTE0MjpcXHRcXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcXG4xMTQzOlxcdFxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG4xMTQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzoxNy40MDk2MzcwMzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQyMzUyNDMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgY2dyb3VwIHdyaXRlYmFjayBvcHRpbWl6YXRpb24gcGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgb3B0aW1pemluZyB0aGUgY2dyb3VwIHdyaXRlYmFjayBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNncm91cCBpcyBiZWluZyB0YWtlbiBvZmZsaW5lLiAgVGhlIGVzc2VudGlhbCBjb25maWdzIHJlcXVpcmVkIGFyZSBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiB0aGUgY29tbWl0IGxvZywgaWYgYXZhaWxhYmxlLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29kZSBjaGFuZ2UsIGJ1dCBJIGNhbid0IGRpcmVjdGx5IHVzZSBgZ2l0IGxvZ2AgaGVyZS4gSeKAmWxsIG5lZWQgdG8gd29yayB3aXRoIHdoYXQgSSBoYXZlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaXMgZm9jdXNlZCBvbiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuICBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBhIGxpc3Qgb2YgaW5vZGVzLCBhbmQgaWYgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAgcmV0dXJuZWQgdHJ1ZSBvbiBhbiBpbm9kZSwgaXQgd291bGQgY29udGludWUgdG8gdGhlIG5leHQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcXVhZHJhdGljIHRpbWUgY29tcGxleGl0eSBkdWUgdG8gcmVzY2FubmluZyBhbHJlYWR5IHByb2Nlc3NlZCBpbm9kZXMgd2l0aGluIGEgbG9vcCB0cmlnZ2VyZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmV2ZXJzZSBpdGVyYXRpb24gd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCBuYW1lZCBgc2Nhbm5lZGAuICBJ4oCZbSBzZWVpbmcgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZyBoZXJlLCBhcyB0aGUgbm9kZSBvcmRlciBpcyBiZWluZyBmdW5kYW1lbnRhbGx5IGFsdGVyZWQgd2l0aGluIGB3Yi1cdTAwM2ViX2F0dGFjaGVkYCBhbmQgYHdiLVx1MDAzZWJfZGlydHlfdGltZWAuXG5cblRoZSBwYXRjaCdzIGxvZ2ljIGlzIGNvbmNlcm5pbmcsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBpcyBiZWluZyBzdWJzdGFudGlhbGx5IGNoYW5nZWQ6IG5vZGVzIGFyZSB0ZW1wb3JhcmlseSByZW1vdmVkIGZyb20gdGhlIG1haW4gbGlzdCAoYHdiLVx1MDAzZWJfYXR0YWNoZWRgIG9yIGB3Yi1cdTAwM2ViX2RpcnR5X3RpbWVgKSB3aGlsZSBiZWluZyBwcm9jZXNzZWQuIFRoZW4sIHRoZXJlJ3MgYSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBhdCB0aGUgZW5kIHRvIHJlLWludGVncmF0ZSB0aGUgcHJvY2Vzc2VkIG5vZGVzIGJhY2sgaW50byB0aGUgKmhlYWQqIG9mIHRoZSBvcmlnaW5hbCBsaXN0LiBJZiBgZnVsbGAgaXMgdHJ1ZSwgdGhlIG5vZGUgb3JkZXIgZ2V0cyBjaGFuZ2VkIGluIHN1YnRsZSB3YXlzLCBhbmQgdGhlIGBoZWFkLVx1MDAzZXByZXZgIGNvdWxkIGdldCBjaGFuZ2VkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGtlcm5lbCBsaXN0IG1hbmlwdWxhdGlvbiBzY2VuYXJpbywgd2hlcmUgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0b3VjaGluZyBgd2ItXHUwMDNlbGlzdF9sb2NrYCBjb3VsZCBpbnRyb2R1Y2UgZGF0YSByYWNlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGNvdWxkIGhhcHBlbiBpZiBhbm90aGVyIHRocmVhZCBvciBpbnRlcnJ1cHQgaW50ZXJhY3RzIHdpdGggdGhlIGxpc3Qgd2hpbGUgaW5vZGVzIGFyZSBpbiB0aGlzICdzY2FubmVkJyBzdGF0ZSwgb3IgaWYgYG1vdmVfZXhwaXJlZF9pbm9kZXNgIHJ1bnMsIG9yIGlmIGFuIGlub2RlIGlzIGZyZWVkIHdoaWxlIGl0cyBmbGFncyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBhbmQgaG93IHRoZSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbGlzdCBoZWFkIChhbmQgdGhlIGBiX2RpcnR5X3RpbWVgIGF0dHJpYnV0ZSkgYXJlIGtleSBhcmVhcyBvZiBjb25jZXJuLlxuXG5CYXNlZCBvbiB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMsIHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcIkNvcmUgU3Vic3lzdGVtc1wiIGNhdGVnb3J5LCBzcGVjaWZpY2FsbHkgVkZTIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgd2l0aCBhIHRvdWNoIG9mIHJlZmFjdG9yaW5nL2NvZGUgY2xlYW51cC4gIEl0IGlzIGEgcmVhY2hhYmxlIGFyZWEgdGhhdCBtb2RpZmllcyBjb3JlIGRhdGEgc3RydWN0dXJlcy5cblxuVG8gaWRlbnRpZnkgd2hhdCB0byBmb2N1cyBvbiwgSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCwgYW5kIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gLiAgSSd2ZSBjaGVja2VkLCBhbmQgbm9uZSBvZiB0aGVzZSBhcmUgdWJpcXVpdG91czsgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIGNncm91cCB3cml0ZWJhY2sgLyBpbm9kZSB3cml0ZWJhY2sgc3dpdGNoaW5nLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgc2V0IChgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGApLCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEknbGwgcmUtZXhhbWluZSB0aGUgY29kZSB0byBjb25maXJtIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvbmRpdGlvbiBvbiB0aGUgYmVoYXZpb3Igb2YgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MzEuNjQ0ODgzNTI4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU3MjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYmFja2luZy1kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9iYWNraW5nLWRldi5jPTYyPXN0YXRpYyB2b2lkIGNvbGxlY3Rfd2Jfc3RhdHMoc3RydWN0IHdiX3N0YXRzICpzdGF0cyxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODUtXFxubW0vYmFja2luZy1kZXYuYzo4NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9iYWNraW5nLWRldi5jLTg3LXN0YXRpYyB2b2lkIGJkaV9jb2xsZWN0X3N0YXRzKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTE1OD1zdGF0aWMgdm9pZCB3Yl9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy0xNzQtXFx0XFx0ICAgXFxcInN0YXRlOiAgICAgICAgICAgICAlMTBseFxcXFxuXFxcXG5cXFwiLFxcbm1tL2JhY2tpbmctZGV2LmM6MTc1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL2JhY2tpbmctZGV2LmMtMTc2LVxcdFxcdCAgIGNncm91cF9pbm8od2ItXFx1MDAzZW1lbWNnX2Nzcy1cXHUwMDNlY2dyb3VwKSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy01ODYtXFxubW0vYmFja2luZy1kZXYuYzo1ODc6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vYmFja2luZy1kZXYuYy01ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMxLjY5NTQ2MjY3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODQwNzc1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIHllcCwgYG1tL2JhY2tpbmctZGV2LmNgICpkb2VzKiBpbmNsdWRlIHRoYXQgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gYENHUk9VUF9XUklURUJBQ0tgIGluIGBpbml0L0tjb25maWdgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gRnVydGhlciBkb3duIHRoZSBjaGFpbiwgYEJMS19DR1JPVVBgIGl0c2VsZiByZWxpZXMgb24gYEJMT0NLYC4gU3RyYWlnaHRmb3J3YXJkLiBCdXQgd2hhdCBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0LCBpcyBgQ0dST1VQU2AgcmVxdWlyZWQ/IEFoLCB5ZXMsIGxvb2tpbmcgYXQgYGluaXQvS2NvbmZpZ2AgYWdhaW4sIGBNRU1DR2AgYWN0dWFsbHkgKmRlcGVuZHMqIG9uIGBDR1JPVVBTYC4gSXQncyBjbGVhcmx5IHN0YXRlZCByaWdodCB0aGVyZSB3aXRoaW4gdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIGJsb2NrLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDR1JPVVBTYCBpcyBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gcmV2aXNpdCBgaW5pdC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzU3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjM4LjUzNjI0MDE5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0Njc2MjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNTM9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNTUtXFxuaW5pdC9LY29uZmlnOjEwNTY6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNTctXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0MC4zODMwMDc3OThaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk4MDE1NTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBSZWFkeSB0byBQcm9jZWVkIHdpdGggYHNldC1yZXN1bHRzYCoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgYW5hbHlzaXMgaXMgY29tcGxldGUuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYENHUk9VUFNgLCBhbmQgYEJMT0NLYC4gQWxsIGNoZWNrcyBwYXNzZWQuXG5cbk5leHQsIEkgdmVyaWZpZWQgdGhlIGNvcmUgYXNzZXNzbWVudCBjcml0ZXJpYS4gSXQncyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHZlcmRpY3QuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc3VjY2luY3QgYW5kIGFjY3VyYXRlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGluY2x1ZGVzIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCAob3IgcG90ZW50aWFsbHkgYENHUk9VUFNgIGFuZCBgQkxPQ0tgKSwgbWF0Y2hlcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjaGFuZ2UuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBpbmNsdWRpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYHdiX21lbWNnX29mZmxpbmVgLCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGNvZGUgY2hhbmdlcy5cblxuSSd2ZSByZXZpZXdlZCB0aGUgcmVhc29uaW5nIGluIGRldGFpbC4gVGhlIHBhdGNoIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBzcGVjaWZpY2FsbHksIG1vZGlmeWluZyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoaXMgaXMgY29yZSBWRlMgd3JpdGViYWNrIGFuZCB0aGUgY2dyb3VwIHdyaXRlYmFjayBzdWJzeXN0ZW0uIEl0IGFsdGVycyB0aGUgaW5vZGUgd3JpdGViYWNrIGxpc3Qgc2Nhbm5pbmcgYW5kIHJlb3JkZXJpbmcgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwIChgY2xlYW51cF9vZmZsaW5lX2Nnd2JgKS4gVGhlIGNvZGUgc3dpdGNoZXMgZnJvbSBmb3J3YXJkIHRvIHJldmVyc2UgaXRlcmF0aW9uIGFuZCB1c2VzIGEgbG9jYWwgbGlzdCBmb3IgdGVtcG9yYXJ5IGVudHJpZXMuIFRoZSBjb2RlIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgY2dyb3VwcyB3aXRoIGF0dGFjaGVkIHdyaXRlYmFjayBpbm9kZXMgd2hlbiBvZmZsaW5lZCwgbWFraW5nIGl0IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkV2ZXJ5dGhpbmcgaXMgY2xlYXIuIFRoZSByZWFzb25pbmcgaXMgc291bmQsIGFuZCBhbGwgcmVxdWlyZWQgY2hlY2tzIGhhdmUgYmVlbiB2YWxpZGF0ZWQuIEknbSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgYW0gbm93IHByb2NlZWRpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc5MiwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuMzYzMTY2NjQyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MDAxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0NS40Mzc4NzYzMzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODM4MDA5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuNDM4NDE0ODUzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM4Mzc0NjY1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzICdpc3dfcHJlcGFyZV93YnNfc3dpdGNoJyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAnc2Nhbm5lZCcgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCdzY2FubmVkJyBhbmQgJ2Z1bGwnKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJ2Jvb2wgZnVsbCA9IGZhbHNlOycpLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJ2lzdycgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtNzI3LDE5ICs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbitcdExJU1RfSEVBRChzY2FubmVkKTtcbitcdGJvb2wgZnVsbCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4rXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbitcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuK1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuK1x0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4rXHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7XG4gXHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiBcdFx0KCpucikrKztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmICgqbnIgXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XG4rXHRcdFx0ZnVsbCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdGxpc3Rfc3BsaWNlKFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xuK1xuK1x0cmV0dXJuIGZ1bGw7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuNDM4NDE1NzQzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTgzMzYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZnMtd3JpdGViYWNrLmNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvZnMtd3JpdGViYWNrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5naW5nIGFuZCB3aHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBTaW5jZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHdyaXRlYmFjayBiZWhhdmlvciwgSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBsaW5lIDcyNyBhbmQgc2VlIHdoYXQgdGhhdCBnaXZlcyBtZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZGlmaWNhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBhcmVhIG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjQ5Ljg1Njc1NjA1NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzEwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzEwOlxcdFxcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxcbiA3MTE6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbMF0gPSBpbm9kZTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZShpbm9kZS1cXHUwMDNlaV93YiwgbmV3X3diLCAxKTtcXG4gNzE2OlxcdFxcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XFxuIDcxNzpcXHRcXHRyZXR1cm47XFxuIDcxODpcXHRcXG4gNzE5OlxcdG91dF9mcmVlOlxcbiA3MjA6XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDcyMTpcXHRcXHRpZiAobmV3X3diKVxcbiA3MjI6XFx0XFx0XFx0d2JfcHV0KG5ld193Yik7XFxuIDcyMzpcXHRcXHRrZnJlZShpc3cpO1xcbiA3MjQ6XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csXFxuIDcyODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKm5yKVxcbiA3Mjk6XFx0e1xcbiA3MzA6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcXG4gNzMxOlxcdFxcdExJU1RfSEVBRChzY2FubmVkKTtcXG4gNzMyOlxcdFxcdGJvb2wgZnVsbCA9IGZhbHNlO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHQvKlxcbiA3MzU6XFx0XFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcXG4gNzM2OlxcdFxcdCAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZlxcbiA3Mzc6XFx0XFx0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXFxuIDczODpcXHRcXHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXFxuIDczOTpcXHRcXHQgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLlxcbiA3NDA6XFx0XFx0ICovXFxuIDc0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4gNzQyOlxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfaW9fbGlzdCwgXFx1MDAyNnNjYW5uZWQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRcXHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcXG4gNzQ1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRcXHRpc3ctXFx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XFxuIDc0ODpcXHRcXHRcXHQoKm5yKSsrO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRcXHRpZiAoKm5yIFxcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHtcXG4gNzUxOlxcdFxcdFxcdFxcdGZ1bGwgPSB0cnVlO1xcbiA3NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc1MzpcXHRcXHRcXHR9XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXHRsaXN0X3NwbGljZShcXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdHJldHVybiBmdWxsO1xcbiA3NTg6XFx0fVxcbiA3NTk6XFx0XFxuIDc2MDpcXHQvKipcXG4gNzYxOlxcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3diIC0gZGV0YWNoIGFzc29jaWF0ZWQgaW5vZGVzXFxuIDc2MjpcXHQgKiBAd2I6IHRhcmdldCB3YlxcbiA3NjM6XFx0ICpcXG4gNzY0OlxcdCAqIFN3aXRjaCBhbGwgaW5vZGVzIGF0dGFjaGVkIHRvIEB3YiB0byBhIG5lYXJlc3QgbGl2aW5nIGFuY2VzdG9yJ3Mgd2IgaW4gb3JkZXJcXG4gNzY1OlxcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXFxuIDc2NjpcXHQgKiBzd2l0Y2hlZCBhbmQgdGhlIGZ1bmN0aW9uIGhhcyB0byBiZSByZXN0YXJ0ZWQuXFxuIDc2NzpcXHQgKi9cXG4gNzY4OlxcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbiA3Njk6XFx0e1xcbiA3NzA6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcXG4gNzcxOlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcXG4gNzcyOlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2I7XFxuIDc3MzpcXHRcXHRpbnQgbnI7XFxuIDc3NDpcXHRcXHRib29sIHJlc3RhcnQgPSBmYWxzZTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgV0JfTUFYX0lOT0RFU19QRVJfSVNXKTtcXG4gNzc3OlxcdFxcdGlmICghaXN3KVxcbiA3Nzg6XFx0XFx0XFx0cmV0dXJuIHJlc3RhcnQ7XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDkuODU3MDg0MTk0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1Nzk1OTc1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCoqXG5cbk9rYXksIHNvIEkndmUgaGl0IGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBObyBwb2ludCBqdXN0IGRpdmluZyBpbiB3aXRob3V0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgd29ya2Zsb3cgaXMgdGhhdCBpdCdzIGVtYmVkZGVkIHdpdGhpbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYW55IHJlbGV2YW50IGdsb2JhbCB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXQgbWlnaHQgdG91Y2guIEknbGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVzb3VyY2UgY2xlYW51cCwgdGVtcG9yYXJ5IGZpbGUgZGVsZXRpb24sIGRhdGFiYXNlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIG9yIHN0YXRlIHJlc2V0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIGRhdGEgc2VyaWFsaXphdGlvbiBjb25zaWRlcmF0aW9ucyBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIHJlbGF0ZWQgdG8gZmFpbGVkIG9wZXJhdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo1NS40MzY2ODUyOTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc3NzpcXHRcXHRpZiAoIWlzdylcXG4gNzc4OlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzgzOlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzg0OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzg1OlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzg5OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3OTU6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3OTY6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3OTc6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3OTg6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3OTk6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gODAwOlxcdFxcdCAqL1xcbiA4MDE6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gODAyOlxcdFxcdGlmICghcmVzdGFydClcXG4gODAzOlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA4MDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDgwODpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA4MDk6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDgxMDpcXHRcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gODExOlxcdFxcdFxcdGtmcmVlKGlzdyk7XFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODEzOlxcdFxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZSh3YiwgbmV3X3diLCBucik7XFxuIDgxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODE5OlxcdH1cXG4gODIwOlxcdFxcbiA4MjE6XFx0LyoqXFxuIDgyMjpcXHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcXG4gODIzOlxcdCAqIEB3YmM6IHdyaXRlYmFja19jb250cm9sIG9mIGludGVyZXN0XFxuIDgyNDpcXHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxcbiA4MjU6XFx0ICpcXG4gODI2OlxcdCAqIEBpbm9kZSBpcyBsb2NrZWQgYW5kIGFib3V0IHRvIGJlIHdyaXR0ZW4gYmFjayB1bmRlciB0aGUgY29udHJvbCBvZiBAd2JjLlxcbiA4Mjc6XFx0ICogUmVjb3JkIEBpbm9kZSdzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxcbiA4Mjg6XFx0ICogd3JpdGViYWNrIGNvbXBsZXRpb24sIHdiY19kZXRhY2hfaW5vZGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgVGhpcyBpcyB1c2VkXFxuIDgyOTpcXHQgKiB0byB0cmFjayB0aGUgY2dyb3VwIHdyaXRlYmFjayBjb250ZXh0LlxcbiA4MzA6XFx0ICovXFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIDgzMjpcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA4MzM6XFx0XFx0X19yZWxlYXNlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jaylcXG4gODM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NTUuNDM2OTI3NDA3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MzI0NzA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbm9kZSBTd2l0Y2ggV3JpdGViYWNrIENvbnRleHQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXN3YCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIOKAkyBob3cgaXQncyBhbGxvY2F0ZWQsIGhvdyBpdHMgYGlub2Rlc2AgbWVtYmVyIGlzIHVzZWQsIGFuZCBvdmVyYWxsLCB3aGVyZSBpdCBmaXRzIGluLiBJdCBhcHBlYXJzIHRvIGJlIGEgYHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHRgLCBhbmQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvZGUsIGl0cyBhbGxvY2F0aW9uIGhhcHBlbnMgd2l0aGluIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgdmlhIGBremFsbG9jX2ZsZXhgLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCEgQSBwb2ludGVyIGAqbnJgICh0byBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHRvIDApIHNlZW1zIHRvIHBsYXkgYSByb2xlIGluIGhvdyB0aGlzIHN0cnVjdHVyZSdzIGBpbm9kZXNgIG1lbWJlciBpcyBwb3B1bGF0ZWQuXG5cblRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgZXhpc3RpbmcgY29kZSBzbmlwcGV0IHNob3dzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMgKGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCksIHdoZXJlIGlub2RlcyBtZWV0aW5nIGEgY2VydGFpbiBjb25kaXRpb24gaGF2ZSB0aGVpciBwb2ludGVycyBzdG9yZWQgaW4gYGlzdy1cdTAwM2Vpbm9kZXNgLiBUaGUgYCpucmAgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIHN1Y2Nlc3NmdWwgaW5zZXJ0aW9uLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkgaWYgdGhlIGJ1ZmZlciBpcyBmaWxsZWQuXG5cblRoZSBcImFmdGVyIHRoZSBwYXRjaFwiIGNvZGUgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZvcndhcmQgaXRlcmF0aW9uLCB0aGUgY29kZSBub3cgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCAoYHNjYW5uZWRgKS4gVGhpcyBzdWdnZXN0cyBhIHJlb3JkZXJpbmcgb3IgcHJpb3JpdGl6YXRpb24gc3RyYXRlZ3kgZm9yIGlub2RlIHByb2Nlc3NpbmcuIFRoZSBpbnRlbnQgc2VlbXMgdG8ga2VlcCB0aGUgb2xkZXN0IHVuc2Nhbm5lZCBpbm9kZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFmdGVyIHRoZSBtb3ZlLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLCBJIHdvbmRlciBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgdXNlIG9mIGBsaXN0X3NwbGljZWAgaXMgYWxzbyBub3RhYmxlLCBjb21iaW5pbmcgdGhlIGxpc3RzIGFmdGVyIHRoZSBpdGVyYXRpb24sIHRoaXMgc2VlbXMgbW9yZSBzb3BoaXN0aWNhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpc3ctXHUwMDNlaW5vZGVzYCBhcnJheSBpcyAqY29uc3VtZWQqLiBJIG5lZWQgdG8gZmluZCB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZXMgdGhpcyBjb250ZXh0IHRvIHF1ZXVlIHRoZSB3cml0ZWJhY2sgcmVxdWVzdHMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIChvciBzaW1pbGFyKSB0byBsb2NhdGUgY2FsbHMgdG8gYHdiX3F1ZXVlX2lzd2AgYW5kIHJlbGF0ZWQgdXNlcyBvZiB0aGUgYHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHRgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIHJlc3Qgb2YgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDowMS4wNjk0MDE0MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1OTc3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndiX3F1ZXVlX2lzd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz02MjQ9c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy02NTktXFxuZnMvZnMtd3JpdGViYWNrLmM6NjYwOnN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuZnMvZnMtd3JpdGViYWNrLmMtNjYxLVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz02NzU9c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzE1LVxcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUoaW5vZGUtXFx1MDAzZWlfd2IsIG5ld193YiwgMSk7XFxuZnMvZnMtd3JpdGViYWNrLmM6NzE2OlxcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNzE3LVxcdHJldHVybjtcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTc2OD1ib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTgxNS1cXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKHdiLCBuZXdfd2IsIG5yKTtcXG5mcy9mcy13cml0ZWJhY2suYzo4MTY6XFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcXG5mcy9mcy13cml0ZWJhY2suYy04MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAxLjM1NTM4OTQ2MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjM3OTExNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBmcy13cml0ZWJhY2suYzogTGluZXMgNjUwLTcxMCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDY1MCB0byA3MTAuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGludm9sdmVkIGluIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB3cml0ZWJhY2ssIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcnR5IHBhZ2VzIGFyZSBpZGVudGlmaWVkLCBwZXJoYXBzIGhhbmRsZWQgYXQgdGhlIGluZGl2aWR1YWwgZmlsZXN5c3RlbSBsZXZlbCBvciBob3cgdGhlIGdsb2JhbCB3cml0ZWJhY2sgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBzcGVjaWZpYyBkaXJ0eSBwYWdlcy4gR2l2ZW4gdGhlIGZpbGUgY29udGV4dCwgaXTigJlzIGhpZ2hseSBwcm9iYWJsZSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGB3Yl93cml0ZWJhY2tgIGZ1bmN0aW9uIG9yIG9uZSBvZiBpdHMgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IGVsdWNpZGF0ZSBpdHMgcm9sZSBpbiB0aGUgZ2xvYmFsIHdyaXRlYmFjayBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGRpcnR5IHBhZ2Ugc2VsZWN0aW9uIHByb2Nlc3MuIEkgd2FudCB0byB1bmRlcnN0YW5kOiBpcyBpdCBzZWxlY3Rpbmcgc3BlY2lmaWMgZGlydHkgcGFnZXMsIGhhbmRsaW5nIGEgd2hvbGUgcmFuZ2Ugb2YgcGFnZXMgd2l0aGluIGEgQkRJLCBvciBkb2VzIGl0IGNvbnRyb2wgdGhlIHNjaGVkdWxpbmcgb2Ygd3JpdGViYWNrcyBiYXNlZCBvbiBJL08gYmFuZHdpZHRoPyBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBiYWxhbmNlcyByZXNwb25zaXZlbmVzcyB3aXRoIGRhdGEgaW50ZWdyaXR5LiBJdCB3b3VsZCBiZSBncmVhdCBpZiB0aGlzIHNlY3Rpb24gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY2xlYW5lciBhbmQgdGhlIGZsdXNoZXIgdGhyZWFkcyBhbmQgaWYgdGhpcyBzZWN0aW9uIGhhcyBzb21lIGxvY2tpbmcgbWVjaGFuaXNtIGFzIHdlbGwsIEknbSBob3BpbmcgdG8gc2VlIGhvdyBpdCBwcm90ZWN0cyB0aGUgcmVsZXZhbnQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAzLjk5MzMwNDkwMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdF9faWdldChpbm9kZSk7XFxuIDY1MTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdHJldHVybiB0cnVlO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRvdXRfdW5waW46XFxuIDY1NjpcXHRcXHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNjU3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0c3RhdGljIHZvaWQgd2JfcXVldWVfaXN3KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4gNjYxOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXFxuIDY2MjpcXHR7XFxuIDY2MzpcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZpc3ctXFx1MDAzZWxpc3QsIFxcdTAwMjZ3Yi1cXHUwMDNlc3dpdGNoX3dic19jdHhzKSlcXG4gNjY0OlxcdFxcdFxcdHF1ZXVlX3dvcmsoaXN3X3dxLCBcXHUwMDI2d2ItXFx1MDAzZXN3aXRjaF93b3JrKTtcXG4gNjY1OlxcdH1cXG4gNjY2OlxcdFxcbiA2Njc6XFx0LyoqXFxuIDY2ODpcXHQgKiBpbm9kZV9zd2l0Y2hfd2JzIC0gY2hhbmdlIHRoZSB3YiBhc3NvY2lhdGlvbiBvZiBhbiBpbm9kZVxcbiA2Njk6XFx0ICogQGlub2RlOiB0YXJnZXQgaW5vZGVcXG4gNjcwOlxcdCAqIEBuZXdfd2JfaWQ6IElEIG9mIHRoZSBuZXcgd2JcXG4gNjcxOlxcdCAqXFxuIDY3MjpcXHQgKiBTd2l0Y2ggQGlub2RlJ3Mgd2IgYXNzb2NpYXRpb24gdG8gdGhlIHdiIGlkZW50aWZpZWQgYnkgQG5ld193Yl9pZC4gIFRoZVxcbiA2NzM6XFx0ICogc3dpdGNoaW5nIGlzIHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSBhbmQgbWF5IGZhaWwgc2lsZW50bHkuXFxuIDY3NDpcXHQgKi9cXG4gNjc1OlxcdHN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcXG4gNjc2OlxcdHtcXG4gNjc3OlxcdFxcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBpbm9kZV90b19iZGkoaW5vZGUpO1xcbiA2Nzg6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcXG4gNjc5OlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcXG4gNjgwOlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IgPSBOVUxMO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHQvKiBub29wIGlmIHNlZW1zIHRvIGJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi9cXG4gNjgzOlxcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9XQl9TV0lUQ0gpXFxuIDY4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdC8qIGF2b2lkIHF1ZXVlaW5nIGEgbmV3IHN3aXRjaCBpZiB0b28gbWFueSBhcmUgYWxyZWFkeSBpbiBmbGlnaHQgKi9cXG4gNjg3OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXN3X25yX2luX2ZsaWdodCkgXFx1MDAzZSBXQl9GUk5fTUFYX0lOX0ZMSUdIVClcXG4gNjg4OlxcdFxcdFxcdHJldHVybjtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgMiwgR0ZQX0FUT01JQyk7XFxuIDY5MTpcXHRcXHRpZiAoIWlzdylcXG4gNjkyOlxcdFxcdFxcdHJldHVybjtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDY5NTpcXHRcXG4gNjk2OlxcdFxcdC8qIGZpbmQgYW5kIHBpbiB0aGUgbmV3IHdiICovXFxuIDY5NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDY5ODpcXHRcXHRtZW1jZ19jc3MgPSBjc3NfZnJvbV9pZChuZXdfd2JfaWQsIFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpO1xcbiA2OTk6XFx0XFx0aWYgKG1lbWNnX2NzcyBcXHUwMDI2XFx1MDAyNiAhY3NzX3RyeWdldChtZW1jZ19jc3MpKVxcbiA3MDA6XFx0XFx0XFx0bWVtY2dfY3NzID0gTlVMTDtcXG4gNzAxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA3MDI6XFx0XFx0aWYgKCFtZW1jZ19jc3MpXFxuIDcwMzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRuZXdfd2IgPSB3Yl9nZXRfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBHRlBfQVRPTUlDKTtcXG4gNzA2OlxcdFxcdGNzc19wdXQobWVtY2dfY3NzKTtcXG4gNzA3OlxcdFxcdGlmICghbmV3X3diKVxcbiA3MDg6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDowMy45OTM2MDczODJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk0NDc3NTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggYW5kIERhdGEgQWNjZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgc3dpdGNoX3dvcmtgIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGhvdyBgaXN3LVx1MDAzZWlub2Rlc2AgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHBvaW50cyBvZiBleGVjdXRpb24gd2hlcmUgYHN3aXRjaF93b3JrYCBpcyBjYWxsZWQuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCB0ZWxscyBtZSB0aGUgY29uZGl0aW9ucyBhbmQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbm9kZSBhY2Nlc3MgaXMgaGFwcGVuaW5nLiBJcyBpdCBjYWxsZWQgZnJvbSBhIHRhc2tsZXQsIGludGVycnVwdCBoYW5kbGVyLCBvciBhIHJlZ3VsYXIgcHJvY2VzcyBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHRoZSBpbm9kZSBhY2Nlc3MuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hpY2gqIGlub2RlIGlzIGFjY2Vzc2VkLCBhbmQgaWYgdGhlIHNhbWUgaW5vZGUgY2FuIGJlIGFjY2Vzc2VkIGVsc2V3aGVyZSwgYW5kIGlmIHNvLCB3aGVuIGFuZCBob3cuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGlub2RlIHVzZSBwYXR0ZXJuLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY29tcGxldGUgYWNjZXNzIHBhdHRlcm4gZm9yIGBpc3ctXHUwMDNlaW5vZGVzYC4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBiZSBhZGRyZXNzZWQsIG9yIGlmIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBhdGhzIHRoYXQgbWF5IHVzZSB0aGUgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGEgZGVlcCBkaXZlIHdpdGggbXkgZGVidWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjA2LjkzODM4NjkzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNDcwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dpdGNoX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnMtd3JpdGViYWNrLmM9NTkwPXZvaWQgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTU5Mi1cXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxcbmZzL2ZzLXdyaXRlYmFjay5jOjU5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3dpdGNoX3dvcmspO1xcbmZzL2ZzLXdyaXRlYmFjay5jLTU5NC1cXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTY2MD1zdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNjYzLVxcdGlmIChsbGlzdF9hZGQoXFx1MDAyNmlzdy1cXHUwMDNlbGlzdCwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxcbmZzL2ZzLXdyaXRlYmFjay5jOjY2NDpcXHRcXHRxdWV1ZV93b3JrKGlzd193cSwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd29yayk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNjY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MDYuOTg5NTU3MjI0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyMzg3MDg0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBmdW5jdGlvbiBpbiBgZnMvZnMtd3JpdGViYWNrLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXcml0ZWJhY2sgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24ndCBpdD8gVGhpcyBmdW5jdGlvbiBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2Ygd3JpdGViYWNrIG9wZXJhdGlvbnMsIHRoZSBjb3JlIG1hY2hpbmVyeSB0aGF0IGVuc3VyZXMgZGF0YSBnZXRzIGZyb20gdGhlIGlub2RlJ3MgZGlydHkgcGFnZXMgb3V0IHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlICppbm9kZSdzKiBgd2JfbGlzdGAgZ2V0cyBqdWdnbGVkIGFuZCBzb3J0ZWQgYW5kIHRoZSAqd2Jfd29yayogc3RydWN0cyBnZXQgdXBkYXRlZC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2UgZGVjaWRlIHdoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCAqcmlnaHQgbm93KiwgYW5kIHdoYXQgY2FuIHdhaXQuIEkgd2FudCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGlzIHNtYXJ0IGVub3VnaCB0byBoYW5kbGUgc2l0dWF0aW9ucyB3aXRoIG1hbnkgZGlydHkgaW5vZGVzLCBvciBpZiB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IHBlcmZvcm1hbmNlIGlzc3Vlcy4gTG9va2luZyBmb3IgbG9jayBjb250ZW50aW9uIHBvaW50cyBpcyBhIG11c3QsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcmVxdWVudGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZWZmaWNpZW50bHkgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB3cml0ZWJhY2sgY29udGV4dHMuIEJhc2ljYWxseSwgd2hhdCBzdHJhdGVnaWVzIGFyZSB1c2VkIHRvIGltcHJvdmUgb3ZlcmFsbCB0aHJvdWdocHV0IGFuZCBrZWVwIGxhdGVuY2llcyBsb3c/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEwLjIyODI2ODI1NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA1ODY6XFx0XFx0a2ZyZWUoaXN3KTtcXG4gNTg3OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xcbiA1ODg6XFx0fVxcbiA1ODk6XFx0XFxuIDU5MDpcXHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5MTpcXHR7XFxuIDU5MjpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN3aXRjaF93b3JrKTtcXG4gNTk0OlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdywgKm5leHRfaXN3O1xcbiA1OTU6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmxpc3Q7XFxuIDU5NjpcXHRcXG4gNTk3OlxcdFxcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZuZXdfd2ItXFx1MDAzZXN3aXRjaF93YnNfY3R4cyk7XFxuIDU5ODpcXHRcXHQvKlxcbiA1OTk6XFx0XFx0ICogTm90aGluZyB0byBkbz8gVGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gYXMgcmVmZXJlbmNlcyBoZWxkIGJ5IGlzd1xcbiA2MDA6XFx0XFx0ICogaXRlbXMgcHJvdGVjdCB3YiBmcm9tIGZyZWVpbmcuLi5cXG4gNjAxOlxcdFxcdCAqL1xcbiA2MDI6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlzdCkpXFxuIDYwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdC8qXFxuIDYwNjpcXHRcXHQgKiBHcmFiIG91ciByZWZlcmVuY2UgdG8gd2Igc28gdGhhdCBpdCBjYW5ub3QgZ2V0IGZyZWVkIHVuZGVyIHVzXFxuIDYwNzpcXHRcXHQgKiBhZnRlciB3ZSBwcm9jZXNzIGFsbCB0aGUgaXN3IGl0ZW1zLlxcbiA2MDg6XFx0XFx0ICovXFxuIDYwOTpcXHRcXHR3Yl9nZXQobmV3X3diKTtcXG4gNjEwOlxcdFxcdC8qXFxuIDYxMTpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byBzeW5jaHJvbml6aW5nIGFtb25nIHN3aXRjaGVycywgSV9XQl9TV0lUQ0hcXG4gNjEyOlxcdFxcdCAqIHRlbGxzIHRoZSBSQ1UgcHJvdGVjdGVkIHN0YXQgdXBkYXRlIHBhdGhzIHRvIGdyYWIgdGhlIGlfcGFnZVxcbiA2MTM6XFx0XFx0ICogbG9jayBzbyB0aGF0IHN0YXQgdHJhbnNmZXIgY2FuIHN5bmNocm9uaXplIGFnYWluc3QgdGhlbS5cXG4gNjE0OlxcdFxcdCAqIExldCdzIGNvbnRpbnVlIGFmdGVyIElfV0JfU1dJVENIIGlzIGd1YXJhbnRlZWQgdG8gYmVcXG4gNjE1OlxcdFxcdCAqIHZpc2libGUuXFxuIDYxNjpcXHRcXHQgKi9cXG4gNjE3OlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXFxuIDYyMDpcXHRcXHRcXHRwcm9jZXNzX2lub2RlX3N3aXRjaF93YnMobmV3X3diLCBpc3cpO1xcbiA2MjE6XFx0XFx0d2JfcHV0KG5ld193Yik7XFxuIDYyMjpcXHR9XFxuIDYyMzpcXHRcXG4gNjI0OlxcdHN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiA2MjU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxcbiA2MjY6XFx0e1xcbiA2Mjc6XFx0XFx0LyogQXZvaWQgdGhlIGF0b21pY19pbmMvc21wX21iIGRhbmNlIG9uY2UgU0JfQUNUSVZFIGlzIGdvbmUuICovXFxuIDYyODpcXHRcXHRpZiAoIShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkpXFxuIDYyOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEwLjIyODQ3MjU3NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjI2OTI2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgYHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dic2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBwcm9jZXNzX2lub2RlX3N3aXRjaF93YnNgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA1NTAsIHNvIEkgc2hvdWxkIGhlYWQgb3ZlciB0aGVyZSBhbmQgaW52ZXN0aWdhdGUgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaW5vZGVzIGFuZCB3cml0ZWJhY2sgbWVjaGFuaXNtcy4gR2l2ZW4gd2hhdCBJJ3ZlIGJlZW4gc3R1ZHlpbmcsIEknbSBhbnRpY2lwYXRpbmcgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmN1cnJlbmN5IG9yIGRhdGEgY29uc2lzdGVuY3kgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIGZvY3VzIG9uIGhvdyBkYXRhIGlzIHRyYW5zaXRpb25lZCBvciBzeW5jaHJvbml6ZWQgZHVyaW5nIGFuIGlub2RlIHN3aXRjaCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBjb250ZXh0IHN3aXRjaC4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgd3JpdGViYWNrIHByb2Nlc3MgZnJvbSB0aGUgZGlydHkgcGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MTMuNDU1NDAxODQzWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0XFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTUxOlxcdFxcdH0gZWxzZSB7XFxuIDU1MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuIDU1NDpcXHRcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHdoaWxlICgqaW5vZGVwKSB7XFxuIDU1NzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVxcdTAwM2VpX3diICE9IG9sZF93Yik7XFxuIDU1ODpcXHRcXHRcXHRpZiAoaW5vZGVfZG9fc3dpdGNoX3dicygqaW5vZGVwLCBvbGRfd2IsIG5ld193YikpXFxuIDU1OTpcXHRcXHRcXHRcXHRucl9zd2l0Y2hlZCsrO1xcbiA1NjA6XFx0XFx0XFx0aW5vZGVwKys7XFxuIDU2MTpcXHRcXHRcXHRpZiAoKmlub2RlcCBcXHUwMDI2XFx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xcbiA1NjI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZvbGRfd2ItXFx1MDAzZWxpc3RfbG9jayk7XFxuIDU2NDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNTY1OlxcdFxcdFxcdFxcdGdvdG8gcmVsb2NrO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0dXBfcmVhZChcXHUwMDI2YmRpLVxcdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRpZiAobnJfc3dpdGNoZWQpIHtcXG4gNTc1OlxcdFxcdFxcdHdiX3dha2V1cChuZXdfd2IpO1xcbiA1NzY6XFx0XFx0XFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGZvciAoaW5vZGVwID0gaXN3LVxcdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCsrKSB7XFxuIDU4MDpcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVxcdTAwM2VpX3NiO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRcXHRpcHV0KCppbm9kZXApO1xcbiA1ODM6XFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihzYik7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gNTg2OlxcdFxcdGtmcmVlKGlzdyk7XFxuIDU4NzpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNTg4OlxcdH1cXG4gNTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoxMy40NTU1NjY3NDRaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU4MjAyODg1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdyaXRlYmFjayBJbm9kZSBTd2l0Y2ggUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGlzIHRoYXQgYGlzdy1cdTAwM2Vpbm9kZXNgIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYGt6YWxsb2NfZmxleGAgaXMgdXNlZCB0byBhbGxvY2F0ZSBgaXN3YCwgd2hpY2ggZW5zdXJlcyB0aGUgbGFzdCBlbGVtZW50IGlzIE5VTEwuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBob3cgd2UgcG9wdWxhdGUgdGhpcyBhcnJheSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGhhbmRsZWQuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyBtb2RpZmllZC4gQmVmb3JlIHRoZSBjaGFuZ2UsIGl0IHNlZW1zIHRoZSBjb2RlIHdhcyBpdGVyYXRpbmcgZm9yd2FyZCB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMuIE5vdywgaXQgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSBsb2NhbCBsaXN0LCBgc2Nhbm5lZGAsIGJlZm9yZSBzcGxpY2luZyB0aGVtIGJhY2sgaW50byB0aGUgbWFpbiBsaXN0LiBUaGlzIGNoYW5nZSBhaW1zIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEknZCBndWVzcy4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGVzIGF0IHRoZSBlbmQgYW5kIG1vdmVzIHRoZSBvbmVzIGFscmVhZHkgc2Nhbm5lZCB0byB0aGUgZnJvbnQuIFRoaXMgc291bmRzIGxpa2UgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkbHkgcHJvY2Vzc2luZyB0aGUgc2FtZSBhbHJlYWR5LXByZXBhcmVkIG9yIHNraXBwZWQgaW5vZGVzLiBJdCBhbHNvIHNlZW1zIHRvIHJldHVybiAnZnVsbCcgaWYgdGhlIGlub2RlIGxpc3QgZXhjZWVkcyB0aGUgbWF4IHNpemUgb2YgdGhlICdpbm9kZXMnIGFycmF5LlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGNoZWNrLiBgc2Nhbm5lZGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBMSVNUX0hFQURgLiBgZnVsbGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gVGhlIG90aGVyIGxvb3AgdmFyaWFibGVzIGFyZSBpdGVyYXRpb24gcG9pbnRlcnMuIGBpc3dgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgLCBzbyBpdCdzIHplcm9lZC4gVGhlcmUncyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgd2UncmUgZW50aXJlbHkgd2l0aGluIHRoZSBpbnRlcm5hbCB3cml0ZWJhY2sgY2dyb3VwIGhhbmRsaW5nIChgZnMtd3JpdGViYWNrLmNgKS4gU28sIG5vIHVzZXItdmlzaWJsZSBtZW1vcnkgbW9kaWZpY2F0aW9ucywgbm8gbmV0bGluayBtZXNzYWdlcywgbm90aGluZyBsaWtlIHRoYXQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGl0IHRyaWdnZXJzIEtNU0FOLiBMZXQncyBzZWUuLi4gdGhpcyBwYXRjaCBkb2Vzbid0IGludm9sdmUga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMsIGFyZSBub3QgcGFydCBvZiB0aGUgc2NvcGUuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIHdoaWNoIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgc2luY2UgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIHJlYWRpbmcgb3IgY29weWluZywgS01TQU4gc2hvdWxkbid0IGJlIG5lZWRlZCBoZXJlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgbG9ja2luZy9jb25jdXJyZW5jeSBwcm9ibGVtcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBERUJVR19MSVNULiBTbywgbm8sIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBJJ20gcHJldHR5IGNvbmZpZGVudCBhYm91dCB0aGlzLiBBbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIHdoaWxlIHRoZSBsaXN0IG1hbmlwdWxhdGlvbiBpcyBhIGJpdCBtb3JlIGNvbXBsZXggbm93LCBpdCBsb29rcyBzYWZlIGZyb20gYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBmb3JtdWxhdGUgbXkgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTQsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjI3NTg1ODk1OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgJ2lzd19wcmVwYXJlX3dic19zd2l0Y2gnIGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICdzY2FubmVkJyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJ3NjYW5uZWQnIGFuZCAnZnVsbCcpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgnYm9vbCBmdWxsID0gZmFsc2U7JykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAnaXN3JyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzICdpc3dfcHJlcGFyZV93YnNfc3dpdGNoJyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAnc2Nhbm5lZCcgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCdzY2FubmVkJyBhbmQgJ2Z1bGwnKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJ2Jvb2wgZnVsbCA9IGZhbHNlOycpLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJ2lzdycgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e14d4302cbd0de773960bec33c2281508c8d8855", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e14d4302cbd0de773960bec33c2281508c8d8855", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "9e7bc821-c131-4450-8f21-e8487f63bbe8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "isw_prepare_wbs_switch", "cleanup_offline_cgwb", "cleanup_offline_cgwbs_workfn", "wb_memcg_offline", "inode_prepare_wbs_switch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e14d4302cbd0de773960bec33c2281508c8d8855", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDssCiAgICAmIzM0O2lub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzICYjMzk7aXN3X3ByZXBhcmVfd2JzX3N3aXRjaCYjMzk7IGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICYjMzk7c2Nhbm5lZCYjMzk7IGxpc3QgaGVhZCBzbyB0aGF0IHN1YnNlcXVlbnQgc2NhbnMgc3RhcnQgYXQgdW5zY2FubmVkIGlub2Rlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJiMzOTtzY2FubmVkJiMzOTsgYW5kICYjMzk7ZnVsbCYjMzk7KSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJiMzOTtib29sIGZ1bGwgPSBmYWxzZTsmIzM5OykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAmIzM5O2lzdyYjMzk7IHJlbWFpbnMgemVyby1pbml0aWFsaXplZCB2aWEga3phbGxvY19mbGV4KCksIGFuZCBubyBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggZmFsbCB1bmRlciB0aGUgZG9tYWluIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gS01TQU4gd291bGQgbm90IGRldGVjdCBidWdzIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTRiOGUyYzdlMWRlYmI4NjMyNjhhNTM2NTU4MDMwNzc4MGNiZTUzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmNcbmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC03MjcsMTkgJiM0Mzs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7XG4mIzQzO1x0TElTVF9IRUFEKHNjYW5uZWQpO1xuJiM0MztcdGJvb2wgZnVsbCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4mIzQzO1x0ICogZW5kLCBzbyB0aGUgbmV4dCBzY2FuIHJlc3VtZXMgYXQgdW5zY2FubmVkIGlub2RlcyBpbnN0ZWFkIG9mXG4mIzQzO1x0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXG4mIzQzO1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuJiM0MztcdCAqIGVuZCBtb3ZlX2V4cGlyZWRfaW5vZGVzKCkgcGlja3MgZnJvbTsgYl9hdHRhY2hlZCBpcyB1bm9yZGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4mIzQzO1x0XHRsaXN0X21vdmUoXHUwMDI2aW5vZGUtXHUwMDNlaV9pb19saXN0LCBcdTAwMjZzY2FubmVkKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIGxpc3QsIGlfaW9fbGlzdCkge1xuIFx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aXN3LVx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XG4gXHRcdCgqbnIpJiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRpZiAoKm5yIFx1MDAzZT0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkge1xuJiM0MztcdFx0XHRmdWxsID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0bGlzdF9zcGxpY2UoXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmdWxsO1xuIH1cbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaCgpIGluIGZzL2ZzLXdyaXRlYmFjay5jLCBhbHRlcmluZyBsaXN0IHRyYXZlcnNhbCBhbmQgcmVvcmRlcmluZyBsb2dpYyBmb3IgaW5vZGVzIG9uIHRoZSB3cml0ZWJhY2sgaW8gbGlzdHMgKGJfYXR0YWNoZWQgYW5kIGJfZGlydHlfdGltZSkgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwLiBUaGlzIGFmZmVjdHMgY29yZSBWRlMvTU0gd3JpdGViYWNrIGRhdGEgc3RydWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aGVuIG9mZmxpbmluZyBtZW1vcnkgY2dyb3VwcyB3aXRoIGFjdGl2ZSBvciBsYXp5dGltZSBkaXJ0eSBpbm9kZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC03MjcsMTkgJiM0Mzs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLAogCQkJCSAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdywKIAkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKm5yKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7CiYjNDM7CUxJU1RfSEVBRChzY2FubmVkKTsKJiM0MzsJYm9vbCBmdWxsID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0CiYjNDM7CSAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZgomIzQzOwkgKiByZS13YWxraW5nIGFuIGV2ZXItZ3Jvd2luZyBydW4gb2YgcHJlcGFyZWQgYW5kIHNraXBwZWQgb25lcy4KJiM0MzsJICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZQomIzQzOwkgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLgomIzQzOwkgKi8KJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7CiYjNDM7CQlsaXN0X21vdmUoJmFtcDtpbm9kZS0mZ3Q7aV9pb19saXN0LCAmYW1wO3NjYW5uZWQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7CiAJCWlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKQogCQkJY29udGludWU7CiAKIAkJaXN3LSZndDtpbm9kZXNbKm5yXSA9IGlub2RlOwogCQkoKm5yKSYjNDM7JiM0Mzs7CiAKLQkJaWYgKCpuciAmZ3Q7PSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoKm5yICZndDs9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHsKJiM0MzsJCQlmdWxsID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlsaXN0X3NwbGljZSgmYW1wO3NjYW5uZWQsIGxpc3QpOwomIzQzOwomIzQzOwlyZXR1cm4gZnVsbDsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgRGlmZioqCgpPa2F5LCBzbyB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgY29udGV4dC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZiBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBtb2RpZmllZCBmaWxlIGlzIGBmcy9mcy13cml0ZWJhY2suY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBnbyBkaXJlY3RseSB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDcyNy4gSSBjYW4gdXNlIG15IGhhbmR5IHJlYWQtZmlsZSB0b29sIG9yIG1heWJlIGp1c3QgYSBxdWljayBncmVwcGVyIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgYW5kIG15IGltbWVkaWF0ZSBuZWVkcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE1Olx0XHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKGlub2RlLVx1MDAzZWlfd2IsIG5ld193YiwgMSk7XG4gNzE2Olx0XHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xuIDcxNzpcdFx0cmV0dXJuO1xuIDcxODpcdFxuIDcxOTpcdG91dF9mcmVlOlxuIDcyMDpcdFx0YXRvbWljX2RlYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3MjE6XHRcdGlmIChuZXdfd2IpXG4gNzIyOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDcyMzpcdFx0a2ZyZWUoaXN3KTtcbiA3MjQ6XHR9XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIDcyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIDcyODpcdFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiA3Mjk6XHR7XG4gNzMwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wO1xuIDczMTpcdFx0TElTVF9IRUFEKHNjYW5uZWQpO1xuIDczMjpcdFx0Ym9vbCBmdWxsID0gZmFsc2U7XG4gNzMzOlx0XG4gNzM0Olx0XHQvKlxuIDczNTpcdFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcbiA3MzY6XHRcdCAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZlxuIDczNzpcdFx0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXG4gNzM4Olx0XHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXG4gNzM5Olx0XHQgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLlxuIDc0MDpcdFx0ICovXG4gNzQxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcbiA3NDI6XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmlub2RlLVx1MDAzZWlfaW9fbGlzdCwgXHUwMDI2c2Nhbm5lZCk7XG4gNzQzOlx0XG4gNzQ0Olx0XHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIDc0NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDc0NjpcdFxuIDc0NzpcdFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiA3NDg6XHRcdFx0KCpucikmIzQzOyYjNDM7O1xuIDc0OTpcdFxuIDc1MDpcdFx0XHRpZiAoKm5yIFx1MDAzZT0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkge1xuIDc1MTpcdFx0XHRcdGZ1bGwgPSB0cnVlO1xuIDc1MjpcdFx0XHRcdGJyZWFrO1xuIDc1MzpcdFx0XHR9XG4gNzU0Olx0XHR9XG4gNzU1Olx0XHRsaXN0X3NwbGljZShcdTAwMjZzY2FubmVkLCBsaXN0KTtcbiA3NTY6XHRcbiA3NTc6XHRcdHJldHVybiBmdWxsO1xuIDc1ODpcdH1cbiA3NTk6XHRcbiA3NjA6XHQvKipcbiA3NjE6XHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuIDc2MjpcdCAqIEB3YjogdGFyZ2V0IHdiXG4gNzYzOlx0ICpcbiA3NjQ6XHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvciYjMzk7cyB3YiBpbiBvcmRlclxuIDc2NTpcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXG4gNzY2Olx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxuIDc2NzpcdCAqL1xuIDc2ODpcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIDc2OTpcdHtcbiA3NzA6XHRcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XG4gNzcxOlx0XHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XG4gNzcyOlx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xuIDc3MzpcdFx0aW50IG5yO1xuIDc3NDpcdFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XG4gNzc1Olx0XG4gNzc2Olx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc3NzpcdFx0aWYgKCFpc3cpXG4gNzc4Olx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc3OTpcdFxuIDc4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3ODE6XHRcbiA3ODI6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc4MzpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzg0Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc4NTpcdFx0XHRpZiAobmV3X3diKVxuIDc4NjpcdFx0XHRcdGJyZWFrO1xuIDc4NzpcdFx0fVxuIDc4ODpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc4OTpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgc29tZSBjcnVjaWFsIGNsZWFudXAgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGFuIG9mZmxpbmUgQ0dXQiAod2hhdGV2ZXIgdGhhdCBhY3JvbnltIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0IOKAkyBwcm9iYWJseSBjb250ZXh0LXNwZWNpZmljKS4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIGZvY3VzaW5nIG9uIGl0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldGllcyBoZXJlIHRoYXQgcmVxdWlyZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LgoKSSBhbHNvIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoaXMgaXMgY3J1Y2lhbC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgKndoeSogb2YgaXRzIGV4aXN0ZW5jZSBhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoaXMgY291bGQgYmUgYW55d2hlcmUgZnJvbSBwcmUtc3dpdGNoIHZhbGlkYXRpb24gb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBhbnkgdHJpY2t5IGRlcGVuZGVuY2llcz8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggaXMgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgc3dpdGNoLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIGEgYnJvYWRlciB3b3JrZmxvdy4gS25vd2luZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYWxsb3dzIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBzeXN0ZW0gaXMgZG9pbmcsIGFuZCB0aGUgY29udGV4dCB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLiBUaGlzIGlzIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGZpbmQgcG90ZW50aWFsIGlzc3Vlcywgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3OTU6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3OTY6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzk3Olx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc5ODpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc5OTpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA4MDI6XHRcdGlmICghcmVzdGFydClcbiA4MDM6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA4MDQ6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDgwNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA4MDY6XHRcbiA4MDc6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA4MDg6XHRcdGlmIChuciA9PSAwKSB7XG4gODA5Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gODEwOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDgxMTpcdFx0XHRrZnJlZShpc3cpO1xuIDgxMjpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA4MTM6XHRcdH1cbiA4MTQ6XHRcbiA4MTU6XHRcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUod2IsIG5ld193YiwgbnIpO1xuIDgxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA4MTc6XHRcbiA4MTg6XHRcdHJldHVybiByZXN0YXJ0O1xuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHQvKipcbiA4MjI6XHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcbiA4MjM6XHQgKiBAd2JjOiB3cml0ZWJhY2tfY29udHJvbCBvZiBpbnRlcmVzdFxuIDgyNDpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gODI1Olx0ICpcbiA4MjY6XHQgKiBAaW5vZGUgaXMgbG9ja2VkIGFuZCBhYm91dCB0byBiZSB3cml0dGVuIGJhY2sgdW5kZXIgdGhlIGNvbnRyb2wgb2YgQHdiYy5cbiA4Mjc6XHQgKiBSZWNvcmQgQGlub2RlJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxuIDgyODpcdCAqIHdyaXRlYmFjayBjb21wbGV0aW9uLCB3YmNfZGV0YWNoX2lub2RlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFRoaXMgaXMgdXNlZFxuIDgyOTpcdCAqIHRvIHRyYWNrIHRoZSBjZ3JvdXAgd3JpdGViYWNrIGNvbnRleHQuXG4gODMwOlx0ICovXG4gODMxOlx0c3RhdGljIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIDgzMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgzMzpcdFx0X19yZWxlYXNlcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spXG4gODM0Olx0e1xuIDgzNTpcdFx0aWYgKCFpbm9kZV9jZ3diX2VuYWJsZWQoaW5vZGUpKSB7XG4gODM2Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODM3Olx0XHRcdHJldHVybjtcbiA4Mzg6XHRcdH1cbiA4Mzk6XHRcbiA4NDA6XHRcdHdiYy1cdTAwM2V3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcbiA4NDE6XHRcdHdiYy1cdTAwM2Vpbm9kZSA9IGlub2RlO1xuIDg0MjpcdFxuIDg0MzpcdFx0d2JjLVx1MDAzZXdiX2lkID0gd2JjLVx1MDAzZXdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VpZDtcbiA4NDQ6XHRcdHdiYy1cdTAwM2V3Yl9sY2FuZF9pZCA9IGlub2RlLVx1MDAzZWlfd2JfZnJuX3dpbm5lcjtcbiA4NDU6XHRcdHdiYy1cdTAwM2V3Yl90Y2FuZF9pZCA9IDA7XG4gODQ2Olx0XHR3YmMtXHUwMDNld2JfYnl0ZXMgPSAwO1xuIDg0NzpcdFx0d2JjLVx1MDAzZXdiX2xjYW5kX2J5dGVzID0gMDtcbiA4NDg6XHRcdHdiYy1cdTAwM2V3Yl90Y2FuZF9ieXRlcyA9IDA7XG4gODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGlzIGNhbGxpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjbHVlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHV0aWxpemVkLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSB3aWxsIHBhaW50IGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIHRoZSBmbG93IG9mIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTc2MC0vKipcbmZzL2ZzLXdyaXRlYmFjay5jOjc2MTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuZnMvZnMtd3JpdGViYWNrLmMtNzYyLSAqIEB3YjogdGFyZ2V0IHdiXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNzY3LSAqL1xuZnMvZnMtd3JpdGViYWNrLmM6NzY4OmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuZnMvZnMtd3JpdGViYWNrLmMtNzY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oPTIxMD12b2lkIGNncm91cF93cml0ZWJhY2tfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaDoyMTE6Ym9vbCBjbGVhbnVwX29mZmxpbmVfY2d3YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpO1xuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yMTItXG4tLVxubW0vYmFja2luZy1kZXYuYz01OTg9c3RhdGljIExJU1RfSEVBRChvZmZsaW5lX2Nnd2JzKTtcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm1tL2JhY2tpbmctZGV2LmM6NjAwOnN0YXRpYyBERUNMQVJFX1dPUksoY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmssIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4pO1xubW0vYmFja2luZy1kZXYuYy02MDEtXG4tLVxubW0vYmFja2luZy1kZXYuYz04NTI9c3RhdGljIHZvaWQgY2d3Yl9iZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXG5tbS9iYWNraW5nLWRldi5jOjg3OTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuIC0gdHJ5IHRvIHJlbGVhc2UgZHlpbmcgY2d3YnNcbm1tL2JhY2tpbmctZGV2LmMtODgwLSAqXG4tLVxubW0vYmFja2luZy1kZXYuYy04ODQtICovXG5tbS9iYWNraW5nLWRldi5jOjg4NTpzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkxMi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG5tbS9iYWNraW5nLWRldi5jOjkxMzpcdFx0d2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSlcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm1tL2JhY2tpbmctZGV2LmM9OTMyPXZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vYmFja2luZy1kZXYuYy05NDItXG5tbS9iYWNraW5nLWRldi5jOjk0MzpcdHF1ZXVlX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmspO1xubW0vYmFja2luZy1kZXYuYy05NDQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBPZmZsaW5lIENsZWFudXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3cgaGVyZS4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFuZCBgd2JfbWVtY2dfb2ZmbGluZWAgaXMgcmVzcG9uc2libGUgZm9yIHF1ZXVpbmcgdXAgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrYCBmb3IgbGF0ZXIgZXhlY3V0aW9uLiBSaWdodCwgYW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCBnZXRzIGludm9rZWQgd2hlbiBhIG1lbWNnIHRyYW5zaXRpb25zIHRvIGFuIG9mZmxpbmUgc3RhdGUuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3VhcmRpbmcgS2NvbmZpZyBvcHRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBrbm93LCBvZiBjb3Vyc2UsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBjb250cm9scyB0aGlzIGJlaGF2aW9yLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9mcy13cml0ZWJhY2suY2AgYW5kIGh1bnQgZG93biBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYWxsIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBibG9jazsgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBjYW5kaWRhdGUsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcy4gVGltZSB0byB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTIyOS1cbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbmZzL2ZzLXdyaXRlYmFjay5jLTIzMS1cbi0tXG5mcy9mcy13cml0ZWJhY2suYz0xMjc5PWZzX2luaXRjYWxsKGNncm91cF93cml0ZWJhY2tfaW5pdCk7XG5mcy9mcy13cml0ZWJhY2suYy0xMjgwLVxuZnMvZnMtd3JpdGViYWNrLmM6MTI4MTojZWxzZVx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbmZzL2ZzLXdyaXRlYmFjay5jLTEyODItXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9MTMzNj1zdGF0aWMgaW5saW5lIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTEzNDItXG5mcy9mcy13cml0ZWJhY2suYzoxMzQzOiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbmZzL2ZzLXdyaXRlYmFjay5jLTEzNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgbGluZXMgMjMwIHRocm91Z2ggMTI4MSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGRpcmVjdGl2ZS4gUmlnaHQsIHRoaXMgc2NyZWFtcyB0aGF0IHRoZSBjb2RlIGJsb2NrIHdpdGhpbiB0aGF0IHJhbmdlIGlzIG9ubHkgYWN0aXZlIGlmIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGF0IG9wdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG5vdyB0byBmaW5kIHdoZXJlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgaXMgZGVmaW5lZC4gSSBiZXQgaXQmIzM5O2xsIGJlIGluIHRoZSBgY2dyb3VwYCBvciBgd3JpdGViYWNrYCBLY29uZmlnIHNlY3Rpb24sIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNncm91cC1yZWxhdGVkIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGVuIEkgY2FuIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIGNvZGUgYmxvY2sgaXMgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1dSSVRFQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEyNT1jb25maWcgQkxLX0NHUk9VUFxuLS1cbmluaXQvS2NvbmZpZy0xMTQ2LVxuaW5pdC9LY29uZmlnOjExNDc6Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbmluaXQvS2NvbmZpZy0xMTQ4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZm9jdXNpbmcgb24gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQ3LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBhcmVhIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcgd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIG9yIHByb2JsZW0gaW4gbWluZCB0aGF0IEkmIzM5O20gaG9waW5nIHRvIGFkZHJlc3MgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGp1c3QgYSBnZW5lcmFsIGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHRoZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgYW5kIGxpbmUgMTE0NyBzaG91bGQgcHJvdmlkZSBzb21lIHZhbHVhYmxlIGluc2lnaHRzLCBob3BlZnVsbHkhIFRpbWUgdG8gY3JhY2sgaXQgb3Blbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDZ3JvdXAgV3JpdGViYWNrIFBhdGNoKioKCk9rYXksIHNvIGBDR1JPVVBfV1JJVEVCQUNLYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgbG9uZyBhcyBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAgYXJlIGVuYWJsZWQuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggY29uY2VybmluZyB0aGUgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBsaXN0IG9mIGlub2RlcyBpcyBwcm9jZXNzZWQuIEJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeWAsIGp1c3Qgd2Fsa2luZyB0aHJvdWdoIHRoZSBsaXN0LiBGb3IgZWFjaCBgaW5vZGVgIGluIHRoZSBpbnB1dCBgbGlzdGAsIGl0JiMzOTtkIHJ1biBgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoYCwgYWRkIHRoZSBpbm9kZSB0byBhbiBhcnJheSBgaXN3LSZndDtpbm9kZXNgIGlmIHN1Y2Nlc3NmdWwsIGFuZCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgYCpucmAuIElmIHRoZSBjb3VudGVyIGhpdCBhIG1heGltdW0gdGhyZXNob2xkLCBpdCByZXR1cm5lZCB0cnVlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGUgbGlzdCBpdHNlbGYsIGBsaXN0YCwgd2FzbiYjMzk7dCBtb2RpZmllZCBkdXJpbmcgdGhpcyBpdGVyYXRpb24uIEl0IHdhcyBhIHNpbXBsZSwgc2VxdWVudGlhbCBwYXNzLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgTElTVF9IRUFEKHNjYW5uZWQpYCBhbmQgYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBXZSYjMzk7cmUgbm93IGl0ZXJhdGluZyBpbiByZXZlcnNlIG9yZGVyLiBJbnNpZGUgdGhlIGxvb3AsIGl0JiMzOTtzIG1vdmluZyBlYWNoIGBpbm9kZWAgZnJvbSB0aGUgb3JpZ2luYWwgYGxpc3RgIHRvIHRoaXMgdGVtcG9yYXJ5IGBzY2FubmVkYCBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY29tbWVudHMgbWVudGlvbiBtb3ZpbmcgJiMzNDtzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0IGVuZCYjMzQ7LiBJIHNlZSB0aGUgbG9naWM6IFRoaXMgYXBwcm9hY2ggc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuIEJ5IG1vdmluZyBwcm9jZXNzZWQgaW5vZGVzIHRvIHRoZSBlbmQsIHRoZSBuZXh0IHBhc3Mgd2lsbCBzdGFydCB3aXRoIHRoZSByZW1haW5pbmcsIHVucHJvY2Vzc2VkLCBpbm9kZXMuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW5jeS4gTm93LCBhZnRlciB0aGUgbG9vcCwgd2UgYGxpc3Rfc3BsaWNlYCBmcm9tIGBzY2FubmVkYCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGBsaXN0YC4KClNvLCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmc/IFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgb3JkZXIgdGhlIGlub2RlcyBhcmUgcHJvY2Vzc2VkIGluIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgbWF0dGVycy4gVGhlIGNoYW5nZSBtaWdodCBiZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHRoZSBmYWNlIG9mIG9uZ29pbmcgbW9kaWZpY2F0aW9ucyB0byB0aGF0IGBsaXN0YCwgd2hlcmUgZWFybGllciBpbm9kZXMgaW4gdGhlIGxpc3QgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvciBwcmVwYXJlZCwgYnV0IHN0aWxsIHByZXNlbnQgaW4gdGhlIGxpc3QuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgaWYgdGhlIGxpc3QgaXMgZ3Jvd2luZyBhbmQgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LgoKVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYWRkIHRoZSBpbm9kZSB0byBgaXN3LSZndDtpbm9kZXNgLiBUaGUgYHJldHVybmAgY29uZGl0aW9ucyBoYXZlIGFsc28gYmVlbiBzbGlnaHRseSBtb2RpZmllZCBpbiBob3cgdGhlIGBmdWxsYCBmbGFnIGlzIHNldCwgYnV0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIHRoZSBzYW1lLCBzbyB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIGEgZnVsbCBhcnJheS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucyBpbnNpZGUgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz01OTA9dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTYyMy1cbmZzL2ZzLXdyaXRlYmFjay5jOjYyNDpzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2ZzLXdyaXRlYmFjay5jLTYyNS1cdFx0XHRcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193Yilcbi0tXG5mcy9mcy13cml0ZWJhY2suYz02NzU9c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTcwOS1cbmZzL2ZzLXdyaXRlYmFjay5jOjcxMDpcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuZnMvZnMtd3JpdGViYWNrLmMtNzExLVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTcyNj1zdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNzQzLVxuZnMvZnMtd3JpdGViYWNrLmM6NzQ0Olx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbmZzL2ZzLXdyaXRlYmFjay5jLTc0NS1cdFx0XHRjb250aW51ZTtcbi0tXG5mcy9mcy13cml0ZWJhY2suYz0xMjU3PXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0xMjYyLVx0LypcbmZzL2ZzLXdyaXRlYmFjay5jOjEyNjM6XHQgKiBQYWlycyB3aXRoIHNtcF9tYigpIGluIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaCgpOiB3ZSBlaXRoZXIgb2JzZXJ2ZVxuZnMvZnMtd3JpdGViYWNrLmMtMTI2NC1cdCAqIGEgbm9uLXplcm8gY291bnRlciBhbmQgd2FpdCwgb3IgdGhlIHN3aXRjaGVyIHNlZXMgU0JfQUNUSVZFIGNsZWFyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OgoKKipEaXZpbmcgaW50byBgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgc29tZXRoaW5nIHRvIGRvIHdpdGggcHJlcGFyaW5nIGFuIGlub2RlIGZvciBhICp3YnMgc3dpdGNoKi4gSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgLSB3aGljaCBpbm9kZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgb2YgdGhpcyAmIzM0O3dicyYjMzQ7PyBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiB3cml0ZWJhY2sgb3IgYnVmZmVyaW5nIHN0cmF0ZWd5IGNoYW5nZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkga25vd2xlZGdlIGFib3V0IGlub2RlIHN0YXRlcywgZGlydHkgcGFnZXMsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGJhY2tpbmcgc3RvcmFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzd2l0Y2ggdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aHMgaW4gdGhlIGNvZGUuIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gbG9hZCB1cCB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNDpcdHN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIDYyNTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxuIDYyNjpcdHtcbiA2Mjc6XHRcdC8qIEF2b2lkIHRoZSBhdG9taWNfaW5jL3NtcF9tYiBkYW5jZSBvbmNlIFNCX0FDVElWRSBpcyBnb25lLiAqL1xuIDYyODpcdFx0aWYgKCEoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9BQ1RJVkUpKVxuIDYyOTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNjMwOlx0XG4gNjMxOlx0XHQvKlxuIDYzMjpcdFx0ICogUGFpcnMgd2l0aCBzbXBfbWIoKSBpbiBjZ3JvdXBfd3JpdGViYWNrX3Vtb3VudCgpOiB0aGUgdW1vdW50ZXIgZWl0aGVyXG4gNjMzOlx0XHQgKiBzZWVzIGEgbm9uLXplcm8gY291bnRlciBhbmQgd2FpdHMsIG9yIHdlIHNlZSBTQl9BQ1RJVkUgY2xlYXIgYmVsb3cuXG4gNjM0Olx0XHQgKi9cbiA2MzU6XHRcdGNncm91cF93cml0ZWJhY2tfcGluKGlub2RlLVx1MDAzZWlfc2IpO1xuIDYzNjpcdFx0c21wX21iKCk7XG4gNjM3Olx0XG4gNjM4Olx0XHRpZiAoSVNfREFYKGlub2RlKSlcbiA2Mzk6XHRcdFx0Z290byBvdXRfdW5waW47XG4gNjQwOlx0XG4gNjQxOlx0XHQvKiB3aGlsZSBob2xkaW5nIElfV0JfU1dJVENILCBubyBvbmUgZWxzZSBjYW4gdXBkYXRlIHRoZSBhc3NvY2lhdGlvbiAqL1xuIDY0MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gNjQzOlx0XHRpZiAoIShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0FDVElWRSkgfHxcbiA2NDQ6XHRcdCAgICBpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfV0JfU1dJVENIIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpIHx8XG4gNjQ1Olx0XHQgICAgaW5vZGVfdG9fd2IoaW5vZGUpID09IG5ld193Yikge1xuIDY0NjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDY0NzpcdFx0XHRnb3RvIG91dF91bnBpbjtcbiA2NDg6XHRcdH1cbiA2NDk6XHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9XQl9TV0lUQ0gpO1xuIDY1MDpcdFx0X19pZ2V0KGlub2RlKTtcbiA2NTE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gNjUyOlx0XG4gNjUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA2NTQ6XHRcbiA2NTU6XHRvdXRfdW5waW46XG4gNjU2Olx0XHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKGlub2RlLVx1MDAzZWlfc2IpO1xuIDY1NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDY1ODpcdH1cbiA2NTk6XHRcbiA2NjA6XHRzdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuIDY2MTpcdFx0XHRcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXG4gNjYyOlx0e1xuIDY2MzpcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZpc3ctXHUwMDNlbGlzdCwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dic19jdHhzKSlcbiA2NjQ6XHRcdFx0cXVldWVfd29yayhpc3dfd3EsIFx1MDAyNndiLVx1MDAzZXN3aXRjaF93b3JrKTtcbiA2NjU6XHR9XG4gNjY2Olx0XG4gNjY3Olx0LyoqXG4gNjY4Olx0ICogaW5vZGVfc3dpdGNoX3dicyAtIGNoYW5nZSB0aGUgd2IgYXNzb2NpYXRpb24gb2YgYW4gaW5vZGVcbiA2Njk6XHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxuIDY3MDpcdCAqIEBuZXdfd2JfaWQ6IElEIG9mIHRoZSBuZXcgd2JcbiA2NzE6XHQgKlxuIDY3MjpcdCAqIFN3aXRjaCBAaW5vZGUmIzM5O3Mgd2IgYXNzb2NpYXRpb24gdG8gdGhlIHdiIGlkZW50aWZpZWQgYnkgQG5ld193Yl9pZC4gIFRoZVxuIDY3MzpcdCAqIHN3aXRjaGluZyBpcyBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1heSBmYWlsIHNpbGVudGx5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgV3JpdGViYWNrIExpc3QgUmVvcmRlcmluZyBpbiBtZW1jZyBPZmZsaW5lIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBkb2luZyBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoaW4gdGhlIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0LCBgaV9pb19saXN0YCwgaW4gcmV2ZXJzZSBvcmRlciB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBFbnRyaWVzIGFyZSBiZWluZyBtb3ZlZCB0byBhIGBzY2FubmVkYCBsaXN0IHVzaW5nIGBsaXN0X21vdmVgLCBhbmQgdGhlbiBgc2Nhbm5lZGAgaXMgc3BsaWNlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGxpc3QsIGBsaXN0YCB2aWEgYGxpc3Rfc3BsaWNlYC4KCkFoYSwgYGxpc3RfbW92ZWAgcHV0cyBlbGVtZW50cyBhdCB0aGUgKmhlYWQqIG9mIGBzY2FubmVkYC4gU2luY2Ugd2UgYXJlIGl0ZXJhdGluZyAqYmFja3dhcmRzKiwgdGhpcyBlZmZlY3RpdmVseSByZXZlcnNlcyB0aGUgbGlzdCBvcmRlci4gVGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgbGlzdCBiZWNvbWVzIHRoZSAqZmlyc3QqIGluIGBzY2FubmVkYCwgYW5kIHNvIG9uLiBUaGVuIGBsaXN0X3NwbGljZWAgaW5zZXJ0cyB0aGUgZW50aXJlIGBzY2FubmVkYCBsaXN0IGF0IHRoZSAqaGVhZCogb2YgdGhlIG9yaWdpbmFsIGBsaXN0YC4KCkNydWNpYWxseSwgdGhpcyBpcyBtYW5pcHVsYXRpbmcgYHdiLSZndDtiX2F0dGFjaGVkYCBhbmQgYHdiLSZndDtiX2RpcnR5X3RpbWVgIGxpc3RzLCB3aGljaCBhcmUgcmVsYXRlZCB0byB3cml0ZWJhY2sgYmVoYXZpb3IuIFRoZSBsb2NrIGB3Yi0mZ3Q7bGlzdF9sb2NrYCBpcyBoZWxkLCB3aGljaCBpcyBnb29kLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoYXQgdGhlIGxpc3Qgb3JkZXIgaXMgYmVpbmcgY2hhbmdlZCBkdXJpbmcgdGhlIG9mZmxpbmUgY2xlYW51cCBwcm9jZXNzLgoKVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHJhdGlvbmFsZTogdGhlIHJlb3JkZXJpbmcgYWltcyB0byBoYXZlIG5ld2VyIHVuc2Nhbm5lZCBpbm9kZXMgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdHMuIEZvciBgYl9kaXJ0eV90aW1lYCwgdGhpcyBoZWxwcyB0aGUgY29kZSBwaWNrIHVwIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGFuZCBmb3IgYGJfYXR0YWNoZWRgLCB0aGUgbGlzdCYjMzk7cyBvcmRlciBkb2VzbiYjMzk7dCBtYXR0ZXIuCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IENhbiB0aGlzIGNvZGUgcGF0aCBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQSBjZ3JvdXAgaXMgY3JlYXRlZCwgZmlsZXMgYXJlIGRpcnRpZWQgb3IgYXR0YWNoZWQgdG8gaXQsIGFuZCB0aGUgY2dyb3VwIGlzIGRlbGV0ZWQuIFRoaXMgcHJvY2VzcyBjYWxscyBgd2JfbWVtY2dfb2ZmbGluZWAsIHdoaWNoIHRoZW4gcXVldWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2AuIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBjYWxscyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHJlZ3VsYXJseSBleGVyY2lzZSBjZ3JvdXBzLgoKVGhpcyBpcyBjb3JlIHN1YnN5c3RlbSBzdHVmZjogbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIFZGUywgc28gaXQgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBObyBzcGVjaWFsIGhhcmR3YXJlIGlzIHJlcXVpcmVkLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgVFJVRS4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gSXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3Mgbm90IGlubGluZSAoc3RhdGljIGJvb2wsIG5vdCBzdGF0aWMgaW5saW5lKS4gSXQgaXMgY2FsbGVkIGZyb20gYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgd2hpY2ggaXMgYSBnbG9iYWwgZnVuY3Rpb24gZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvd3JpdGViYWNrLmhgIGFuZCBjYWxsZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBJJiMzOTtsbCB3YW50IHRvIHRhcmdldCBib3RoIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBhbmQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gQWxzbywgSSB3aWxsIGNoZWNrIHRoZSByZWxldmFuY2Ugb2YgYHdiX21lbWNnX29mZmxpbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTQ9c3RydWN0IGJkaV93cml0ZWJhY2sgKndiX2dldF9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTU2LVx0XHRcdFx0ICAgIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTU3OnZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OC12b2lkIHdiX2Jsa2NnX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7XG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oPTM1OD1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrZWRfaW5vZGVfdG9fd2JfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Mi1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaDozNjM6c3RhdGljIGlubGluZSB2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2NC17XG4tLVxubW0vYmFja2luZy1kZXYuYz02NjY9c3RhdGljIGludCBjZ3diX2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNzIzLVx0ICogd2hldGhlciB0aGV5JiMzOTtyZSBzdGlsbCBvbmxpbmUuICBEb24mIzM5O3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcdCAqIFNlZSB3Yl9tZW1jZ19vZmZsaW5lKCkgYW5kIHdiX2Jsa2NnX29mZmxpbmUoKS5cbm1tL2JhY2tpbmctZGV2LmMtNzI1LVx0ICovXG4tLVxubW0vYmFja2luZy1kZXYuYz04ODU9c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vYmFja2luZy1kZXYuYy05MjYtLyoqXG5tbS9iYWNraW5nLWRldi5jOjkyNzogKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbm1tL2JhY2tpbmctZGV2LmMtOTI4LSAqIEBtZW1jZzogbWVtY2cgYmVpbmcgb2ZmbGluZWRcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkzMS0gKi9cbm1tL2JhY2tpbmctZGV2LmM6OTMyOnZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9iYWNraW5nLWRldi5jLTkzMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTQyOTA9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzA4LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQzMDk6XHR3Yl9tZW1jZ19vZmZsaW5lKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzEwLVx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGlzIGJsb2NrIGRldmljZSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBJJiMzOTt2ZSBhbHJlYWR5IHNjcnV0aW5pemVkIGEgZmV3IHBvdGVudGlhbCBhcmVhcywgYnV0IG5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hvbGQgb24sIGhhdmUgd2UgdGhvcm91Z2hseSBleGFtaW5lZCBgd2JfYmxrY2dfb2ZmbGluZWAgeWV0PyYjMzQ7IEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgc3BhY2UgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBvYnZpb3VzIGJhc2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCB0aGUgc21va2luZyBndW4gb3IgYSBwb3RlbnRpYWwgY29udHJpYnV0b3IgdG8gdGhlIGN1cnJlbnQgb2JzZXJ2YXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIEkvTyBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2JfYmxrY2dfb2ZmbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9MTM0Mj1zdGF0aWMgdm9pZCBibGtjZ19jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMzQ0LVx0LyogdGhpcyBwcmV2ZW50cyBhbnlvbmUgZnJvbSBhdHRhY2hpbmcgb3IgbWlncmF0aW5nIHRvIHRoaXMgYmxrY2cgKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMzQ1Olx0d2JfYmxrY2dfb2ZmbGluZShjc3MpO1xuYmxvY2svYmxrLWNncm91cC5jLTEzNDYtXG4tLVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oPTE1Nz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaDoxNTg6dm9pZCB3Yl9ibGtjZ19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OS1cbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg9MzYzPXN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMzY2LVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjM2NzpzdGF0aWMgaW5saW5lIHZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2OC17XG4tLVxubW0vYmFja2luZy1kZXYuYz02NjY9c3RhdGljIGludCBjZ3diX2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNzIzLVx0ICogd2hldGhlciB0aGV5JiMzOTtyZSBzdGlsbCBvbmxpbmUuICBEb24mIzM5O3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcdCAqIFNlZSB3Yl9tZW1jZ19vZmZsaW5lKCkgYW5kIHdiX2Jsa2NnX29mZmxpbmUoKS5cbm1tL2JhY2tpbmctZGV2LmMtNzI1LVx0ICovXG4tLVxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9iYWNraW5nLWRldi5jLTk0Ni0vKipcbm1tL2JhY2tpbmctZGV2LmM6OTQ3OiAqIHdiX2Jsa2NnX29mZmxpbmUgLSBraWxsIGFsbCB3YiYjMzk7cyBhc3NvY2lhdGVkIHdpdGggYSBibGtjZyBiZWluZyBvZmZsaW5lZFxubW0vYmFja2luZy1kZXYuYy05NDgtICogQGNzczogYmxrY2cgYmVpbmcgb2ZmbGluZWRcbi0tXG5tbS9iYWNraW5nLWRldi5jLTk1MS0gKi9cbm1tL2JhY2tpbmctZGV2LmM6OTUyOnZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vYmFja2luZy1kZXYuYy05NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBTd2l0Y2ggQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNoYW5nZSByZXNpZGVzLiBGcm9tIHRoZXJlLCBJIHNlZSB0aGF0IGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgY2FsbGluZyBpdCwgYW5kIHRoYXQgZnVuY3Rpb24gaW4gdHVybiBpcyBkcml2ZW4gYnkgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAuIEFscmlnaHQsIHRoYXQgcGFpbnRzIGEgZ29vZCBpbml0aWFsIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4uCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBvciBgd2JfcXVldWVfaXN3YCBhcmUgcmVsZXZhbnQgaGVyZS4gQWgsIHJpZ2h0LiBJdCBzZWVtcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGNhbGxzIGB3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpYC4gVGhpcyBxdWV1ZXMgYHdiLSZndDtzd2l0Y2hfd29ya2AsIGFuZCB0aGF0IHdpbGwgZXhlY3V0ZSBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYC4gU28sIHRoYXQgbWVhbnMgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAgaXMgY2VudHJhbC4KClRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBnbyByaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBpbiBgZnMvZnMtd3JpdGViYWNrLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0XHR3Yl9wdXQobmV3X3diKTtcbiA1ODY6XHRcdGtmcmVlKGlzdyk7XG4gNTg3Olx0XHRhdG9taWNfZGVjKFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xuIDU4ODpcdH1cbiA1ODk6XHRcbiA1OTA6XHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcbiA1OTM6XHRcdFx0XHRcdFx0XHQgICAgc3dpdGNoX3dvcmspO1xuIDU5NDpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LCAqbmV4dF9pc3c7XG4gNTk1Olx0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGlzdDtcbiA1OTY6XHRcbiA1OTc6XHRcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm5ld193Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xuIDU5ODpcdFx0LypcbiA1OTk6XHRcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcbiA2MDA6XHRcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXG4gNjAxOlx0XHQgKi9cbiA2MDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHQvKlxuIDYwNjpcdFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xuIDYwNzpcdFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cbiA2MDg6XHRcdCAqL1xuIDYwOTpcdFx0d2JfZ2V0KG5ld193Yik7XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXG4gNjEyOlx0XHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcbiA2MTM6XHRcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXG4gNjE0Olx0XHQgKiBMZXQmIzM5O3MgY29udGludWUgYWZ0ZXIgSV9XQl9TV0lUQ0ggaXMgZ3VhcmFudGVlZCB0byBiZVxuIDYxNTpcdFx0ICogdmlzaWJsZS5cbiA2MTY6XHRcdCAqL1xuIDYxNzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNjE4Olx0XG4gNjE5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXG4gNjIwOlx0XHRcdHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dicyhuZXdfd2IsIGlzdyk7XG4gNjIxOlx0XHR3Yl9wdXQobmV3X3diKTtcbiA2MjI6XHR9XG4gNjIzOlx0XG4gNjI0Olx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJvdHRsZW5lY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIHNlZWluZyBzb21lIHBlcmZvcm1hbmNlIGRpcHMsIGFuZCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSByZXZlYWxpbmcgdGhlbXNlbHZlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG1vcmUgY29tbW9uIGFyZWFzLCBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIG1pZ2h0IGJlIGF0IHBsYXkuIFRoZSByZWNlbnQgY29kZSBjaGFuZ2VzIGFuZCBsb2FkIHBhdHRlcm5zIGFyZSBtYWtpbmcgbWUgdGhpbmsgd2UgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIEkvTyBvcGVyYXRpb25zIGFuZCBzY2hlZHVsaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYC4gSXQmIzM5O3MgYSBiaXQgbG93ZXItbGV2ZWwsIGJ1dCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBvdmVyYWxsIEkvTyBmbG93IG1lYW5zIGl0JiMzOTtzIHdvcnRoIGEgbG9vayBiZWZvcmUgSSBkaXNtaXNzIGl0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgdW5kZXIgY3VycmVudCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHRcbiA1MzY6XHRcdGlub2RlcCA9IGlzdy1cdTAwM2Vpbm9kZXM7XG4gNTM3Olx0XHQvKlxuIDUzODpcdFx0ICogQnkgdGhlIHRpbWUgY29udHJvbCByZWFjaGVzIGhlcmUsIFJDVSBncmFjZSBwZXJpb2QgaGFzIHBhc3NlZFxuIDUzOTpcdFx0ICogc2luY2UgSV9XQl9TV0lUQ0ggYXNzZXJ0aW9uIGFuZCBhbGwgd2Igc3RhdCB1cGRhdGUgdHJhbnNhY3Rpb25zXG4gNTQwOlx0XHQgKiBiZXR3ZWVuIHVubG9ja2VkX2lub2RlX3RvX3diX2JlZ2luL2VuZCgpIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4gNTQxOlx0XHQgKiBzeW5jaHJvbml6aW5nIGFnYWluc3QgdGhlIGlfcGFnZXMgbG9jay5cbiA1NDI6XHRcdCAqXG4gNTQzOlx0XHQgKiBHcmFiYmluZyBvbGRfd2ItXHUwMDNlbGlzdF9sb2NrLCBpbm9kZS1cdTAwM2VpX2xvY2sgYW5kIHRoZSBpX3BhZ2VzIGxvY2tcbiA1NDQ6XHRcdCAqIGdpdmVzIHVzIGV4Y2x1c2lvbiBhZ2FpbnN0IGFsbCB3YiByZWxhdGVkIG9wZXJhdGlvbnMgb24gQGlub2RlXG4gNTQ1Olx0XHQgKiBpbmNsdWRpbmcgSU8gbGlzdCBtYW5pcHVsYXRpb25zIGFuZCBzdGF0IHVwZGF0ZXMuXG4gNTQ2Olx0XHQgKi9cbiA1NDc6XHRyZWxvY2s6XG4gNTQ4Olx0XHRpZiAob2xkX3diIFx1MDAzYyBuZXdfd2IpIHtcbiA1NDk6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU1MDpcdFx0XHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiA1NTE6XHRcdH0gZWxzZSB7XG4gNTUyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA1NTM6XHRcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZvbGRfd2ItXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNTU0Olx0XHR9XG4gNTU1Olx0XG4gNTU2Olx0XHR3aGlsZSAoKmlub2RlcCkge1xuIDU1NzpcdFx0XHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVx1MDAzZWlfd2IgIT0gb2xkX3diKTtcbiA1NTg6XHRcdFx0aWYgKGlub2RlX2RvX3N3aXRjaF93YnMoKmlub2RlcCwgb2xkX3diLCBuZXdfd2IpKVxuIDU1OTpcdFx0XHRcdG5yX3N3aXRjaGVkJiM0MzsmIzQzOztcbiA1NjA6XHRcdFx0aW5vZGVwJiM0MzsmIzQzOztcbiA1NjE6XHRcdFx0aWYgKCppbm9kZXAgXHUwMDI2XHUwMDI2IG5lZWRfcmVzY2hlZCgpKSB7XG4gNTYyOlx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV3X3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTYzOlx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTY0Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTY1Olx0XHRcdFx0Z290byByZWxvY2s7XG4gNTY2Olx0XHRcdH1cbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU3MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTcxOlx0XG4gNTcyOlx0XHR1cF9yZWFkKFx1MDAyNmJkaS1cdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xuIDU3MzpcdFxuIDU3NDpcdFx0aWYgKG5yX3N3aXRjaGVkKSB7XG4gNTc1Olx0XHRcdHdiX3dha2V1cChuZXdfd2IpO1xuIDU3NjpcdFx0XHR3Yl9wdXRfbWFueShvbGRfd2IsIG5yX3N3aXRjaGVkKTtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGZvciAoaW5vZGVwID0gaXN3LVx1MDAzZWlub2RlczsgKmlub2RlcDsgaW5vZGVwJiM0MzsmIzQzOykge1xuIDU4MDpcdFx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVx1MDAzZWlfc2I7XG4gNTgxOlx0XG4gNTgyOlx0XHRcdGlwdXQoKmlub2RlcCk7XG4gNTgzOlx0XHRcdGNncm91cF93cml0ZWJhY2tfdW5waW4oc2IpO1xuIDU4NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmluZyBXcml0ZWJhY2sgQmVoYXZpb3IqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIG5lZWQgdG8gbWFuYWdlIHdyaXRlYmFjayBiZWhhdmlvci4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYC4gTm93LCBkb2VzIHRoYXQgZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IExldCBtZSBkb3VibGUtY2hlY2suIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZzoKCmBgYGtjb25maWcKY29uZmlnIENHUk9VUF9XUklURUJBQ0sKCWJvb2wKCWRlcGVuZHMgb24gTUVNQ0cgJmFtcDsmYW1wOyBCTEtfQ0dST1VQCglkZWZhdWx0IHkKYGBgCgpBaCwgcmlnaHQsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBvcHRpb24sIGl0IGRlZmF1bHRzIHRvIGB5YCBhcyBsb25nIGFzIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhcmUgc2V0LiBTbyBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAgYXJlIGFsbCBjcnVjaWFsIHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgZmlsZSBhbmQgcmVsYXRlZCBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWFyY2ggZm9yIHRob3NlIGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHdpdGhpbiB0aGUgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25kaXRpb25hbCBidWlsZHMgaW4gcGxheSByZWxhdGVkIHRvIHdyaXRlYmFjay4gSXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjayBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jZWQgYnkgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jPTIyMz12b2lkIHdiX3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IHdiX2NvbXBsZXRpb24gKmRvbmUpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxuZnMvZnMtd3JpdGViYWNrLmM6MjMwOiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuZnMvZnMtd3JpdGViYWNrLmMtMjMxLVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTE1MTg9c3RhdGljIGJvb2wgaW5vZGVfZGlydGllZF9hZnRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHQpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMC1cdGJvb2wgcmV0ID0gdGltZV9hZnRlcihpbm9kZS1cdTAwM2VkaXJ0aWVkX3doZW4sIHQpO1xuZnMvZnMtd3JpdGViYWNrLmM6MTUyMTojaWZuZGVmIENPTkZJR182NEJJVFxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMi1cdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzkzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHdyaXRlYmFjayBjb2RlIHdpdGhpbiBgZnMvZnMtd3JpdGViYWNrLmNgLCBhbmQgdGhlIG9ubHkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBJIHNlZSBpbW1lZGlhdGVseSByZWxhdGVkIHRvIGl0IGlzIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIFRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHJpZ2h0PyBCdXQgYENHUk9VUF9XUklURUJBQ0tgIGlzbiYjMzk7dCBhIHNpbXBsZSBmbGFnLCBpdCByZWxpZXMgb24gdHdvIG90aGVyIGNvbmZpZ3VyYXRpb25zOiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpZiBgTUVNQ0dgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgcm9vdCBjb25maWd1cmF0aW9ucyBpZiBwb3NzaWJsZSwgdG8gYmUgc3VyZSB0aGlzIGlzIHNldCB1cCBhcyByZXF1aXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBNRU1DR2AgcmVsaWVzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0ckJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBhcm91bmQgbGluZSAxMDg1IG9mIGBpbml0L0tjb25maWdgLiBUaGlzIHN1Z2dlc3RzIEkmIzM5O20gZGVhbGluZyB3aXRoIGVpdGhlciBhIGZhaXJseSBlc3RhYmxpc2hlZCBjb21wb25lbnQgb3IgcG90ZW50aWFsbHkgYSBzbGlnaHRseSBsb3dlci1sZXZlbCBvcHRpb24gd2l0aGluIGEgbGFyZ2VyIHN0cnVjdHVyZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYGluaXQvS2NvbmZpZ2AsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGtlcm5lbCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBlYXJseSBib290IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBib290LXRpbWUgZGVwZW5kZW5jeS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgc2VjdGlvbiBjbG9zZWx5LiBJdCBjb3VsZCBiZSBhIHNpbXBsZSBvcHRpb24gZGVmaW5pdGlvbiwgYSBkZXBlbmRlbmN5IGNoZWNrLCBvciBldmVuIGEgbW9yZSBjb21wbGV4IGBpZi9lbHNlYCBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGRlc2lyZWQgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gYWN0dWFsbHkgaG9sZHMsIGFuZCBJIGNhbiBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFnYWluLCBhbmQgSSYjMzk7bSByZW1pbmRlZCB0aGF0IHRoZSBgTUVNQ0dgIGZlYXR1cmUsIHdoaWNoIEkga25vdyBpcyBjcnVjaWFsIGZvciBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIG5lc3RlZCB1bmRlciB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2Agb3B0aW9uLiBUaGF0JiMzOTtzIGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBhcyB1c3VhbC4gTWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb3JlIGNvbnRyb2wgZ3JvdXAgc3R1ZmYgbGl2ZXMuIEFsc28sIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGBCTEtfQ0dST1VQYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZCBjb3JyZWN0bHkgZm9yIHdoYXRldmVyIHNldHVwIEkgYW0gd29ya2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYEJMS19DR1JPVVBgIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBCTEtfQ0dST1VQYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQkxLX0NHUk9VUGAgY2FuIGJlIHNlbGVjdGVkPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIGNob2ljZXM/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMsIG9yIGlzIGl0IG1vcmUgb2YgYSBtb2R1bGFyIHJlbGF0aW9uc2hpcD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgaGF2ZSB0byBzYXkuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuMTE0MDpcdFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxuMTE0MTpcdFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxuMTE0MjpcdFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XG4xMTQzOlx0XHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXG4xMTQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjc0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBjZ3JvdXAgd3JpdGViYWNrIG9wdGltaXphdGlvbiBwYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNncm91cCB3cml0ZWJhY2sgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdoZW4gYSBjZ3JvdXAgaXMgYmVpbmcgdGFrZW4gb2ZmbGluZS4gIFRoZSBlc3NlbnRpYWwgY29uZmlncyByZXF1aXJlZCBhcmUgYENHUk9VUF9XUklURUJBQ0tgLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdyYWIgdGhlIGNvbW1pdCBsb2csIGlmIGF2YWlsYWJsZSwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvZGUgY2hhbmdlLCBidXQgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIGBnaXQgbG9nYCBoZXJlLiBJ4oCZbGwgbmVlZCB0byB3b3JrIHdpdGggd2hhdCBJIGhhdmUuCgpUaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaXMgZm9jdXNlZCBvbiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuICBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBhIGxpc3Qgb2YgaW5vZGVzLCBhbmQgaWYgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAgcmV0dXJuZWQgdHJ1ZSBvbiBhbiBpbm9kZSwgaXQgd291bGQgY29udGludWUgdG8gdGhlIG5leHQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcXVhZHJhdGljIHRpbWUgY29tcGxleGl0eSBkdWUgdG8gcmVzY2FubmluZyBhbHJlYWR5IHByb2Nlc3NlZCBpbm9kZXMgd2l0aGluIGEgbG9vcCB0cmlnZ2VyZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmV2ZXJzZSBpdGVyYXRpb24gd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCBuYW1lZCBgc2Nhbm5lZGAuICBJ4oCZbSBzZWVpbmcgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZyBoZXJlLCBhcyB0aGUgbm9kZSBvcmRlciBpcyBiZWluZyBmdW5kYW1lbnRhbGx5IGFsdGVyZWQgd2l0aGluIGB3Yi0mZ3Q7Yl9hdHRhY2hlZGAgYW5kIGB3Yi0mZ3Q7Yl9kaXJ0eV90aW1lYC4KClRoZSBwYXRjaCYjMzk7cyBsb2dpYyBpcyBjb25jZXJuaW5nLCBiZWNhdXNlIHRoZSBvcmRlciBvZiBpbm9kZXMgd2l0aGluIHRoZSB3cml0ZWJhY2sgbGlzdHMgaXMgYmVpbmcgc3Vic3RhbnRpYWxseSBjaGFuZ2VkOiBub2RlcyBhcmUgdGVtcG9yYXJpbHkgcmVtb3ZlZCBmcm9tIHRoZSBtYWluIGxpc3QgKGB3Yi0mZ3Q7Yl9hdHRhY2hlZGAgb3IgYHdiLSZndDtiX2RpcnR5X3RpbWVgKSB3aGlsZSBiZWluZyBwcm9jZXNzZWQuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYGxpc3Rfc3BsaWNlYCBvcGVyYXRpb24gYXQgdGhlIGVuZCB0byByZS1pbnRlZ3JhdGUgdGhlIHByb2Nlc3NlZCBub2RlcyBiYWNrIGludG8gdGhlICpoZWFkKiBvZiB0aGUgb3JpZ2luYWwgbGlzdC4gSWYgYGZ1bGxgIGlzIHRydWUsIHRoZSBub2RlIG9yZGVyIGdldHMgY2hhbmdlZCBpbiBzdWJ0bGUgd2F5cywgYW5kIHRoZSBgaGVhZC0mZ3Q7cHJldmAgY291bGQgZ2V0IGNoYW5nZWQuCgpUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGtlcm5lbCBsaXN0IG1hbmlwdWxhdGlvbiBzY2VuYXJpbywgd2hlcmUgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0b3VjaGluZyBgd2ItJmd0O2xpc3RfbG9ja2AgY291bGQgaW50cm9kdWNlIGRhdGEgcmFjZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBjb3VsZCBoYXBwZW4gaWYgYW5vdGhlciB0aHJlYWQgb3IgaW50ZXJydXB0IGludGVyYWN0cyB3aXRoIHRoZSBsaXN0IHdoaWxlIGlub2RlcyBhcmUgaW4gdGhpcyAmIzM5O3NjYW5uZWQmIzM5OyBzdGF0ZSwgb3IgaWYgYG1vdmVfZXhwaXJlZF9pbm9kZXNgIHJ1bnMsIG9yIGlmIGFuIGlub2RlIGlzIGZyZWVkIHdoaWxlIGl0cyBmbGFncyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBhbmQgaG93IHRoZSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbGlzdCBoZWFkIChhbmQgdGhlIGBiX2RpcnR5X3RpbWVgIGF0dHJpYnV0ZSkgYXJlIGtleSBhcmVhcyBvZiBjb25jZXJuLgoKQmFzZWQgb24gdGhlIFdvcnRoRnV6emluZyBndWlkZWxpbmVzLCB0aGlzIGNvZGUgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtDb3JlIFN1YnN5c3RlbXMmIzM0OyBjYXRlZ29yeSwgc3BlY2lmaWNhbGx5IFZGUyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHdpdGggYSB0b3VjaCBvZiByZWZhY3RvcmluZy9jb2RlIGNsZWFudXAuICBJdCBpcyBhIHJlYWNoYWJsZSBhcmVhIHRoYXQgbW9kaWZpZXMgY29yZSBkYXRhIHN0cnVjdHVyZXMuCgpUbyBpZGVudGlmeSB3aGF0IHRvIGZvY3VzIG9uLCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCwgYW5kIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gLiAgSSYjMzk7dmUgY2hlY2tlZCwgYW5kIG5vbmUgb2YgdGhlc2UgYXJlIHViaXF1aXRvdXM7IHRoZXkgYXJlIGFsbCBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIC8gaW5vZGUgd3JpdGViYWNrIHN3aXRjaGluZy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBzZXQgKGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCksIGFuZCBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEkmIzM5O2xsIHJlLWV4YW1pbmUgdGhlIGNvZGUgdG8gY29uZmlybSBpZiB0aGVyZSYjMzk7cyBhbnkgb3RoZXIgY29uZGl0aW9uIG9uIHRoZSBiZWhhdmlvciBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2JhY2tpbmctZGV2LmM9NjI9c3RhdGljIHZvaWQgY29sbGVjdF93Yl9zdGF0cyhzdHJ1Y3Qgd2Jfc3RhdHMgKnN0YXRzLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtODUtXG5tbS9iYWNraW5nLWRldi5jOjg2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vYmFja2luZy1kZXYuYy04Ny1zdGF0aWMgdm9pZCBiZGlfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxuLS1cbm1tL2JhY2tpbmctZGV2LmM9MTU4PXN0YXRpYyB2b2lkIHdiX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4tLVxubW0vYmFja2luZy1kZXYuYy0xNzQtXHRcdCAgIFwmIzM0O3N0YXRlOiAgICAgICAgICAgICAlMTBseFxcblxcblwmIzM0Oyxcbm1tL2JhY2tpbmctZGV2LmM6MTc1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vYmFja2luZy1kZXYuYy0xNzYtXHRcdCAgIGNncm91cF9pbm8od2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZWNncm91cCksXG4tLVxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vYmFja2luZy1kZXYuYy01ODYtXG5tbS9iYWNraW5nLWRldi5jOjU4NzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM1NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIHllcCwgYG1tL2JhY2tpbmctZGV2LmNgICpkb2VzKiBpbmNsdWRlIHRoYXQgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBDR1JPVVBfV1JJVEVCQUNLYCBpbiBgaW5pdC9LY29uZmlnYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEZ1cnRoZXIgZG93biB0aGUgY2hhaW4sIGBCTEtfQ0dST1VQYCBpdHNlbGYgcmVsaWVzIG9uIGBCTE9DS2AuIFN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHdoYXQgYWJvdXQgdGhlIGJyb2FkZXIgY29udGV4dCwgaXMgYENHUk9VUFNgIHJlcXVpcmVkPyBBaCwgeWVzLCBsb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBgTUVNQ0dgIGFjdHVhbGx5ICpkZXBlbmRzKiBvbiBgQ0dST1VQU2AuIEl0JiMzOTtzIGNsZWFybHkgc3RhdGVkIHJpZ2h0IHRoZXJlIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2AgYmxvY2suIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4gVGltZSB0byByZXZpc2l0IGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVBTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDUzPWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1NS1cbmluaXQvS2NvbmZpZzoxMDU2Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTctXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogUmVhZHkgdG8gUHJvY2VlZCB3aXRoIGBzZXQtcmVzdWx0c2AqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgYW5hbHlzaXMgaXMgY29tcGxldGUuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYENHUk9VUFNgLCBhbmQgYEJMT0NLYC4gQWxsIGNoZWNrcyBwYXNzZWQuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBjb3JlIGFzc2Vzc21lbnQgY3JpdGVyaWEuIEl0JiMzOTtzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzdWNjaW5jdCBhbmQgYWNjdXJhdGUuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgd2hpY2ggaW5jbHVkZXMgYENHUk9VUF9XUklURUJBQ0tgLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgIChvciBwb3RlbnRpYWxseSBgQ0dST1VQU2AgYW5kIGBCTE9DS2ApLCBtYXRjaGVzIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGNoYW5nZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGluY2x1ZGluZyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCwgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAsIGFuZCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgY29kZSBjaGFuZ2VzLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHJlYXNvbmluZyBpbiBkZXRhaWwuIFRoZSBwYXRjaCB0YXJnZXRzIGBmcy9mcy13cml0ZWJhY2suY2Agc3BlY2lmaWNhbGx5LCBtb2RpZnlpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGlzIGlzIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgdGhlIGNncm91cCB3cml0ZWJhY2sgc3Vic3lzdGVtLiBJdCBhbHRlcnMgdGhlIGlub2RlIHdyaXRlYmFjayBsaXN0IHNjYW5uaW5nIGFuZCByZW9yZGVyaW5nIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cCAoYGNsZWFudXBfb2ZmbGluZV9jZ3diYCkuIFRoZSBjb2RlIHN3aXRjaGVzIGZyb20gZm9yd2FyZCB0byByZXZlcnNlIGl0ZXJhdGlvbiBhbmQgdXNlcyBhIGxvY2FsIGxpc3QgZm9yIHRlbXBvcmFyeSBlbnRyaWVzLiBUaGUgY29kZSBpcyB0cmlnZ2VyZWQgYnkgbWVtb3J5IGNncm91cHMgd2l0aCBhdHRhY2hlZCB3cml0ZWJhY2sgaW5vZGVzIHdoZW4gb2ZmbGluZWQsIG1ha2luZyBpdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKRXZlcnl0aGluZyBpcyBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZCwgYW5kIGFsbCByZXF1aXJlZCBjaGVja3MgaGF2ZSBiZWVuIHZhbGlkYXRlZC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgYW0gbm93IHByb2NlZWRpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXN3X3ByZXBhcmVfd2JzX3N3aXRjaCYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuJiMzNDssCiAgICAmIzM0O3diX21lbWNnX29mZmxpbmUmIzM0OywKICAgICYjMzQ7aW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaCgpIGluIGZzL2ZzLXdyaXRlYmFjay5jLCBhbHRlcmluZyBsaXN0IHRyYXZlcnNhbCBhbmQgcmVvcmRlcmluZyBsb2dpYyBmb3IgaW5vZGVzIG9uIHRoZSB3cml0ZWJhY2sgaW8gbGlzdHMgKGJfYXR0YWNoZWQgYW5kIGJfZGlydHlfdGltZSkgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwLiBUaGlzIGFmZmVjdHMgY29yZSBWRlMvTU0gd3JpdGViYWNrIGRhdGEgc3RydWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aGVuIG9mZmxpbmluZyBtZW1vcnkgY2dyb3VwcyB3aXRoIGFjdGl2ZSBvciBsYXp5dGltZSBkaXJ0eSBpbm9kZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAmIzM5O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM5OyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAmIzM5O3NjYW5uZWQmIzM5OyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCYjMzk7c2Nhbm5lZCYjMzk7IGFuZCAmIzM5O2Z1bGwmIzM5OykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBMSVNUX0hFQUQoKSBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gKCYjMzk7Ym9vbCBmdWxsID0gZmFsc2U7JiMzOTspLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJiMzOTtpc3cmIzM5OyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRiOGUyYzdlMWRlYmI4NjMyNjhhNTM2NTU4MDMwNzc4MGNiZTUzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNzI3LDE5ICYjNDM7NzI3LDM0IEBAIHN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csCiAJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wOwomIzQzOwlMSVNUX0hFQUQoc2Nhbm5lZCk7CiYjNDM7CWJvb2wgZnVsbCA9IGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWxrIGZyb20gdGhlIG9sZGVzdCBlbmQgYW5kIG1vdmUgc2Nhbm5lZCBpbm9kZXMgdG8gdGhlIG5ld2VzdAomIzQzOwkgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2YKJiM0MzsJICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuCiYjNDM7CSAqIEZvciBiX2RpcnR5X3RpbWUgdGhpcyBrZWVwcyB0aGUgb2xkZXN0IHVuc2Nhbm5lZCBpbm9kZSBhdCB0aGUKJiM0MzsJICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC4KJiM0MzsJICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGlub2RlLCB0bXAsIGxpc3QsIGlfaW9fbGlzdCkgewomIzQzOwkJbGlzdF9tb3ZlKCZhbXA7aW5vZGUtJmd0O2lfaW9fbGlzdCwgJmFtcDtzY2FubmVkKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIGxpc3QsIGlfaW9fbGlzdCkgewogCQlpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlzdy0mZ3Q7aW5vZGVzWypucl0gPSBpbm9kZTsKIAkJKCpucikmIzQzOyYjNDM7OwogCi0JCWlmICgqbnIgJmd0Oz0gV0JfTUFYX0lOT0RFU19QRVJfSVNXIC0gMSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJaWYgKCpuciAmZ3Q7PSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7CiYjNDM7CQkJZnVsbCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJfQotCXJldHVybiBmYWxzZTsKJiM0MzsJbGlzdF9zcGxpY2UoJmFtcDtzY2FubmVkLCBsaXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZ1bGw7CiB9CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgZnMtd3JpdGViYWNrLmNgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2ZzLXdyaXRlYmFjay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGViYWNrIGJlaGF2aW9yLCBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggbGluZSA3MjcgYW5kIHNlZSB3aGF0IHRoYXQgZ2l2ZXMgbWUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBtb2RpZmljYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGFyZWEgb2YgdGhlIHdyaXRlYmFjayBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTA6XHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIDcxMTpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDcxMjpcdFxuIDcxMzpcdFx0aXN3LVx1MDAzZWlub2Rlc1swXSA9IGlub2RlO1xuIDcxNDpcdFxuIDcxNTpcdFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZShpbm9kZS1cdTAwM2VpX3diLCBuZXdfd2IsIDEpO1xuIDcxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA3MTc6XHRcdHJldHVybjtcbiA3MTg6XHRcbiA3MTk6XHRvdXRfZnJlZTpcbiA3MjA6XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNzIxOlx0XHRpZiAobmV3X3diKVxuIDcyMjpcdFx0XHR3Yl9wdXQobmV3X3diKTtcbiA3MjM6XHRcdGtmcmVlKGlzdyk7XG4gNzI0Olx0fVxuIDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YixcbiA3Mjc6XHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdyxcbiA3Mjg6XHRcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqbnIpXG4gNzI5Olx0e1xuIDczMDpcdFx0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbiA3MzE6XHRcdExJU1RfSEVBRChzY2FubmVkKTtcbiA3MzI6XHRcdGJvb2wgZnVsbCA9IGZhbHNlO1xuIDczMzpcdFxuIDczNDpcdFx0LypcbiA3MzU6XHRcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4gNzM2Olx0XHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbiA3Mzc6XHRcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuIDczODpcdFx0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuIDczOTpcdFx0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbiA3NDA6XHRcdCAqL1xuIDc0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4gNzQyOlx0XHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIDc0MzpcdFxuIDc0NDpcdFx0XHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcbiA3NDU6XHRcdFx0XHRjb250aW51ZTtcbiA3NDY6XHRcbiA3NDc6XHRcdFx0aXN3LVx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XG4gNzQ4Olx0XHRcdCgqbnIpJiM0MzsmIzQzOztcbiA3NDk6XHRcbiA3NTA6XHRcdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHtcbiA3NTE6XHRcdFx0XHRmdWxsID0gdHJ1ZTtcbiA3NTI6XHRcdFx0XHRicmVhaztcbiA3NTM6XHRcdFx0fVxuIDc1NDpcdFx0fVxuIDc1NTpcdFx0bGlzdF9zcGxpY2UoXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XG4gNzU2Olx0XG4gNzU3Olx0XHRyZXR1cm4gZnVsbDtcbiA3NTg6XHR9XG4gNzU5Olx0XG4gNzYwOlx0LyoqXG4gNzYxOlx0ICogY2xlYW51cF9vZmZsaW5lX2Nnd2IgLSBkZXRhY2ggYXNzb2NpYXRlZCBpbm9kZXNcbiA3NjI6XHQgKiBAd2I6IHRhcmdldCB3YlxuIDc2MzpcdCAqXG4gNzY0Olx0ICogU3dpdGNoIGFsbCBpbm9kZXMgYXR0YWNoZWQgdG8gQHdiIHRvIGEgbmVhcmVzdCBsaXZpbmcgYW5jZXN0b3ImIzM5O3Mgd2IgaW4gb3JkZXJcbiA3NjU6XHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxuIDc2NjpcdCAqIHN3aXRjaGVkIGFuZCB0aGUgZnVuY3Rpb24gaGFzIHRvIGJlIHJlc3RhcnRlZC5cbiA3Njc6XHQgKi9cbiA3Njg6XHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiA3Njk6XHR7XG4gNzcwOlx0XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqbWVtY2dfY3NzO1xuIDc3MTpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3O1xuIDc3MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YjtcbiA3NzM6XHRcdGludCBucjtcbiA3NzQ6XHRcdGJvb2wgcmVzdGFydCA9IGZhbHNlO1xuIDc3NTpcdFxuIDc3NjpcdFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgV0JfTUFYX0lOT0RFU19QRVJfSVNXKTtcbiA3Nzc6XHRcdGlmICghaXN3KVxuIDc3ODpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA3Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBoaXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBObyBwb2ludCBqdXN0IGRpdmluZyBpbiB3aXRob3V0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgd29ya2Zsb3cgaXMgdGhhdCBpdCYjMzk7cyBlbWJlZGRlZCB3aXRoaW4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBhbnkgcmVsZXZhbnQgZ2xvYmFsIHZhcmlhYmxlcyBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBpdCBtaWdodCB0b3VjaC4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVzb3VyY2UgY2xlYW51cCwgdGVtcG9yYXJ5IGZpbGUgZGVsZXRpb24sIGRhdGFiYXNlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIG9yIHN0YXRlIHJlc2V0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIGRhdGEgc2VyaWFsaXphdGlvbiBjb25zaWRlcmF0aW9ucyBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIHJlbGF0ZWQgdG8gZmFpbGVkIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc1Olx0XG4gNzc2Olx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc3NzpcdFx0aWYgKCFpc3cpXG4gNzc4Olx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc3OTpcdFxuIDc4MDpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3ODE6XHRcbiA3ODI6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc4MzpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzg0Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc4NTpcdFx0XHRpZiAobmV3X3diKVxuIDc4NjpcdFx0XHRcdGJyZWFrO1xuIDc4NzpcdFx0fVxuIDc4ODpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc4OTpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc5MDpcdFxuIDc5MTpcdFx0bnIgPSAwO1xuIDc5MjpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzkzOlx0XHQvKlxuIDc5NDpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3OTU6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3OTY6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzk3Olx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc5ODpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc5OTpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA4MDI6XHRcdGlmICghcmVzdGFydClcbiA4MDM6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA4MDQ6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDgwNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA4MDY6XHRcbiA4MDc6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA4MDg6XHRcdGlmIChuciA9PSAwKSB7XG4gODA5Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gODEwOlx0XHRcdHdiX3B1dChuZXdfd2IpO1xuIDgxMTpcdFx0XHRrZnJlZShpc3cpO1xuIDgxMjpcdFx0XHRyZXR1cm4gcmVzdGFydDtcbiA4MTM6XHRcdH1cbiA4MTQ6XHRcbiA4MTU6XHRcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUod2IsIG5ld193YiwgbnIpO1xuIDgxNjpcdFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcbiA4MTc6XHRcbiA4MTg6XHRcdHJldHVybiByZXN0YXJ0O1xuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHQvKipcbiA4MjI6XHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcbiA4MjM6XHQgKiBAd2JjOiB3cml0ZWJhY2tfY29udHJvbCBvZiBpbnRlcmVzdFxuIDgyNDpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gODI1Olx0ICpcbiA4MjY6XHQgKiBAaW5vZGUgaXMgbG9ja2VkIGFuZCBhYm91dCB0byBiZSB3cml0dGVuIGJhY2sgdW5kZXIgdGhlIGNvbnRyb2wgb2YgQHdiYy5cbiA4Mjc6XHQgKiBSZWNvcmQgQGlub2RlJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxuIDgyODpcdCAqIHdyaXRlYmFjayBjb21wbGV0aW9uLCB3YmNfZGV0YWNoX2lub2RlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFRoaXMgaXMgdXNlZFxuIDgyOTpcdCAqIHRvIHRyYWNrIHRoZSBjZ3JvdXAgd3JpdGViYWNrIGNvbnRleHQuXG4gODMwOlx0ICovXG4gODMxOlx0c3RhdGljIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIDgzMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgzMzpcdFx0X19yZWxlYXNlcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spXG4gODM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5vZGUgU3dpdGNoIFdyaXRlYmFjayBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaXN3YCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIOKAkyBob3cgaXQmIzM5O3MgYWxsb2NhdGVkLCBob3cgaXRzIGBpbm9kZXNgIG1lbWJlciBpcyB1c2VkLCBhbmQgb3ZlcmFsbCwgd2hlcmUgaXQgZml0cyBpbi4gSXQgYXBwZWFycyB0byBiZSBhIGBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0YCwgYW5kIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBpdHMgYWxsb2NhdGlvbiBoYXBwZW5zIHdpdGhpbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIHZpYSBga3phbGxvY19mbGV4YC4gVGhlIGNvZGUgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NfZmxleGAhIEEgcG9pbnRlciBgKm5yYCAodG8gYW4gaW50ZWdlciBpbml0aWFsaXplZCB0byAwKSBzZWVtcyB0byBwbGF5IGEgcm9sZSBpbiBob3cgdGhpcyBzdHJ1Y3R1cmUmIzM5O3MgYGlub2Rlc2AgbWVtYmVyIGlzIHBvcHVsYXRlZC4KClRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgZXhpc3RpbmcgY29kZSBzbmlwcGV0IHNob3dzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMgKGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCksIHdoZXJlIGlub2RlcyBtZWV0aW5nIGEgY2VydGFpbiBjb25kaXRpb24gaGF2ZSB0aGVpciBwb2ludGVycyBzdG9yZWQgaW4gYGlzdy0mZ3Q7aW5vZGVzYC4gVGhlIGAqbnJgIHZhcmlhYmxlIGlzIGluY3JlbWVudGVkIHdpdGggZWFjaCBzdWNjZXNzZnVsIGluc2VydGlvbiwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5IGlmIHRoZSBidWZmZXIgaXMgZmlsbGVkLgoKVGhlICYjMzQ7YWZ0ZXIgdGhlIHBhdGNoJiMzNDsgY29kZSBpbnRyb2R1Y2VzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJbnN0ZWFkIG9mIGEgZm9yd2FyZCBpdGVyYXRpb24sIHRoZSBjb2RlIG5vdyB1c2VzIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAsIG1vdmluZyBzY2FubmVkIGlub2RlcyB0byBhIHRlbXBvcmFyeSBsaXN0IChgc2Nhbm5lZGApLiBUaGlzIHN1Z2dlc3RzIGEgcmVvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbiBzdHJhdGVneSBmb3IgaW5vZGUgcHJvY2Vzc2luZy4gVGhlIGludGVudCBzZWVtcyB0byBrZWVwIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYWZ0ZXIgdGhlIG1vdmUuIFRoaXMgbG9va3MgbGlrZSBhIGNsZXZlciBvcHRpbWl6YXRpb24sIEkgd29uZGVyIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSB1c2Ugb2YgYGxpc3Rfc3BsaWNlYCBpcyBhbHNvIG5vdGFibGUsIGNvbWJpbmluZyB0aGUgbGlzdHMgYWZ0ZXIgdGhlIGl0ZXJhdGlvbiwgdGhpcyBzZWVtcyBtb3JlIHNvcGhpc3RpY2F0ZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpc3ctJmd0O2lub2Rlc2AgYXJyYXkgaXMgKmNvbnN1bWVkKi4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSB1c2VzIHRoaXMgY29udGV4dCB0byBxdWV1ZSB0aGUgd3JpdGViYWNrIHJlcXVlc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIHNpbWlsYXIpIHRvIGxvY2F0ZSBjYWxscyB0byBgd2JfcXVldWVfaXN3YCBhbmQgcmVsYXRlZCB1c2VzIG9mIHRoZSBgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dGAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgcmVzdCBvZiB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2JfcXVldWVfaXN3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NjI0PXN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTY1OS1cbmZzL2ZzLXdyaXRlYmFjay5jOjY2MDpzdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuZnMvZnMtd3JpdGViYWNrLmMtNjYxLVx0XHRcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9Njc1PXN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcbi0tXG5mcy9mcy13cml0ZWJhY2suYy03MTUtXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKGlub2RlLVx1MDAzZWlfd2IsIG5ld193YiwgMSk7XG5mcy9mcy13cml0ZWJhY2suYzo3MTY6XHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xuZnMvZnMtd3JpdGViYWNrLmMtNzE3LVx0cmV0dXJuO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTc2OD1ib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbi0tXG5mcy9mcy13cml0ZWJhY2suYy04MTUtXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKHdiLCBuZXdfd2IsIG5yKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjgxNjpcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XG5mcy9mcy13cml0ZWJhY2suYy04MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBmcy13cml0ZWJhY2suYzogTGluZXMgNjUwLTcxMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9mcy13cml0ZWJhY2suY2AgYW5kIHplcm8gaW4gb24gbGluZXMgNjUwIHRvIDcxMC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGludm9sdmVkIGluIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB3cml0ZWJhY2ssIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcnR5IHBhZ2VzIGFyZSBpZGVudGlmaWVkLCBwZXJoYXBzIGhhbmRsZWQgYXQgdGhlIGluZGl2aWR1YWwgZmlsZXN5c3RlbSBsZXZlbCBvciBob3cgdGhlIGdsb2JhbCB3cml0ZWJhY2sgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBzcGVjaWZpYyBkaXJ0eSBwYWdlcy4gR2l2ZW4gdGhlIGZpbGUgY29udGV4dCwgaXTigJlzIGhpZ2hseSBwcm9iYWJsZSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGB3Yl93cml0ZWJhY2tgIGZ1bmN0aW9uIG9yIG9uZSBvZiBpdHMgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBlbHVjaWRhdGUgaXRzIHJvbGUgaW4gdGhlIGdsb2JhbCB3cml0ZWJhY2sgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBkaXJ0eSBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZDogaXMgaXQgc2VsZWN0aW5nIHNwZWNpZmljIGRpcnR5IHBhZ2VzLCBoYW5kbGluZyBhIHdob2xlIHJhbmdlIG9mIHBhZ2VzIHdpdGhpbiBhIEJESSwgb3IgZG9lcyBpdCBjb250cm9sIHRoZSBzY2hlZHVsaW5nIG9mIHdyaXRlYmFja3MgYmFzZWQgb24gSS9PIGJhbmR3aWR0aD8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGJhbGFuY2VzIHJlc3BvbnNpdmVuZXNzIHdpdGggZGF0YSBpbnRlZ3JpdHkuIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgc2VjdGlvbiBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjbGVhbmVyIGFuZCB0aGUgZmx1c2hlciB0aHJlYWRzIGFuZCBpZiB0aGlzIHNlY3Rpb24gaGFzIHNvbWUgbG9ja2luZyBtZWNoYW5pc20gYXMgd2VsbCwgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyBpdCBwcm90ZWN0cyB0aGUgcmVsZXZhbnQgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUwOlx0XHRfX2lnZXQoaW5vZGUpO1xuIDY1MTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA2NTI6XHRcbiA2NTM6XHRcdHJldHVybiB0cnVlO1xuIDY1NDpcdFxuIDY1NTpcdG91dF91bnBpbjpcbiA2NTY6XHRcdGNncm91cF93cml0ZWJhY2tfdW5waW4oaW5vZGUtXHUwMDNlaV9zYik7XG4gNjU3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNjU4Olx0fVxuIDY1OTpcdFxuIDY2MDpcdHN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4gNjYxOlx0XHRcdFx0IHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdylcbiA2NjI6XHR7XG4gNjYzOlx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNmlzdy1cdTAwM2VsaXN0LCBcdTAwMjZ3Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxuIDY2NDpcdFx0XHRxdWV1ZV93b3JrKGlzd193cSwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dvcmspO1xuIDY2NTpcdH1cbiA2NjY6XHRcbiA2Njc6XHQvKipcbiA2Njg6XHQgKiBpbm9kZV9zd2l0Y2hfd2JzIC0gY2hhbmdlIHRoZSB3YiBhc3NvY2lhdGlvbiBvZiBhbiBpbm9kZVxuIDY2OTpcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXG4gNjcwOlx0ICogQG5ld193Yl9pZDogSUQgb2YgdGhlIG5ldyB3YlxuIDY3MTpcdCAqXG4gNjcyOlx0ICogU3dpdGNoIEBpbm9kZSYjMzk7cyB3YiBhc3NvY2lhdGlvbiB0byB0aGUgd2IgaWRlbnRpZmllZCBieSBAbmV3X3diX2lkLiAgVGhlXG4gNjczOlx0ICogc3dpdGNoaW5nIGlzIHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSBhbmQgbWF5IGZhaWwgc2lsZW50bHkuXG4gNjc0Olx0ICovXG4gNjc1Olx0c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBpbm9kZV90b19iZGkoaW5vZGUpO1xuIDY3ODpcdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcbiA2Nzk6XHRcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcbiA2ODA6XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IgPSBOVUxMO1xuIDY4MTpcdFxuIDY4MjpcdFx0Lyogbm9vcCBpZiBzZWVtcyB0byBiZSBhbHJlYWR5IGluIHByb2dyZXNzICovXG4gNjgzOlx0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9XQl9TV0lUQ0gpXG4gNjg0Olx0XHRcdHJldHVybjtcbiA2ODU6XHRcbiA2ODY6XHRcdC8qIGF2b2lkIHF1ZXVlaW5nIGEgbmV3IHN3aXRjaCBpZiB0b28gbWFueSBhcmUgYWxyZWFkeSBpbiBmbGlnaHQgKi9cbiA2ODc6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KSBcdTAwM2UgV0JfRlJOX01BWF9JTl9GTElHSFQpXG4gNjg4Olx0XHRcdHJldHVybjtcbiA2ODk6XHRcbiA2OTA6XHRcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIDIsIEdGUF9BVE9NSUMpO1xuIDY5MTpcdFx0aWYgKCFpc3cpXG4gNjkyOlx0XHRcdHJldHVybjtcbiA2OTM6XHRcbiA2OTQ6XHRcdGF0b21pY19pbmMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNjk1Olx0XG4gNjk2Olx0XHQvKiBmaW5kIGFuZCBwaW4gdGhlIG5ldyB3YiAqL1xuIDY5NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDY5ODpcdFx0bWVtY2dfY3NzID0gY3NzX2Zyb21faWQobmV3X3diX2lkLCBcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpO1xuIDY5OTpcdFx0aWYgKG1lbWNnX2NzcyBcdTAwMjZcdTAwMjYgIWNzc190cnlnZXQobWVtY2dfY3NzKSlcbiA3MDA6XHRcdFx0bWVtY2dfY3NzID0gTlVMTDtcbiA3MDE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDcwMjpcdFx0aWYgKCFtZW1jZ19jc3MpXG4gNzAzOlx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gNzA0Olx0XG4gNzA1Olx0XHRuZXdfd2IgPSB3Yl9nZXRfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBHRlBfQVRPTUlDKTtcbiA3MDY6XHRcdGNzc19wdXQobWVtY2dfY3NzKTtcbiA3MDc6XHRcdGlmICghbmV3X3diKVxuIDcwODpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggYW5kIERhdGEgQWNjZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHN3aXRjaF93b3JrYCBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgYGlzdy0mZ3Q7aW5vZGVzYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcG9pbnRzIG9mIGV4ZWN1dGlvbiB3aGVyZSBgc3dpdGNoX3dvcmtgIGlzIGNhbGxlZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHRoZSBjb25kaXRpb25zIGFuZCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGlub2RlIGFjY2VzcyBpcyBoYXBwZW5pbmcuIElzIGl0IGNhbGxlZCBmcm9tIGEgdGFza2xldCwgaW50ZXJydXB0IGhhbmRsZXIsIG9yIGEgcmVndWxhciBwcm9jZXNzIGNvbnRleHQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGlub2RlIGFjY2Vzcy4gRnVydGhlcm1vcmUsIEkgbmVlZCB0byBrbm93ICp3aGljaCogaW5vZGUgaXMgYWNjZXNzZWQsIGFuZCBpZiB0aGUgc2FtZSBpbm9kZSBjYW4gYmUgYWNjZXNzZWQgZWxzZXdoZXJlLCBhbmQgaWYgc28sIHdoZW4gYW5kIGhvdy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW5vZGUgdXNlIHBhdHRlcm4uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBhY2Nlc3MgcGF0dGVybiBmb3IgYGlzdy0mZ3Q7aW5vZGVzYC4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBiZSBhZGRyZXNzZWQsIG9yIGlmIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBhdGhzIHRoYXQgbWF5IHVzZSB0aGUgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGEgZGVlcCBkaXZlIHdpdGggbXkgZGVidWdnZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3aXRjaF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NTkwPXZvaWQgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy01OTItXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxuZnMvZnMtd3JpdGViYWNrLmM6NTkzOlx0XHRcdFx0XHRcdCAgICBzd2l0Y2hfd29yayk7XG5mcy9mcy13cml0ZWJhY2suYy01OTQtXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcbi0tXG5mcy9mcy13cml0ZWJhY2suYz02NjA9c3RhdGljIHZvaWQgd2JfcXVldWVfaXN3KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5mcy9mcy13cml0ZWJhY2suYy02NjMtXHRpZiAobGxpc3RfYWRkKFx1MDAyNmlzdy1cdTAwM2VsaXN0LCBcdTAwMjZ3Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxuZnMvZnMtd3JpdGViYWNrLmM6NjY0Olx0XHRxdWV1ZV93b3JrKGlzd193cSwgXHUwMDI2d2ItXHUwMDNlc3dpdGNoX3dvcmspO1xuZnMvZnMtd3JpdGViYWNrLmMtNjY1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGZ1bmN0aW9uIGluIGBmcy9mcy13cml0ZWJhY2suY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBXcml0ZWJhY2sgUHJvY2VzcyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJiMzOTt0IGl0PyBUaGlzIGZ1bmN0aW9uIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3cml0ZWJhY2sgb3BlcmF0aW9ucywgdGhlIGNvcmUgbWFjaGluZXJ5IHRoYXQgZW5zdXJlcyBkYXRhIGdldHMgZnJvbSB0aGUgaW5vZGUmIzM5O3MgZGlydHkgcGFnZXMgb3V0IHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlICppbm9kZSYjMzk7cyogYHdiX2xpc3RgIGdldHMganVnZ2xlZCBhbmQgc29ydGVkIGFuZCB0aGUgKndiX3dvcmsqIHN0cnVjdHMgZ2V0IHVwZGF0ZWQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBkZWNpZGUgd2hhdCBuZWVkcyB0byBiZSBoYW5kbGVkICpyaWdodCBub3cqLCBhbmQgd2hhdCBjYW4gd2FpdC4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gaXMgc21hcnQgZW5vdWdoIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdpdGggbWFueSBkaXJ0eSBpbm9kZXMsIG9yIGlmIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQgcGVyZm9ybWFuY2UgaXNzdWVzLiBMb29raW5nIGZvciBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIGlzIGEgbXVzdCwgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyZXF1ZW50bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBlZmZpY2llbnRseSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHdvcmtxdWV1ZSBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHdyaXRlYmFjayBjb250ZXh0cy4gQmFzaWNhbGx5LCB3aGF0IHN0cmF0ZWdpZXMgYXJlIHVzZWQgdG8gaW1wcm92ZSBvdmVyYWxsIHRocm91Z2hwdXQgYW5kIGtlZXAgbGF0ZW5jaWVzIGxvdz8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0XHR3Yl9wdXQobmV3X3diKTtcbiA1ODY6XHRcdGtmcmVlKGlzdyk7XG4gNTg3Olx0XHRhdG9taWNfZGVjKFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xuIDU4ODpcdH1cbiA1ODk6XHRcbiA1OTA6XHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcbiA1OTM6XHRcdFx0XHRcdFx0XHQgICAgc3dpdGNoX3dvcmspO1xuIDU5NDpcdFx0c3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LCAqbmV4dF9pc3c7XG4gNTk1Olx0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGlzdDtcbiA1OTY6XHRcbiA1OTc6XHRcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm5ld193Yi1cdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xuIDU5ODpcdFx0LypcbiA1OTk6XHRcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcbiA2MDA6XHRcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXG4gNjAxOlx0XHQgKi9cbiA2MDI6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHQvKlxuIDYwNjpcdFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xuIDYwNzpcdFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cbiA2MDg6XHRcdCAqL1xuIDYwOTpcdFx0d2JfZ2V0KG5ld193Yik7XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXG4gNjEyOlx0XHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcbiA2MTM6XHRcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXG4gNjE0Olx0XHQgKiBMZXQmIzM5O3MgY29udGludWUgYWZ0ZXIgSV9XQl9TV0lUQ0ggaXMgZ3VhcmFudGVlZCB0byBiZVxuIDYxNTpcdFx0ICogdmlzaWJsZS5cbiA2MTY6XHRcdCAqL1xuIDYxNzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNjE4Olx0XG4gNjE5Olx0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXG4gNjIwOlx0XHRcdHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dicyhuZXdfd2IsIGlzdyk7XG4gNjIxOlx0XHR3Yl9wdXQobmV3X3diKTtcbiA2MjI6XHR9XG4gNjIzOlx0XG4gNjI0Olx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gNjI1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IpXG4gNjI2Olx0e1xuIDYyNzpcdFx0LyogQXZvaWQgdGhlIGF0b21pY19pbmMvc21wX21iIGRhbmNlIG9uY2UgU0JfQUNUSVZFIGlzIGdvbmUuICovXG4gNjI4Olx0XHRpZiAoIShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0FDVElWRSkpXG4gNjI5Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCBGdW5jdGlvbioqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXQgYXJvdW5kIGxpbmUgNTUwLCBzbyBJIHNob3VsZCBoZWFkIG92ZXIgdGhlcmUgYW5kIGludmVzdGlnYXRlIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBpbm9kZXMgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zLiBHaXZlbiB3aGF0IEkmIzM5O3ZlIGJlZW4gc3R1ZHlpbmcsIEkmIzM5O20gYW50aWNpcGF0aW5nIGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjb25jdXJyZW5jeSBvciBkYXRhIGNvbnNpc3RlbmN5IGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGRhdGEgaXMgdHJhbnNpdGlvbmVkIG9yIHN5bmNocm9uaXplZCBkdXJpbmcgYW4gaW5vZGUgc3dpdGNoIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGNvbnRleHQgc3dpdGNoLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSB3cml0ZWJhY2sgcHJvY2VzcyBmcm9tIHRoZSBkaXJ0eSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdFx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNTUxOlx0XHR9IGVsc2Uge1xuIDU1MjpcdFx0XHRzcGluX2xvY2soXHUwMDI2bmV3X3diLVx1MDAzZWxpc3RfbG9jayk7XG4gNTUzOlx0XHRcdHNwaW5fbG9ja19uZXN0ZWQoXHUwMDI2b2xkX3diLVx1MDAzZWxpc3RfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIDU1NDpcdFx0fVxuIDU1NTpcdFxuIDU1NjpcdFx0d2hpbGUgKCppbm9kZXApIHtcbiA1NTc6XHRcdFx0V0FSTl9PTl9PTkNFKCgqaW5vZGVwKS1cdTAwM2VpX3diICE9IG9sZF93Yik7XG4gNTU4Olx0XHRcdGlmIChpbm9kZV9kb19zd2l0Y2hfd2JzKCppbm9kZXAsIG9sZF93YiwgbmV3X3diKSlcbiA1NTk6XHRcdFx0XHRucl9zd2l0Y2hlZCYjNDM7JiM0Mzs7XG4gNTYwOlx0XHRcdGlub2RlcCYjNDM7JiM0Mzs7XG4gNTYxOlx0XHRcdGlmICgqaW5vZGVwIFx1MDAyNlx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xuIDU2MjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ld193Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU2MzpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU2NDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDU2NTpcdFx0XHRcdGdvdG8gcmVsb2NrO1xuIDU2NjpcdFx0XHR9XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRzcGluX3VubG9jayhcdTAwMjZuZXdfd2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA1NzA6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm9sZF93Yi1cdTAwM2VsaXN0X2xvY2spO1xuIDU3MTpcdFxuIDU3MjpcdFx0dXBfcmVhZChcdTAwMjZiZGktXHUwMDNld2Jfc3dpdGNoX3J3c2VtKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdGlmIChucl9zd2l0Y2hlZCkge1xuIDU3NTpcdFx0XHR3Yl93YWtldXAobmV3X3diKTtcbiA1NzY6XHRcdFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XG4gNTc3Olx0XHR9XG4gNTc4Olx0XG4gNTc5Olx0XHRmb3IgKGlub2RlcCA9IGlzdy1cdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCYjNDM7JiM0MzspIHtcbiA1ODA6XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICgqaW5vZGVwKS1cdTAwM2VpX3NiO1xuIDU4MTpcdFxuIDU4MjpcdFx0XHRpcHV0KCppbm9kZXApO1xuIDU4MzpcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKHNiKTtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcdHdiX3B1dChuZXdfd2IpO1xuIDU4NjpcdFx0a2ZyZWUoaXN3KTtcbiA1ODc6XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4gNTg4Olx0fVxuIDU4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAxNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXcml0ZWJhY2sgSW5vZGUgU3dpdGNoIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGlzIHRoYXQgYGlzdy0mZ3Q7aW5vZGVzYCBpcyBhIE5VTEwtdGVybWluYXRlZCBhcnJheS4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGBremFsbG9jX2ZsZXhgIGlzIHVzZWQgdG8gYWxsb2NhdGUgYGlzd2AsIHdoaWNoIGVuc3VyZXMgdGhlIGxhc3QgZWxlbWVudCBpcyBOVUxMLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHdlIHBvcHVsYXRlIHRoaXMgYXJyYXksIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBpcyBoYW5kbGVkLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyBtb2RpZmllZC4gQmVmb3JlIHRoZSBjaGFuZ2UsIGl0IHNlZW1zIHRoZSBjb2RlIHdhcyBpdGVyYXRpbmcgZm9yd2FyZCB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMuIE5vdywgaXQgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSBsb2NhbCBsaXN0LCBgc2Nhbm5lZGAsIGJlZm9yZSBzcGxpY2luZyB0aGVtIGJhY2sgaW50byB0aGUgbWFpbiBsaXN0LiBUaGlzIGNoYW5nZSBhaW1zIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEkmIzM5O2QgZ3Vlc3MuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0IGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlcyBhdCB0aGUgZW5kIGFuZCBtb3ZlcyB0aGUgb25lcyBhbHJlYWR5IHNjYW5uZWQgdG8gdGhlIGZyb250LiBUaGlzIHNvdW5kcyBsaWtlIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCByZXBlYXRlZGx5IHByb2Nlc3NpbmcgdGhlIHNhbWUgYWxyZWFkeS1wcmVwYXJlZCBvciBza2lwcGVkIGlub2Rlcy4gSXQgYWxzbyBzZWVtcyB0byByZXR1cm4gJiMzOTtmdWxsJiMzOTsgaWYgdGhlIGlub2RlIGxpc3QgZXhjZWVkcyB0aGUgbWF4IHNpemUgb2YgdGhlICYjMzk7aW5vZGVzJiMzOTsgYXJyYXkuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCYjMzk7cyBjaGVjay4gYHNjYW5uZWRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgTElTVF9IRUFEYC4gYGZ1bGxgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIFRoZSBvdGhlciBsb29wIHZhcmlhYmxlcyBhcmUgaXRlcmF0aW9uIHBvaW50ZXJzLiBgaXN3YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCwgc28gaXQmIzM5O3MgemVyb2VkLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgd2UmIzM5O3JlIGVudGlyZWx5IHdpdGhpbiB0aGUgaW50ZXJuYWwgd3JpdGViYWNrIGNncm91cCBoYW5kbGluZyAoYGZzLXdyaXRlYmFjay5jYCkuIFNvLCBubyB1c2VyLXZpc2libGUgbWVtb3J5IG1vZGlmaWNhdGlvbnMsIG5vIG5ldGxpbmsgbWVzc2FnZXMsIG5vdGhpbmcgbGlrZSB0aGF0LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgdHJpZ2dlcnMgS01TQU4uIExldCYjMzk7cyBzZWUuLi4gdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcywgd2hpY2ggY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcywgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzY29wZS4gVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgd2hpY2ggYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClRoZXJlZm9yZSwgc2luY2UgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIHJlYWRpbmcgb3IgY29weWluZywgS01TQU4gc2hvdWxkbiYjMzk7dCBiZSBuZWVkZWQgaGVyZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIGxvY2tpbmcvY29uY3VycmVuY3kgcHJvYmxlbXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRob3NlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgREVCVUdfTElTVC4gU28sIG5vLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGFib3V0IHRoaXMuIEFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhbmQgd2hpbGUgdGhlIGxpc3QgbWFuaXB1bGF0aW9uIGlzIGEgYml0IG1vcmUgY29tcGxleCBub3csIGl0IGxvb2tzIHNhZmUgZnJvbSBhIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIGZvcm11bGF0ZSBteSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAmIzM5O2lzd19wcmVwYXJlX3dic19zd2l0Y2gmIzM5OyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAmIzM5O3NjYW5uZWQmIzM5OyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCYjMzk7c2Nhbm5lZCYjMzk7IGFuZCAmIzM5O2Z1bGwmIzM5OykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBMSVNUX0hFQUQoKSBhbmQgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gKCYjMzk7Ym9vbCBmdWxsID0gZmFsc2U7JiMzOTspLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJiMzOTtpc3cmIzM5OyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgJiMzOTtpc3dfcHJlcGFyZV93YnNfc3dpdGNoJiMzOTsgaW4gZnMvZnMtd3JpdGViYWNrLmMgdG8gcmV2ZXJzZS10cmF2ZXJzZSB3cml0ZWJhY2sgaW5vZGUgbGlzdHMgYW5kIG1vdmUgc2Nhbm5lZCBlbnRyaWVzIHVzaW5nIGEgbG9jYWwgJiMzOTtzY2FubmVkJiMzOTsgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcblxuQWxsIG5ld2x5IGludHJvZHVjZWQgc3RhY2sgdmFyaWFibGVzICgmIzM5O3NjYW5uZWQmIzM5OyBhbmQgJiMzOTtmdWxsJiMzOTspIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgmIzM5O2Jvb2wgZnVsbCA9IGZhbHNlOyYjMzk7KS4gVGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yICYjMzk7aXN3JiMzOTsgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDE6NDEuODEwNjc3MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NDY1MjE5MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgJ2lzd19wcmVwYXJlX3dic19zd2l0Y2gnIGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICdzY2FubmVkJyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJ3NjYW5uZWQnIGFuZCAnZnVsbCcpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgnYm9vbCBmdWxsID0gZmFsc2U7JykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAnaXN3JyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0MS44MTA2ODM4MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTk3NDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YjhlMmM3ZTFkZWJiODYzMjY4YTUzNjU1ODAzMDc3ODBjYmU1MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGU3NDRmOWY5ZDQzZmEuLmVhM2ViNDBiZjgyOGUgMTAwNjQ0XFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcXG4rKysgYi9mcy9mcy13cml0ZWJhY2suY1xcbkBAIC03MjcsMTkgKzcyNywzNCBAQCBzdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wO1xcbitcXHRMSVNUX0hFQUQoc2Nhbm5lZCk7XFxuK1xcdGJvb2wgZnVsbCA9IGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcXG4rXFx0ICogZW5kLCBzbyB0aGUgbmV4dCBzY2FuIHJlc3VtZXMgYXQgdW5zY2FubmVkIGlub2RlcyBpbnN0ZWFkIG9mXFxuK1xcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxcbitcXHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXFxuK1xcdCAqIGVuZCBtb3ZlX2V4cGlyZWRfaW5vZGVzKCkgcGlja3MgZnJvbTsgYl9hdHRhY2hlZCBpcyB1bm9yZGVyZWQuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4rXFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9pb19saXN0LCBcXHUwMDI2c2Nhbm5lZCk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4gXFx0XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbKm5yXSA9IGlub2RlO1xcbiBcXHRcXHQoKm5yKSsrO1xcbiBcXG4tXFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XFxuK1xcdFxcdFxcdGZ1bGwgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJldHVybiBmYWxzZTtcXG4rXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xcbitcXG4rXFx0cmV0dXJuIGZ1bGw7XFxuIH1cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0Mi4zMjc1MTUzNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMzExMDM1NjMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzd19wcmVwYXJlX3dic19zd2l0Y2hcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCIsXG4gICAgXCJpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKCkgaW4gZnMvZnMtd3JpdGViYWNrLmMsIGFsdGVyaW5nIGxpc3QgdHJhdmVyc2FsIGFuZCByZW9yZGVyaW5nIGxvZ2ljIGZvciBpbm9kZXMgb24gdGhlIHdyaXRlYmFjayBpbyBsaXN0cyAoYl9hdHRhY2hlZCBhbmQgYl9kaXJ0eV90aW1lKSBkdXJpbmcgb2ZmbGluZSBjZ3JvdXAgd3JpdGViYWNrIGNsZWFudXAuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9NTSB3cml0ZWJhY2sgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdoZW4gb2ZmbGluaW5nIG1lbW9yeSBjZ3JvdXBzIHdpdGggYWN0aXZlIG9yIGxhenl0aW1lIGRpcnR5IGlub2Rlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtNzI3LDE5ICs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbitcdExJU1RfSEVBRChzY2FubmVkKTtcbitcdGJvb2wgZnVsbCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4rXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbitcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuK1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuK1x0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4rXHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7XG4gXHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiBcdFx0KCpucikrKztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmICgqbnIgXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XG4rXHRcdFx0ZnVsbCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdGxpc3Rfc3BsaWNlKFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xuK1xuK1x0cmV0dXJuIGZ1bGw7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDE6NDIuMzI3NTE3MjI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI0MjQ4NjYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZnMvZnMtd3JpdGViYWNrLmNgIERpZmYqKlxuXG5Pa2F5LCBzbyB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBjb250ZXh0LiBOb3csIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQuIFRoZSBtb2RpZmllZCBmaWxlIGlzIGBmcy9mcy13cml0ZWJhY2suY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS4gTXkgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBnbyBkaXJlY3RseSB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDcyNy4gSSBjYW4gdXNlIG15IGhhbmR5IHJlYWQtZmlsZSB0b29sIG9yIG1heWJlIGp1c3QgYSBxdWljayBncmVwcGVyIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgYW5kIG15IGltbWVkaWF0ZSBuZWVkcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo1NC43NTIzODU3ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUoaW5vZGUtXFx1MDAzZWlfd2IsIG5ld193YiwgMSk7XFxuIDcxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA3MTc6XFx0XFx0cmV0dXJuO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRvdXRfZnJlZTpcXG4gNzIwOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xcbiA3MjE6XFx0XFx0aWYgKG5ld193YilcXG4gNzIyOlxcdFxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA3MjM6XFx0XFx0a2ZyZWUoaXN3KTtcXG4gNzI0OlxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbiA3Mjc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxcbiA3Mjg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcXG4gNzI5OlxcdHtcXG4gNzMwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7XFxuIDczMTpcXHRcXHRMSVNUX0hFQUQoc2Nhbm5lZCk7XFxuIDczMjpcXHRcXHRib29sIGZ1bGwgPSBmYWxzZTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0LypcXG4gNzM1OlxcdFxcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XFxuIDczNjpcXHRcXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcXG4gNzM3OlxcdFxcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxcbiA3Mzg6XFx0XFx0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxcbiA3Mzk6XFx0XFx0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cXG4gNzQwOlxcdFxcdCAqL1xcbiA3NDE6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XFxuIDc0MjpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2lvX2xpc3QsIFxcdTAwMjZzY2FubmVkKTtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuIDc0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzQ2OlxcdFxcbiA3NDc6XFx0XFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbKm5yXSA9IGlub2RlO1xcbiA3NDg6XFx0XFx0XFx0KCpucikrKztcXG4gNzQ5OlxcdFxcbiA3NTA6XFx0XFx0XFx0aWYgKCpuciBcXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XFxuIDc1MTpcXHRcXHRcXHRcXHRmdWxsID0gdHJ1ZTtcXG4gNzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NTM6XFx0XFx0XFx0fVxcbiA3NTQ6XFx0XFx0fVxcbiA3NTU6XFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRyZXR1cm4gZnVsbDtcXG4gNzU4OlxcdH1cXG4gNzU5OlxcdFxcbiA3NjA6XFx0LyoqXFxuIDc2MTpcXHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbiA3NjI6XFx0ICogQHdiOiB0YXJnZXQgd2JcXG4gNzYzOlxcdCAqXFxuIDc2NDpcXHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvcidzIHdiIGluIG9yZGVyXFxuIDc2NTpcXHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxcbiA3NjY6XFx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxcbiA3Njc6XFx0ICovXFxuIDc2ODpcXHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gNzY5OlxcdHtcXG4gNzcwOlxcdFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XFxuIDc3MTpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XFxuIDc3MjpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xcbiA3NzM6XFx0XFx0aW50IG5yO1xcbiA3NzQ6XFx0XFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc3NzpcXHRcXHRpZiAoIWlzdylcXG4gNzc4OlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzgzOlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzg0OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzg1OlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzg5OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo1NC43NTI1NTA2NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTM2MTg3NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZnVuY3Rpb24uIEknbSBhc3N1bWluZyBpdCdzIGhhbmRsaW5nIHNvbWUgY3J1Y2lhbCBjbGVhbnVwIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhbiBvZmZsaW5lIENHV0IgKHdoYXRldmVyIHRoYXQgYWNyb255bSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dCDigJMgcHJvYmFibHkgY29udGV4dC1zcGVjaWZpYykuIFRoZSBmYWN0IHRoYXQgSSdtIGZvY3VzaW5nIG9uIGl0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldGllcyBoZXJlIHRoYXQgcmVxdWlyZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcsIHJlc291cmNlIG1hbmFnZW1lbnQsIG9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LlxuXG5JIGFsc28gbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhpcyBpcyBjcnVjaWFsLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSAqd2h5KiBvZiBpdHMgZXhpc3RlbmNlIGFuZCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhpcyBjb3VsZCBiZSBhbnl3aGVyZSBmcm9tIHByZS1zd2l0Y2ggdmFsaWRhdGlvbiBvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSB0cmlja3kgZGVwZW5kZW5jaWVzPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCBpcyB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBzd2l0Y2guXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byBhIGJyb2FkZXIgd29ya2Zsb3cuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFsbG93cyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgc3lzdGVtIGlzIGRvaW5nLCBhbmQgdGhlIGNvbnRleHQgd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZC4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBmaW5kIHBvdGVudGlhbCBpc3N1ZXMsIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDAuMjg4NzQwOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3OTU6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3OTY6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3OTc6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3OTg6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3OTk6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gODAwOlxcdFxcdCAqL1xcbiA4MDE6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gODAyOlxcdFxcdGlmICghcmVzdGFydClcXG4gODAzOlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA4MDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDgwODpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA4MDk6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDgxMDpcXHRcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gODExOlxcdFxcdFxcdGtmcmVlKGlzdyk7XFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODEzOlxcdFxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZSh3YiwgbmV3X3diLCBucik7XFxuIDgxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODE5OlxcdH1cXG4gODIwOlxcdFxcbiA4MjE6XFx0LyoqXFxuIDgyMjpcXHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcXG4gODIzOlxcdCAqIEB3YmM6IHdyaXRlYmFja19jb250cm9sIG9mIGludGVyZXN0XFxuIDgyNDpcXHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxcbiA4MjU6XFx0ICpcXG4gODI2OlxcdCAqIEBpbm9kZSBpcyBsb2NrZWQgYW5kIGFib3V0IHRvIGJlIHdyaXR0ZW4gYmFjayB1bmRlciB0aGUgY29udHJvbCBvZiBAd2JjLlxcbiA4Mjc6XFx0ICogUmVjb3JkIEBpbm9kZSdzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxcbiA4Mjg6XFx0ICogd3JpdGViYWNrIGNvbXBsZXRpb24sIHdiY19kZXRhY2hfaW5vZGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgVGhpcyBpcyB1c2VkXFxuIDgyOTpcXHQgKiB0byB0cmFjayB0aGUgY2dyb3VwIHdyaXRlYmFjayBjb250ZXh0LlxcbiA4MzA6XFx0ICovXFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIDgzMjpcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA4MzM6XFx0XFx0X19yZWxlYXNlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jaylcXG4gODM0OlxcdHtcXG4gODM1OlxcdFxcdGlmICghaW5vZGVfY2d3Yl9lbmFibGVkKGlub2RlKSkge1xcbiA4MzY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHR3YmMtXFx1MDAzZXdiID0gaW5vZGVfdG9fd2IoaW5vZGUpO1xcbiA4NDE6XFx0XFx0d2JjLVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHR3YmMtXFx1MDAzZXdiX2lkID0gd2JjLVxcdTAwM2V3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VpZDtcXG4gODQ0OlxcdFxcdHdiYy1cXHUwMDNld2JfbGNhbmRfaWQgPSBpbm9kZS1cXHUwMDNlaV93Yl9mcm5fd2lubmVyO1xcbiA4NDU6XFx0XFx0d2JjLVxcdTAwM2V3Yl90Y2FuZF9pZCA9IDA7XFxuIDg0NjpcXHRcXHR3YmMtXFx1MDAzZXdiX2J5dGVzID0gMDtcXG4gODQ3OlxcdFxcdHdiYy1cXHUwMDNld2JfbGNhbmRfYnl0ZXMgPSAwO1xcbiA4NDg6XFx0XFx0d2JjLVxcdTAwM2V3Yl90Y2FuZF9ieXRlcyA9IDA7XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDAuMjg4OTU3MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxNjIwMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyBjYWxsaW5nIGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYC4gVGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpdHNlbGYgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgcGFpbnQgYSBtdWNoIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjowMS45NzA1ODExNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMzQwNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzYwLS8qKlxcbmZzL2ZzLXdyaXRlYmFjay5jOjc2MTogKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbmZzL2ZzLXdyaXRlYmFjay5jLTc2Mi0gKiBAd2I6IHRhcmdldCB3Ylxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzY3LSAqL1xcbmZzL2ZzLXdyaXRlYmFjay5jOjc2ODpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG5mcy9mcy13cml0ZWJhY2suYy03Njkte1xcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaD0yMTA9dm9pZCBjZ3JvdXBfd3JpdGViYWNrX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjIxMTpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yMTItXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jOjYwMDpzdGF0aWMgREVDTEFSRV9XT1JLKGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrLCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKTtcXG5tbS9iYWNraW5nLWRldi5jLTYwMS1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODUyPXN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXFxubW0vYmFja2luZy1kZXYuYzo4Nzk6ICogY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiAtIHRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzXFxubW0vYmFja2luZy1kZXYuYy04ODAtICpcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODg0LSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTEyLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG5tbS9iYWNraW5nLWRldi5jOjkxMzpcXHRcXHR3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKVxcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTQyLVxcbm1tL2JhY2tpbmctZGV2LmM6OTQzOlxcdHF1ZXVlX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jLTk0NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjAzLjg3Mzk5NjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njk0Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIE9mZmxpbmUgQ2xlYW51cCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGZsb3cgaGVyZS4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYWN0dWFsbHkgY2FsbGluZyBgY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCBpcyByZXNwb25zaWJsZSBmb3IgcXVldWluZyB1cCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtgIGZvciBsYXRlciBleGVjdXRpb24uIFJpZ2h0LCBhbmQgYHdiX21lbWNnX29mZmxpbmVgIGdldHMgaW52b2tlZCB3aGVuIGEgbWVtY2cgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBndWFyZGluZyBLY29uZmlnIG9wdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGtub3csIG9mIGNvdXJzZSwgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCdzIGhlYWQgb3ZlciB0byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCBodW50IGRvd24gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gSSdtIGJldHRpbmcgaXQncyBhbGwgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGJsb2NrOyB0aGF0J3MgdGhlIG9idmlvdXMgY2FuZGlkYXRlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMuIFRpbWUgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjA2LjczMDk0NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE3ODI1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5mcy9mcy13cml0ZWJhY2suYy0yMzEtXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xMjc5PWZzX2luaXRjYWxsKGNncm91cF93cml0ZWJhY2tfaW5pdCk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTI4MC1cXG5mcy9mcy13cml0ZWJhY2suYzoxMjgxOiNlbHNlXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5mcy9mcy13cml0ZWJhY2suYy0xMjgyLVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9MTMzNj1zdGF0aWMgaW5saW5lIHZvaWQgd2JjX2F0dGFjaF9hbmRfdW5sb2NrX2lub2RlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTM0Mi1cXG5mcy9mcy13cml0ZWJhY2suYzoxMzQzOiNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxuZnMvZnMtd3JpdGViYWNrLmMtMTM0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MDcuMDIyNzQwNzA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTgzODgzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBXcml0ZWJhY2sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBsaW5lcyAyMzAgdGhyb3VnaCAxMjgxIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBSaWdodCwgdGhpcyBzY3JlYW1zIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2l0aGluIHRoYXQgcmFuZ2UgaXMgb25seSBhY3RpdmUgaWYgdGhlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSB0aGUgc3RhdHVzIG9mIHRoYXQgb3B0aW9uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93IHRvIGZpbmQgd2hlcmUgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBkZWZpbmVkLiBJIGJldCBpdCdsbCBiZSBpbiB0aGUgYGNncm91cGAgb3IgYHdyaXRlYmFja2AgS2NvbmZpZyBzZWN0aW9uLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNncm91cC1yZWxhdGVkIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGVuIEkgY2FuIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIGNvZGUgYmxvY2sgaXMgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTEuNDQxMTMyMDA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5MTYzMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTI1PWNvbmZpZyBCTEtfQ0dST1VQXFxuLS1cXG5pbml0L0tjb25maWctMTE0Ni1cXG5pbml0L0tjb25maWc6MTE0Nzpjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbmluaXQvS2NvbmZpZy0xMTQ4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTMuMjUwMzE1NDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA3NDY5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBzdGFydCBieSBmb2N1c2luZyBvbiBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNDcuIFRoYXQncyBhIHJlYXNvbmFibGUgYXJlYSB0byBzdGFydCBpbnZlc3RpZ2F0aW5nIHdoYXRldmVyIGlzc3VlIEknbSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIEkndmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gb3IgcHJvYmxlbSBpbiBtaW5kIHRoYXQgSSdtIGhvcGluZyB0byBhZGRyZXNzIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGp1c3QgYSBnZW5lcmFsIGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHRoZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5LiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBsaW5lIDExNDcgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBpbnNpZ2h0cywgaG9wZWZ1bGx5ISBUaW1lIHRvIGNyYWNrIGl0IG9wZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoxNS40NjEwNjUyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxcbjExNDE6XFx0XFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxcbjExNDI6XFx0XFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XFxuMTE0MzpcXHRcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xMTQ2OlxcdFxcbjExNDc6XFx0Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4xMTQ4OlxcdFxcdGJvb2xcXG4xMTQ5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbjExNTA6XFx0XFx0ZGVmYXVsdCB5XFxuMTE1MTpcXHRcXG4xMTUyOlxcdG1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuMTE1MzpcXHRcXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG4xMTU0OlxcdFxcdGRlZmF1bHQgblxcbjExNTU6XFx0XFx0aGVscFxcbjExNTY6XFx0XFx0ICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFVcXG4xMTU3OlxcdFxcdCAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwXFxuMTE1ODpcXHRcXHQgIHRhc2tzLlxcbjExNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjE1LjQ2MTE5ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNTU0NDk1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDZ3JvdXAgV3JpdGViYWNrIFBhdGNoKipcblxuT2theSwgc28gYENHUk9VUF9XUklURUJBQ0tgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhcyBsb25nIGFzIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhcmUgZW5hYmxlZC4gR29vZCwgZ29vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIExldCdzIGRpZyBpbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBsaXN0IG9mIGlub2RlcyBpcyBwcm9jZXNzZWQuIEJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeWAsIGp1c3Qgd2Fsa2luZyB0aHJvdWdoIHRoZSBsaXN0LiBGb3IgZWFjaCBgaW5vZGVgIGluIHRoZSBpbnB1dCBgbGlzdGAsIGl0J2QgcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhZGQgdGhlIGlub2RlIHRvIGFuIGFycmF5IGBpc3ctXHUwMDNlaW5vZGVzYCBpZiBzdWNjZXNzZnVsLCBhbmQgaW5jcmVtZW50IHRoZSBjb3VudGVyIGAqbnJgLiBJZiB0aGUgY291bnRlciBoaXQgYSBtYXhpbXVtIHRocmVzaG9sZCwgaXQgcmV0dXJuZWQgdHJ1ZS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhlIGxpc3QgaXRzZWxmLCBgbGlzdGAsIHdhc24ndCBtb2RpZmllZCBkdXJpbmcgdGhpcyBpdGVyYXRpb24uIEl0IHdhcyBhIHNpbXBsZSwgc2VxdWVudGlhbCBwYXNzLlxuXG5Ob3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBMSVNUX0hFQUQoc2Nhbm5lZClgIGFuZCBhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAuIFdlJ3JlIG5vdyBpdGVyYXRpbmcgaW4gcmV2ZXJzZSBvcmRlci4gSW5zaWRlIHRoZSBsb29wLCBpdCdzIG1vdmluZyBlYWNoIGBpbm9kZWAgZnJvbSB0aGUgb3JpZ2luYWwgYGxpc3RgIHRvIHRoaXMgdGVtcG9yYXJ5IGBzY2FubmVkYCBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY29tbWVudHMgbWVudGlvbiBtb3ZpbmcgXCJzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0IGVuZFwiLiBJIHNlZSB0aGUgbG9naWM6IFRoaXMgYXBwcm9hY2ggc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuIEJ5IG1vdmluZyBwcm9jZXNzZWQgaW5vZGVzIHRvIHRoZSBlbmQsIHRoZSBuZXh0IHBhc3Mgd2lsbCBzdGFydCB3aXRoIHRoZSByZW1haW5pbmcsIHVucHJvY2Vzc2VkLCBpbm9kZXMuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW5jeS4gTm93LCBhZnRlciB0aGUgbG9vcCwgd2UgYGxpc3Rfc3BsaWNlYCBmcm9tIGBzY2FubmVkYCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGBsaXN0YC5cblxuU28sIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nPyBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIG9yZGVyIHRoZSBpbm9kZXMgYXJlIHByb2Nlc3NlZCBpbiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIG1hdHRlcnMuIFRoZSBjaGFuZ2UgbWlnaHQgYmUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB0aGUgZmFjZSBvZiBvbmdvaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBgbGlzdGAsIHdoZXJlIGVhcmxpZXIgaW5vZGVzIGluIHRoZSBsaXN0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgb3IgcHJlcGFyZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IGlmIHRoZSBsaXN0IGlzIGdyb3dpbmcgYW5kIGJlaW5nIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcnVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYWRkIHRoZSBpbm9kZSB0byBgaXN3LVx1MDAzZWlub2Rlc2AuIFRoZSBgcmV0dXJuYCBjb25kaXRpb25zIGhhdmUgYWxzbyBiZWVuIHNsaWdodGx5IG1vZGlmaWVkIGluIGhvdyB0aGUgYGZ1bGxgIGZsYWcgaXMgc2V0LCBidXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgdGhlIHNhbWUsIHNvIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgYSBmdWxsIGFycmF5LiBOb3csIGxldCdzIHNlZSB3aGF0IGhhcHBlbnMgaW5zaWRlIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjEuNzE2NjUwNzY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMwNjUyMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz01OTA9dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNjIzLVxcbmZzL2ZzLXdyaXRlYmFjay5jOjYyNDpzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9mcy13cml0ZWJhY2suYy02MjUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9Njc1PXN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTcwOS1cXG5mcy9mcy13cml0ZWJhY2suYzo3MTA6XFx0aWYgKCFpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goaW5vZGUsIG5ld193YikpXFxuZnMvZnMtd3JpdGViYWNrLmMtNzExLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz03MjY9c3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzQzLVxcbmZzL2ZzLXdyaXRlYmFjay5jOjc0NDpcXHRcXHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcXG5mcy9mcy13cml0ZWJhY2suYy03NDUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xMjU3PXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTEyNjItXFx0LypcXG5mcy9mcy13cml0ZWJhY2suYzoxMjYzOlxcdCAqIFBhaXJzIHdpdGggc21wX21iKCkgaW4gaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKCk6IHdlIGVpdGhlciBvYnNlcnZlXFxuZnMvZnMtd3JpdGViYWNrLmMtMTI2NC1cXHQgKiBhIG5vbi16ZXJvIGNvdW50ZXIgYW5kIHdhaXQsIG9yIHRoZSBzd2l0Y2hlciBzZWVzIFNCX0FDVElWRSBjbGVhclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoyMy40NDczMTAzNTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5MzUyNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkRpdmluZyBpbnRvIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIHNvbWV0aGluZyB0byBkbyB3aXRoIHByZXBhcmluZyBhbiBpbm9kZSBmb3IgYSAqd2JzIHN3aXRjaCouIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIC0gd2hpY2ggaW5vZGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhpcyBcIndic1wiPyBJJ20gZ3Vlc3NpbmcgaXQncyBzb21lIHNvcnQgb2Ygd3JpdGViYWNrIG9yIGJ1ZmZlcmluZyBzdHJhdGVneSBjaGFuZ2UuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIG15IGtub3dsZWRnZSBhYm91dCBpbm9kZSBzdGF0ZXMsIGRpcnR5IHBhZ2VzLCBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBiYWNraW5nIHN0b3JhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3dpdGNoIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGhzIGluIHRoZSBjb2RlLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGxvYWQgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjUuNjQwODM5NDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjQ6XFx0c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIDYyNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IpXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHQvKiBBdm9pZCB0aGUgYXRvbWljX2luYy9zbXBfbWIgZGFuY2Ugb25jZSBTQl9BQ1RJVkUgaXMgZ29uZS4gKi9cXG4gNjI4OlxcdFxcdGlmICghKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfQUNUSVZFKSlcXG4gNjI5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjMwOlxcdFxcbiA2MzE6XFx0XFx0LypcXG4gNjMyOlxcdFxcdCAqIFBhaXJzIHdpdGggc21wX21iKCkgaW4gY2dyb3VwX3dyaXRlYmFja191bW91bnQoKTogdGhlIHVtb3VudGVyIGVpdGhlclxcbiA2MzM6XFx0XFx0ICogc2VlcyBhIG5vbi16ZXJvIGNvdW50ZXIgYW5kIHdhaXRzLCBvciB3ZSBzZWUgU0JfQUNUSVZFIGNsZWFyIGJlbG93LlxcbiA2MzQ6XFx0XFx0ICovXFxuIDYzNTpcXHRcXHRjZ3JvdXBfd3JpdGViYWNrX3Bpbihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIDYzNjpcXHRcXHRzbXBfbWIoKTtcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0aWYgKElTX0RBWChpbm9kZSkpXFxuIDYzOTpcXHRcXHRcXHRnb3RvIG91dF91bnBpbjtcXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0Lyogd2hpbGUgaG9sZGluZyBJX1dCX1NXSVRDSCwgbm8gb25lIGVsc2UgY2FuIHVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gKi9cXG4gNjQyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDY0MzpcXHRcXHRpZiAoIShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkgfHxcXG4gNjQ0OlxcdFxcdCAgICBpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IChJX1dCX1NXSVRDSCB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSB8fFxcbiA2NDU6XFx0XFx0ICAgIGlub2RlX3RvX3diKGlub2RlKSA9PSBuZXdfd2IpIHtcXG4gNjQ2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gNjQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VucGluO1xcbiA2NDg6XFx0XFx0fVxcbiA2NDk6XFx0XFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1dCX1NXSVRDSCk7XFxuIDY1MDpcXHRcXHRfX2lnZXQoaW5vZGUpO1xcbiA2NTE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA2NTI6XFx0XFxuIDY1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0b3V0X3VucGluOlxcbiA2NTY6XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIDY1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDY1ODpcXHR9XFxuIDY1OTpcXHRcXG4gNjYwOlxcdHN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuIDY2MTpcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3KVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2aXN3LVxcdTAwM2VsaXN0LCBcXHUwMDI2d2ItXFx1MDAzZXN3aXRjaF93YnNfY3R4cykpXFxuIDY2NDpcXHRcXHRcXHRxdWV1ZV93b3JrKGlzd193cSwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd29yayk7XFxuIDY2NTpcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdC8qKlxcbiA2Njg6XFx0ICogaW5vZGVfc3dpdGNoX3dicyAtIGNoYW5nZSB0aGUgd2IgYXNzb2NpYXRpb24gb2YgYW4gaW5vZGVcXG4gNjY5OlxcdCAqIEBpbm9kZTogdGFyZ2V0IGlub2RlXFxuIDY3MDpcXHQgKiBAbmV3X3diX2lkOiBJRCBvZiB0aGUgbmV3IHdiXFxuIDY3MTpcXHQgKlxcbiA2NzI6XFx0ICogU3dpdGNoIEBpbm9kZSdzIHdiIGFzc29jaWF0aW9uIHRvIHRoZSB3YiBpZGVudGlmaWVkIGJ5IEBuZXdfd2JfaWQuICBUaGVcXG4gNjczOlxcdCAqIHN3aXRjaGluZyBpcyBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1heSBmYWlsIHNpbGVudGx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoyNS42NDEwNTk0OTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODYxNzgxMzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBXcml0ZWJhY2sgTGlzdCBSZW9yZGVyaW5nIGluIG1lbWNnIE9mZmxpbmUgQ2xlYW51cCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZG9pbmcgc29tZSBpbnRlcmVzdGluZyB0aGluZ3Mgd2l0aGluIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0LCBgaV9pb19saXN0YCwgaW4gcmV2ZXJzZSBvcmRlciB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBFbnRyaWVzIGFyZSBiZWluZyBtb3ZlZCB0byBhIGBzY2FubmVkYCBsaXN0IHVzaW5nIGBsaXN0X21vdmVgLCBhbmQgdGhlbiBgc2Nhbm5lZGAgaXMgc3BsaWNlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGxpc3QsIGBsaXN0YCB2aWEgYGxpc3Rfc3BsaWNlYC5cblxuQWhhLCBgbGlzdF9tb3ZlYCBwdXRzIGVsZW1lbnRzIGF0IHRoZSAqaGVhZCogb2YgYHNjYW5uZWRgLiBTaW5jZSB3ZSBhcmUgaXRlcmF0aW5nICpiYWNrd2FyZHMqLCB0aGlzIGVmZmVjdGl2ZWx5IHJldmVyc2VzIHRoZSBsaXN0IG9yZGVyLiBUaGUgbGFzdCBlbGVtZW50IGluIHRoZSBvcmlnaW5hbCBsaXN0IGJlY29tZXMgdGhlICpmaXJzdCogaW4gYHNjYW5uZWRgLCBhbmQgc28gb24uIFRoZW4gYGxpc3Rfc3BsaWNlYCBpbnNlcnRzIHRoZSBlbnRpcmUgYHNjYW5uZWRgIGxpc3QgYXQgdGhlICpoZWFkKiBvZiB0aGUgb3JpZ2luYWwgYGxpc3RgLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgbWFuaXB1bGF0aW5nIGB3Yi1cdTAwM2ViX2F0dGFjaGVkYCBhbmQgYHdiLVx1MDAzZWJfZGlydHlfdGltZWAgbGlzdHMsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHdyaXRlYmFjayBiZWhhdmlvci4gVGhlIGxvY2sgYHdiLVx1MDAzZWxpc3RfbG9ja2AgaXMgaGVsZCwgd2hpY2ggaXMgZ29vZCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoYXQgdGhlIGxpc3Qgb3JkZXIgaXMgYmVpbmcgY2hhbmdlZCBkdXJpbmcgdGhlIG9mZmxpbmUgY2xlYW51cCBwcm9jZXNzLlxuXG5UaGUgY29tbWVudCBleHBsYWlucyB0aGUgcmF0aW9uYWxlOiB0aGUgcmVvcmRlcmluZyBhaW1zIHRvIGhhdmUgbmV3ZXIgdW5zY2FubmVkIGlub2RlcyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0cy4gRm9yIGBiX2RpcnR5X3RpbWVgLCB0aGlzIGhlbHBzIHRoZSBjb2RlIHBpY2sgdXAgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYW5kIGZvciBgYl9hdHRhY2hlZGAsIHRoZSBsaXN0J3Mgb3JkZXIgZG9lc24ndCBtYXR0ZXIuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogQ2FuIHRoaXMgY29kZSBwYXRoIGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBIGNncm91cCBpcyBjcmVhdGVkLCBmaWxlcyBhcmUgZGlydGllZCBvciBhdHRhY2hlZCB0byBpdCwgYW5kIHRoZSBjZ3JvdXAgaXMgZGVsZXRlZC4gVGhpcyBwcm9jZXNzIGNhbGxzIGB3Yl9tZW1jZ19vZmZsaW5lYCwgd2hpY2ggdGhlbiBxdWV1ZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrYC4gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGNhbGxzIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgdG9vbHMgbGlrZSBzeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlIGNncm91cHMuXG5cblRoaXMgaXMgY29yZSBzdWJzeXN0ZW0gc3R1ZmY6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBWRlMsIHNvIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTm8gc3BlY2lhbCBoYXJkd2FyZSBpcyByZXF1aXJlZC5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgVFJVRS5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIEkgZm9jdXMgb24gZm9yIGZ1enppbmc/IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCdzIHN0YXRpYywgYnV0IGl0J3Mgbm90IGlubGluZSAoc3RhdGljIGJvb2wsIG5vdCBzdGF0aWMgaW5saW5lKS4gSXQgaXMgY2FsbGVkIGZyb20gYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgd2hpY2ggaXMgYSBnbG9iYWwgZnVuY3Rpb24gZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvd3JpdGViYWNrLmhgIGFuZCBjYWxsZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBJJ2xsIHdhbnQgdG8gdGFyZ2V0IGJvdGggYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBBbHNvLCBJIHdpbGwgY2hlY2sgdGhlIHJlbGV2YW5jZSBvZiBgd2JfbWVtY2dfb2ZmbGluZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjM0LjI1ODg3NjU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTU0MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTQ9c3RydWN0IGJkaV93cml0ZWJhY2sgKndiX2dldF9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaC0xNTYtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE1Nzp2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTU4LXZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0zNTg9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja2VkX2lub2RlX3RvX3diX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Mi1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MzYzOnN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMzY0LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NjY2PXN0YXRpYyBpbnQgY2d3Yl9jcmVhdGUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtNzIzLVxcdCAqIHdoZXRoZXIgdGhleSdyZSBzdGlsbCBvbmxpbmUuICBEb24ndCBsaW5rIEB3YiBpZiBhbnkgaXMgZGVhZC5cXG5tbS9iYWNraW5nLWRldi5jOjcyNDpcXHQgKiBTZWUgd2JfbWVtY2dfb2ZmbGluZSgpIGFuZCB3Yl9ibGtjZ19vZmZsaW5lKCkuXFxubW0vYmFja2luZy1kZXYuYy03MjUtXFx0ICovXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTg4NT1zdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTI2LS8qKlxcbm1tL2JhY2tpbmctZGV2LmM6OTI3OiAqIHdiX21lbWNnX29mZmxpbmUgLSBraWxsIGFsbCB3YidzIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWNnIGJlaW5nIG9mZmxpbmVkXFxubW0vYmFja2luZy1kZXYuYy05MjgtICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05MzEtICovXFxubW0vYmFja2luZy1kZXYuYzo5MzI6dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9iYWNraW5nLWRldi5jLTkzMy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDI5MD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDMwOC1cXHRyZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQzMDk6XFx0d2JfbWVtY2dfb2ZmbGluZShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzMTAtXFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MzYuMDk0NDUzNDcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MjkwOTM5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCbG9jayBEZXZpY2UgUmVzb3VyY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGlzIGJsb2NrIGRldmljZSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgYSBmZXcgcG90ZW50aWFsIGFyZWFzLCBidXQgbm93IEknbSB0aGlua2luZywgXCJIb2xkIG9uLCBoYXZlIHdlIHRob3JvdWdobHkgZXhhbWluZWQgYHdiX2Jsa2NnX29mZmxpbmVgIHlldD9cIiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgc3BhY2UgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCBhbGwgdGhlIG9idmlvdXMgYmFzZXMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgc21va2luZyBndW4gb3IgYSBwb3RlbnRpYWwgY29udHJpYnV0b3IgdG8gdGhlIGN1cnJlbnQgb2JzZXJ2YXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJsb2NrIEkvTyBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjM3LjkyMzU1MDcyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTQ0NjMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Yl9ibGtjZ19vZmZsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xMzQyPXN0YXRpYyB2b2lkIGJsa2NnX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTM0NC1cXHQvKiB0aGlzIHByZXZlbnRzIGFueW9uZSBmcm9tIGF0dGFjaGluZyBvciBtaWdyYXRpbmcgdG8gdGhpcyBibGtjZyAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMzQ1OlxcdHdiX2Jsa2NnX29mZmxpbmUoY3NzKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMTM0Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNTc9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE1ODp2b2lkIHdiX2Jsa2NnX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE1OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0zNjM9c3RhdGljIGlubGluZSB2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2Ni1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MzY3OnN0YXRpYyBpbmxpbmUgdm9pZCB3Yl9ibGtjZ19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTM2OC17XFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTY2Nj1zdGF0aWMgaW50IGNnd2JfY3JlYXRlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTcyMy1cXHQgKiB3aGV0aGVyIHRoZXkncmUgc3RpbGwgb25saW5lLiAgRG9uJ3QgbGluayBAd2IgaWYgYW55IGlzIGRlYWQuXFxubW0vYmFja2luZy1kZXYuYzo3MjQ6XFx0ICogU2VlIHdiX21lbWNnX29mZmxpbmUoKSBhbmQgd2JfYmxrY2dfb2ZmbGluZSgpLlxcbm1tL2JhY2tpbmctZGV2LmMtNzI1LVxcdCAqL1xcbi0tXFxubW0vYmFja2luZy1kZXYuYz05MzI9dm9pZCB3Yl9tZW1jZ19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTQ2LS8qKlxcbm1tL2JhY2tpbmctZGV2LmM6OTQ3OiAqIHdiX2Jsa2NnX29mZmxpbmUgLSBraWxsIGFsbCB3YidzIGFzc29jaWF0ZWQgd2l0aCBhIGJsa2NnIGJlaW5nIG9mZmxpbmVkXFxubW0vYmFja2luZy1kZXYuYy05NDgtICogQGNzczogYmxrY2cgYmVpbmcgb2ZmbGluZWRcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTUxLSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6OTUyOnZvaWQgd2JfYmxrY2dfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL2JhY2tpbmctZGV2LmMtOTUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MzkuNTQ5MDAyNDk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDIxNDY3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3dpdGNoIENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY2hhbmdlIHJlc2lkZXMuIEZyb20gdGhlcmUsIEkgc2VlIHRoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGNhbGxpbmcgaXQsIGFuZCB0aGF0IGZ1bmN0aW9uIGluIHR1cm4gaXMgZHJpdmVuIGJ5IHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLiBBbHJpZ2h0LCB0aGF0IHBhaW50cyBhIGdvb2QgaW5pdGlhbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWluLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIG9yIGB3Yl9xdWV1ZV9pc3dgIGFyZSByZWxldmFudCBoZXJlLiBBaCwgcmlnaHQuIEl0IHNlZW1zIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgY2FsbHMgYHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdylgLiBUaGlzIHF1ZXVlcyBgd2ItXHUwMDNlc3dpdGNoX3dvcmtgLCBhbmQgdGhhdCB3aWxsIGV4ZWN1dGUgYGlub2RlX3N3aXRjaF93YnNfd29ya19mbmAuIFNvLCB0aGF0IG1lYW5zIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGlzIGNlbnRyYWwuXG5cblRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBnbyByaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gIGluIGBmcy9mcy13cml0ZWJhY2suY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo0My4wNTExNTE2NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4NTpcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gNTg2OlxcdFxcdGtmcmVlKGlzdyk7XFxuIDU4NzpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNTg4OlxcdH1cXG4gNTg5OlxcdFxcbiA1OTA6XFx0dm9pZCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiA1OTE6XFx0e1xcbiA1OTI6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193YiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gNTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzd2l0Y2hfd29yayk7XFxuIDU5NDpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcXG4gNTk1OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpsaXN0O1xcbiA1OTY6XFx0XFxuIDU5NzpcXHRcXHRsaXN0ID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2bmV3X3diLVxcdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpO1xcbiA1OTg6XFx0XFx0LypcXG4gNTk5OlxcdFxcdCAqIE5vdGhpbmcgdG8gZG8/IFRoYXQgd291bGQgYmUgYSBwcm9ibGVtIGFzIHJlZmVyZW5jZXMgaGVsZCBieSBpc3dcXG4gNjAwOlxcdFxcdCAqIGl0ZW1zIHByb3RlY3Qgd2IgZnJvbSBmcmVlaW5nLi4uXFxuIDYwMTpcXHRcXHQgKi9cXG4gNjAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxpc3QpKVxcbiA2MDM6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXHQvKlxcbiA2MDY6XFx0XFx0ICogR3JhYiBvdXIgcmVmZXJlbmNlIHRvIHdiIHNvIHRoYXQgaXQgY2Fubm90IGdldCBmcmVlZCB1bmRlciB1c1xcbiA2MDc6XFx0XFx0ICogYWZ0ZXIgd2UgcHJvY2VzcyBhbGwgdGhlIGlzdyBpdGVtcy5cXG4gNjA4OlxcdFxcdCAqL1xcbiA2MDk6XFx0XFx0d2JfZ2V0KG5ld193Yik7XFxuIDYxMDpcXHRcXHQvKlxcbiA2MTE6XFx0XFx0ICogSW4gYWRkaXRpb24gdG8gc3luY2hyb25pemluZyBhbW9uZyBzd2l0Y2hlcnMsIElfV0JfU1dJVENIXFxuIDYxMjpcXHRcXHQgKiB0ZWxscyB0aGUgUkNVIHByb3RlY3RlZCBzdGF0IHVwZGF0ZSBwYXRocyB0byBncmFiIHRoZSBpX3BhZ2VcXG4gNjEzOlxcdFxcdCAqIGxvY2sgc28gdGhhdCBzdGF0IHRyYW5zZmVyIGNhbiBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZW0uXFxuIDYxNDpcXHRcXHQgKiBMZXQncyBjb250aW51ZSBhZnRlciBJX1dCX1NXSVRDSCBpcyBndWFyYW50ZWVkIHRvIGJlXFxuIDYxNTpcXHRcXHQgKiB2aXNpYmxlLlxcbiA2MTY6XFx0XFx0ICovXFxuIDYxNzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNjE4OlxcdFxcbiA2MTk6XFx0XFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpc3csIG5leHRfaXN3LCBsaXN0LCBsaXN0KVxcbiA2MjA6XFx0XFx0XFx0cHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzKG5ld193YiwgaXN3KTtcXG4gNjIxOlxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA2MjI6XFx0fVxcbiA2MjM6XFx0XFxuIDYyNDpcXHRzdGF0aWMgYm9vbCBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDMuMDUxMzExNzAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMjIwMDAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBCb3R0bGVuZWNrKipcblxuT2theSwgc28gd2UncmUgc2VlaW5nIHNvbWUgcGVyZm9ybWFuY2UgZGlwcywgYW5kIHRoZSB1c3VhbCBzdXNwZWN0cyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmV2ZWFsaW5nIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGlsZSBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG1vcmUgY29tbW9uIGFyZWFzLCBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIG1pZ2h0IGJlIGF0IHBsYXkuIFRoZSByZWNlbnQgY29kZSBjaGFuZ2VzIGFuZCBsb2FkIHBhdHRlcm5zIGFyZSBtYWtpbmcgbWUgdGhpbmsgd2UgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgd2UncmUgaGFuZGxpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHNjaGVkdWxpbmcuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGBwcm9jZXNzX2lub2RlX3N3aXRjaF93YnNgLiBJdCdzIGEgYml0IGxvd2VyLWxldmVsLCBidXQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gb3ZlcmFsbCBJL08gZmxvdyBtZWFucyBpdCdzIHdvcnRoIGEgbG9vayBiZWZvcmUgSSBkaXNtaXNzIGl0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCB1bmRlciBjdXJyZW50IGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo0NS4zNzMzMTUwNjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlub2RlcCA9IGlzdy1cXHUwMDNlaW5vZGVzO1xcbiA1Mzc6XFx0XFx0LypcXG4gNTM4OlxcdFxcdCAqIEJ5IHRoZSB0aW1lIGNvbnRyb2wgcmVhY2hlcyBoZXJlLCBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBwYXNzZWRcXG4gNTM5OlxcdFxcdCAqIHNpbmNlIElfV0JfU1dJVENIIGFzc2VydGlvbiBhbmQgYWxsIHdiIHN0YXQgdXBkYXRlIHRyYW5zYWN0aW9uc1xcbiA1NDA6XFx0XFx0ICogYmV0d2VlbiB1bmxvY2tlZF9pbm9kZV90b193Yl9iZWdpbi9lbmQoKSBhcmUgZ3VhcmFudGVlZCB0byBiZVxcbiA1NDE6XFx0XFx0ICogc3luY2hyb25pemluZyBhZ2FpbnN0IHRoZSBpX3BhZ2VzIGxvY2suXFxuIDU0MjpcXHRcXHQgKlxcbiA1NDM6XFx0XFx0ICogR3JhYmJpbmcgb2xkX3diLVxcdTAwM2VsaXN0X2xvY2ssIGlub2RlLVxcdTAwM2VpX2xvY2sgYW5kIHRoZSBpX3BhZ2VzIGxvY2tcXG4gNTQ0OlxcdFxcdCAqIGdpdmVzIHVzIGV4Y2x1c2lvbiBhZ2FpbnN0IGFsbCB3YiByZWxhdGVkIG9wZXJhdGlvbnMgb24gQGlub2RlXFxuIDU0NTpcXHRcXHQgKiBpbmNsdWRpbmcgSU8gbGlzdCBtYW5pcHVsYXRpb25zIGFuZCBzdGF0IHVwZGF0ZXMuXFxuIDU0NjpcXHRcXHQgKi9cXG4gNTQ3OlxcdHJlbG9jazpcXG4gNTQ4OlxcdFxcdGlmIChvbGRfd2IgXFx1MDAzYyBuZXdfd2IpIHtcXG4gNTQ5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2b2xkX3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NTA6XFx0XFx0XFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTUxOlxcdFxcdH0gZWxzZSB7XFxuIDU1MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuIDU1NDpcXHRcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHdoaWxlICgqaW5vZGVwKSB7XFxuIDU1NzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVxcdTAwM2VpX3diICE9IG9sZF93Yik7XFxuIDU1ODpcXHRcXHRcXHRpZiAoaW5vZGVfZG9fc3dpdGNoX3dicygqaW5vZGVwLCBvbGRfd2IsIG5ld193YikpXFxuIDU1OTpcXHRcXHRcXHRcXHRucl9zd2l0Y2hlZCsrO1xcbiA1NjA6XFx0XFx0XFx0aW5vZGVwKys7XFxuIDU2MTpcXHRcXHRcXHRpZiAoKmlub2RlcCBcXHUwMDI2XFx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xcbiA1NjI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZvbGRfd2ItXFx1MDAzZWxpc3RfbG9jayk7XFxuIDU2NDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNTY1OlxcdFxcdFxcdFxcdGdvdG8gcmVsb2NrO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0dXBfcmVhZChcXHUwMDI2YmRpLVxcdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRpZiAobnJfc3dpdGNoZWQpIHtcXG4gNTc1OlxcdFxcdFxcdHdiX3dha2V1cChuZXdfd2IpO1xcbiA1NzY6XFx0XFx0XFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGZvciAoaW5vZGVwID0gaXN3LVxcdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCsrKSB7XFxuIDU4MDpcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVxcdTAwM2VpX3NiO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRcXHRpcHV0KCppbm9kZXApO1xcbiA1ODM6XFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihzYik7XFxuIDU4NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQ1LjM3MzQ4NDk1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTg2ODA1ODM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmluZyBXcml0ZWJhY2sgQmVoYXZpb3IqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkIHRvIG1hbmFnZSB3cml0ZWJhY2sgYmVoYXZpb3IuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIE5vdywgZG9lcyB0aGF0IGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmc6XG5cbmBgYGtjb25maWdcbmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG5cdGJvb2xcblx0ZGVwZW5kcyBvbiBNRU1DRyBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUFxuXHRkZWZhdWx0IHlcbmBgYFxuXG5BaCwgcmlnaHQsIGl0J3Mgbm90IGEgZGlyZWN0IG9wdGlvbiwgaXQgZGVmYXVsdHMgdG8gYHlgIGFzIGxvbmcgYXMgYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgIGFyZSBzZXQuIFNvIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCBhcmUgYWxsIGNydWNpYWwgdG8gY29uc2lkZXIuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIE5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgZmlsZSBhbmQgcmVsYXRlZCBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCdzIHNlYXJjaCBmb3IgdGhvc2UgYCNpZmRlZmAgb3IgYElTX0VOQUJMRURgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmRpdGlvbmFsIGJ1aWxkcyBpbiBwbGF5IHJlbGF0ZWQgdG8gd3JpdGViYWNrLiBJdCdzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5IHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjU3LjI0MTU0NTc4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MzgwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz0yMjM9dm9pZCB3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCB3Yl9jb21wbGV0aW9uICpkb25lKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjI5LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjIzMDojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5mcy9mcy13cml0ZWJhY2suYy0yMzEtXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz0xNTE4PXN0YXRpYyBib29sIGlub2RlX2RpcnRpZWRfYWZ0ZXIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyB0KVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTUyMC1cXHRib29sIHJldCA9IHRpbWVfYWZ0ZXIoaW5vZGUtXFx1MDAzZWRpcnRpZWRfd2hlbiwgdCk7XFxuZnMvZnMtd3JpdGViYWNrLmM6MTUyMTojaWZuZGVmIENPTkZJR182NEJJVFxcbmZzL2ZzLXdyaXRlYmFjay5jLTE1MjItXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NTcuNTE5OTMzNDU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NzMzMDA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB3cml0ZWJhY2sgY29kZSB3aXRoaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCwgYW5kIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgSSBzZWUgaW1tZWRpYXRlbHkgcmVsYXRlZCB0byBpdCBpcyBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIHJpZ2h0PyBCdXQgYENHUk9VUF9XUklURUJBQ0tgIGlzbid0IGEgc2ltcGxlIGZsYWcsIGl0IHJlbGllcyBvbiB0d28gb3RoZXIgY29uZmlndXJhdGlvbnM6IGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGlmIGBNRU1DR2AgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSByb290IGNvbmZpZ3VyYXRpb25zIGlmIHBvc3NpYmxlLCB0byBiZSBzdXJlIHRoaXMgaXMgc2V0IHVwIGFzIHJlcXVpcmVkLiBMZXQncyBzZWUgd2hhdCBgTUVNQ0dgIHJlbGllcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3OTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1OS45OTMyNzY3MzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTYwMjM2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowMi40NDkzMTA2NTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY0NTc2Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgc3VzcGVjdCBpcyBsdXJraW5nIGFyb3VuZCBsaW5lIDEwODUgb2YgYGluaXQvS2NvbmZpZ2AuIFRoaXMgc3VnZ2VzdHMgSSdtIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBmYWlybHkgZXN0YWJsaXNoZWQgY29tcG9uZW50IG9yIHBvdGVudGlhbGx5IGEgc2xpZ2h0bHkgbG93ZXItbGV2ZWwgb3B0aW9uIHdpdGhpbiBhIGxhcmdlciBzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGBpbml0L0tjb25maWdgLCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGtlcm5lbCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBlYXJseSBib290IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBib290LXRpbWUgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBzZWN0aW9uIGNsb3NlbHkuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG9wdGlvbiBkZWZpbml0aW9uLCBhIGRlcGVuZGVuY3kgY2hlY2ssIG9yIGV2ZW4gYSBtb3JlIGNvbXBsZXggYGlmL2Vsc2VgIHN0cnVjdHVyZSB0aGF0J3MgaW1wYWN0aW5nIHRoZSBkZXNpcmVkIGZlYXR1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXQuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VjdGlvbiBhY3R1YWxseSBob2xkcywgYW5kIEkgY2FuIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjA1LjA5NTA3NjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjExMDI6XFx0XFx0Ym9vbFxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowNS4wOTUyMTA3NDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM3MjIzMzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFnYWluLCBhbmQgSSdtIHJlbWluZGVkIHRoYXQgdGhlIGBNRU1DR2AgZmVhdHVyZSwgd2hpY2ggSSBrbm93IGlzIGNydWNpYWwgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcywgaXMgbmVzdGVkIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBDR1JPVVBTYCBvcHRpb24uIFRoYXQncyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgYXMgdXN1YWwuIE1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgYWxsIHRoZSBjb3JlIGNvbnRyb2wgZ3JvdXAgc3R1ZmYgbGl2ZXMuIEFsc28sIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5pdC9LY29uZmlnYCBmb3IgdGhlIGBCTEtfQ0dST1VQYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGJsb2NrIEkvTyBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSBhcmUgZW5hYmxlZCBjb3JyZWN0bHkgZm9yIHdoYXRldmVyIHNldHVwIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjEyLjQ2NzQ0NzUxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNjU0OTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUCRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE0Ljg5NDAwNzkxM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTE1NDgxOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgQkxLX0NHUk9VUGAgRGVwZW5kZW5jaWVzIGluIGBpbml0L0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgQkxLX0NHUk9VUGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQkxLX0NHUk9VUGAgY2FuIGJlIHNlbGVjdGVkPyBBcmUgdGhlcmUgYW55IGNvbmZsaWN0aW5nIGNob2ljZXM/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMsIG9yIGlzIGl0IG1vcmUgb2YgYSBtb2R1bGFyIHJlbGF0aW9uc2hpcD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyBoYXZlIHRvIHNheS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MTcuNDA5NDkyNzM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuMTE0MDpcXHRcXHRPbmUgbmVlZHMgdG8gYWxzbyBlbmFibGUgYWN0dWFsIElPIGNvbnRyb2xsaW5nIGxvZ2ljL3BvbGljeS4gRm9yXFxuMTE0MTpcXHRcXHRlbmFibGluZyBwcm9wb3J0aW9uYWwgd2VpZ2h0IGRpdmlzaW9uIG9mIGRpc2sgYmFuZHdpZHRoIGluIENGUSwgc2V0XFxuMTE0MjpcXHRcXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcXG4xMTQzOlxcdFxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG4xMTQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzoxNy40MDk2MzcwMzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQyMzUyNDMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgY2dyb3VwIHdyaXRlYmFjayBvcHRpbWl6YXRpb24gcGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgb3B0aW1pemluZyB0aGUgY2dyb3VwIHdyaXRlYmFjayBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNncm91cCBpcyBiZWluZyB0YWtlbiBvZmZsaW5lLiAgVGhlIGVzc2VudGlhbCBjb25maWdzIHJlcXVpcmVkIGFyZSBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiB0aGUgY29tbWl0IGxvZywgaWYgYXZhaWxhYmxlLCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29kZSBjaGFuZ2UsIGJ1dCBJIGNhbid0IGRpcmVjdGx5IHVzZSBgZ2l0IGxvZ2AgaGVyZS4gSeKAmWxsIG5lZWQgdG8gd29yayB3aXRoIHdoYXQgSSBoYXZlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBhbmQgaXMgZm9jdXNlZCBvbiBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuICBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZm9yd2FyZCBpdGVyYXRpb24gdGhyb3VnaCBhIGxpc3Qgb2YgaW5vZGVzLCBhbmQgaWYgYGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaGAgcmV0dXJuZWQgdHJ1ZSBvbiBhbiBpbm9kZSwgaXQgd291bGQgY29udGludWUgdG8gdGhlIG5leHQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcXVhZHJhdGljIHRpbWUgY29tcGxleGl0eSBkdWUgdG8gcmVzY2FubmluZyBhbHJlYWR5IHByb2Nlc3NlZCBpbm9kZXMgd2l0aGluIGEgbG9vcCB0cmlnZ2VyZWQgYnkgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmV2ZXJzZSBpdGVyYXRpb24gd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCBuYW1lZCBgc2Nhbm5lZGAuICBJ4oCZbSBzZWVpbmcgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZyBoZXJlLCBhcyB0aGUgbm9kZSBvcmRlciBpcyBiZWluZyBmdW5kYW1lbnRhbGx5IGFsdGVyZWQgd2l0aGluIGB3Yi1cdTAwM2ViX2F0dGFjaGVkYCBhbmQgYHdiLVx1MDAzZWJfZGlydHlfdGltZWAuXG5cblRoZSBwYXRjaCdzIGxvZ2ljIGlzIGNvbmNlcm5pbmcsIGJlY2F1c2UgdGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBpcyBiZWluZyBzdWJzdGFudGlhbGx5IGNoYW5nZWQ6IG5vZGVzIGFyZSB0ZW1wb3JhcmlseSByZW1vdmVkIGZyb20gdGhlIG1haW4gbGlzdCAoYHdiLVx1MDAzZWJfYXR0YWNoZWRgIG9yIGB3Yi1cdTAwM2ViX2RpcnR5X3RpbWVgKSB3aGlsZSBiZWluZyBwcm9jZXNzZWQuIFRoZW4sIHRoZXJlJ3MgYSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBhdCB0aGUgZW5kIHRvIHJlLWludGVncmF0ZSB0aGUgcHJvY2Vzc2VkIG5vZGVzIGJhY2sgaW50byB0aGUgKmhlYWQqIG9mIHRoZSBvcmlnaW5hbCBsaXN0LiBJZiBgZnVsbGAgaXMgdHJ1ZSwgdGhlIG5vZGUgb3JkZXIgZ2V0cyBjaGFuZ2VkIGluIHN1YnRsZSB3YXlzLCBhbmQgdGhlIGBoZWFkLVx1MDAzZXByZXZgIGNvdWxkIGdldCBjaGFuZ2VkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGtlcm5lbCBsaXN0IG1hbmlwdWxhdGlvbiBzY2VuYXJpbywgd2hlcmUgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0b3VjaGluZyBgd2ItXHUwMDNlbGlzdF9sb2NrYCBjb3VsZCBpbnRyb2R1Y2UgZGF0YSByYWNlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGNvdWxkIGhhcHBlbiBpZiBhbm90aGVyIHRocmVhZCBvciBpbnRlcnJ1cHQgaW50ZXJhY3RzIHdpdGggdGhlIGxpc3Qgd2hpbGUgaW5vZGVzIGFyZSBpbiB0aGlzICdzY2FubmVkJyBzdGF0ZSwgb3IgaWYgYG1vdmVfZXhwaXJlZF9pbm9kZXNgIHJ1bnMsIG9yIGlmIGFuIGlub2RlIGlzIGZyZWVkIHdoaWxlIGl0cyBmbGFncyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIG9yZGVyIG9mIGlub2RlcyB3aXRoaW4gdGhlIHdyaXRlYmFjayBsaXN0cyBhbmQgaG93IHRoZSBgbGlzdF9zcGxpY2VgIG9wZXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbGlzdCBoZWFkIChhbmQgdGhlIGBiX2RpcnR5X3RpbWVgIGF0dHJpYnV0ZSkgYXJlIGtleSBhcmVhcyBvZiBjb25jZXJuLlxuXG5CYXNlZCBvbiB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMsIHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcIkNvcmUgU3Vic3lzdGVtc1wiIGNhdGVnb3J5LCBzcGVjaWZpY2FsbHkgVkZTIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgd2l0aCBhIHRvdWNoIG9mIHJlZmFjdG9yaW5nL2NvZGUgY2xlYW51cC4gIEl0IGlzIGEgcmVhY2hhYmxlIGFyZWEgdGhhdCBtb2RpZmllcyBjb3JlIGRhdGEgc3RydWN0dXJlcy5cblxuVG8gaWRlbnRpZnkgd2hhdCB0byBmb2N1cyBvbiwgSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBpc3dfcHJlcGFyZV93YnNfc3dpdGNoYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBgcHJvY2Vzc19pbm9kZV9zd2l0Y2hfd2JzYCwgYW5kIGBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm5gLiAgSSd2ZSBjaGVja2VkLCBhbmQgbm9uZSBvZiB0aGVzZSBhcmUgdWJpcXVpdG91czsgdGhleSBhcmUgYWxsIHNwZWNpZmljIHRvIGNncm91cCB3cml0ZWJhY2sgLyBpbm9kZSB3cml0ZWJhY2sgc3dpdGNoaW5nLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgc2V0IChgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGApLCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gIEknbGwgcmUtZXhhbWluZSB0aGUgY29kZSB0byBjb25maXJtIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvbmRpdGlvbiBvbiB0aGUgYmVoYXZpb3Igb2YgYGNsZWFudXBfb2ZmbGluZV9jZ3diYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MzEuNjQ0ODgzNTI4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU3MjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYmFja2luZy1kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9iYWNraW5nLWRldi5jPTYyPXN0YXRpYyB2b2lkIGNvbGxlY3Rfd2Jfc3RhdHMoc3RydWN0IHdiX3N0YXRzICpzdGF0cyxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODUtXFxubW0vYmFja2luZy1kZXYuYzo4NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9iYWNraW5nLWRldi5jLTg3LXN0YXRpYyB2b2lkIGJkaV9jb2xsZWN0X3N0YXRzKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTE1OD1zdGF0aWMgdm9pZCB3Yl9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy0xNzQtXFx0XFx0ICAgXFxcInN0YXRlOiAgICAgICAgICAgICAlMTBseFxcXFxuXFxcXG5cXFwiLFxcbm1tL2JhY2tpbmctZGV2LmM6MTc1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL2JhY2tpbmctZGV2LmMtMTc2LVxcdFxcdCAgIGNncm91cF9pbm8od2ItXFx1MDAzZW1lbWNnX2Nzcy1cXHUwMDNlY2dyb3VwKSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy01ODYtXFxubW0vYmFja2luZy1kZXYuYzo1ODc6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vYmFja2luZy1kZXYuYy01ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMxLjY5NTQ2MjY3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODQwNzc1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIHllcCwgYG1tL2JhY2tpbmctZGV2LmNgICpkb2VzKiBpbmNsdWRlIHRoYXQgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgZGlyZWN0aXZlLiBOb3csIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gYENHUk9VUF9XUklURUJBQ0tgIGluIGBpbml0L0tjb25maWdgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gRnVydGhlciBkb3duIHRoZSBjaGFpbiwgYEJMS19DR1JPVVBgIGl0c2VsZiByZWxpZXMgb24gYEJMT0NLYC4gU3RyYWlnaHRmb3J3YXJkLiBCdXQgd2hhdCBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0LCBpcyBgQ0dST1VQU2AgcmVxdWlyZWQ/IEFoLCB5ZXMsIGxvb2tpbmcgYXQgYGluaXQvS2NvbmZpZ2AgYWdhaW4sIGBNRU1DR2AgYWN0dWFsbHkgKmRlcGVuZHMqIG9uIGBDR1JPVVBTYC4gSXQncyBjbGVhcmx5IHN0YXRlZCByaWdodCB0aGVyZSB3aXRoaW4gdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIGJsb2NrLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDR1JPVVBTYCBpcyBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gcmV2aXNpdCBgaW5pdC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzU3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjM4LjUzNjI0MDE5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0Njc2MjE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNTM9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNTUtXFxuaW5pdC9LY29uZmlnOjEwNTY6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNTctXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0MC4zODMwMDc3OThaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk4MDE1NTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBSZWFkeSB0byBQcm9jZWVkIHdpdGggYHNldC1yZXN1bHRzYCoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgYW5hbHlzaXMgaXMgY29tcGxldGUuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYENHUk9VUFNgLCBhbmQgYEJMT0NLYC4gQWxsIGNoZWNrcyBwYXNzZWQuXG5cbk5leHQsIEkgdmVyaWZpZWQgdGhlIGNvcmUgYXNzZXNzbWVudCBjcml0ZXJpYS4gSXQncyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHZlcmRpY3QuIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc3VjY2luY3QgYW5kIGFjY3VyYXRlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHdoaWNoIGluY2x1ZGVzIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYCAob3IgcG90ZW50aWFsbHkgYENHUk9VUFNgIGFuZCBgQkxPQ0tgKSwgbWF0Y2hlcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjaGFuZ2UuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBpbmNsdWRpbmcgYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAsIGBpbm9kZV9wcmVwYXJlX3dic19zd2l0Y2hgLCBhbmQgYHdiX21lbWNnX29mZmxpbmVgLCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGNvZGUgY2hhbmdlcy5cblxuSSd2ZSByZXZpZXdlZCB0aGUgcmVhc29uaW5nIGluIGRldGFpbC4gVGhlIHBhdGNoIHRhcmdldHMgYGZzL2ZzLXdyaXRlYmFjay5jYCBzcGVjaWZpY2FsbHksIG1vZGlmeWluZyBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAuIFRoaXMgaXMgY29yZSBWRlMgd3JpdGViYWNrIGFuZCB0aGUgY2dyb3VwIHdyaXRlYmFjayBzdWJzeXN0ZW0uIEl0IGFsdGVycyB0aGUgaW5vZGUgd3JpdGViYWNrIGxpc3Qgc2Nhbm5pbmcgYW5kIHJlb3JkZXJpbmcgZHVyaW5nIG9mZmxpbmUgY2dyb3VwIHdyaXRlYmFjayBjbGVhbnVwIChgY2xlYW51cF9vZmZsaW5lX2Nnd2JgKS4gVGhlIGNvZGUgc3dpdGNoZXMgZnJvbSBmb3J3YXJkIHRvIHJldmVyc2UgaXRlcmF0aW9uIGFuZCB1c2VzIGEgbG9jYWwgbGlzdCBmb3IgdGVtcG9yYXJ5IGVudHJpZXMuIFRoZSBjb2RlIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgY2dyb3VwcyB3aXRoIGF0dGFjaGVkIHdyaXRlYmFjayBpbm9kZXMgd2hlbiBvZmZsaW5lZCwgbWFraW5nIGl0IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkV2ZXJ5dGhpbmcgaXMgY2xlYXIuIFRoZSByZWFzb25pbmcgaXMgc291bmQsIGFuZCBhbGwgcmVxdWlyZWQgY2hlY2tzIGhhdmUgYmVlbiB2YWxpZGF0ZWQuIEknbSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgYW0gbm93IHByb2NlZWRpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc5MiwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuMzYzMTY2NjQyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MDAxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXN3X3ByZXBhcmVfd2JzX3N3aXRjaFwiLFxuICAgIFwiY2xlYW51cF9vZmZsaW5lX2Nnd2JcIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcIndiX21lbWNnX29mZmxpbmVcIixcbiAgICBcImlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlzd19wcmVwYXJlX3dic19zd2l0Y2goKSBpbiBmcy9mcy13cml0ZWJhY2suYywgYWx0ZXJpbmcgbGlzdCB0cmF2ZXJzYWwgYW5kIHJlb3JkZXJpbmcgbG9naWMgZm9yIGlub2RlcyBvbiB0aGUgd3JpdGViYWNrIGlvIGxpc3RzIChiX2F0dGFjaGVkIGFuZCBiX2RpcnR5X3RpbWUpIGR1cmluZyBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgY2xlYW51cC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL01NIHdyaXRlYmFjayBkYXRhIHN0cnVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlbiBvZmZsaW5pbmcgbWVtb3J5IGNncm91cHMgd2l0aCBhY3RpdmUgb3IgbGF6eXRpbWUgZGlydHkgaW5vZGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0NS40Mzc4NzYzMzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODM4MDA5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuNDM4NDE0ODUzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM4Mzc0NjY1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzICdpc3dfcHJlcGFyZV93YnNfc3dpdGNoJyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAnc2Nhbm5lZCcgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCdzY2FubmVkJyBhbmQgJ2Z1bGwnKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJ2Jvb2wgZnVsbCA9IGZhbHNlOycpLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJ2lzdycgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGI4ZTJjN2UxZGViYjg2MzI2OGE1MzY1NTgwMzA3NzgwY2JlNTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBlNzQ0ZjlmOWQ0M2ZhLi5lYTNlYjQwYmY4MjhlIDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtNzI3LDE5ICs3MjcsMzQgQEAgc3RhdGljIGJvb2wgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlX3N3aXRjaF93YnNfY29udGV4dCAqaXN3LFxuIFx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICpucilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcbitcdExJU1RfSEVBRChzY2FubmVkKTtcbitcdGJvb2wgZnVsbCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFdhbGsgZnJvbSB0aGUgb2xkZXN0IGVuZCBhbmQgbW92ZSBzY2FubmVkIGlub2RlcyB0byB0aGUgbmV3ZXN0XG4rXHQgKiBlbmQsIHNvIHRoZSBuZXh0IHNjYW4gcmVzdW1lcyBhdCB1bnNjYW5uZWQgaW5vZGVzIGluc3RlYWQgb2ZcbitcdCAqIHJlLXdhbGtpbmcgYW4gZXZlci1ncm93aW5nIHJ1biBvZiBwcmVwYXJlZCBhbmQgc2tpcHBlZCBvbmVzLlxuK1x0ICogRm9yIGJfZGlydHlfdGltZSB0aGlzIGtlZXBzIHRoZSBvbGRlc3QgdW5zY2FubmVkIGlub2RlIGF0IHRoZVxuK1x0ICogZW5kIG1vdmVfZXhwaXJlZF9pbm9kZXMoKSBwaWNrcyBmcm9tOyBiX2F0dGFjaGVkIGlzIHVub3JkZXJlZC5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaW5vZGUsIHRtcCwgbGlzdCwgaV9pb19saXN0KSB7XG4rXHRcdGxpc3RfbW92ZShcdTAwMjZpbm9kZS1cdTAwM2VpX2lvX2xpc3QsIFx1MDAyNnNjYW5uZWQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgbGlzdCwgaV9pb19saXN0KSB7XG4gXHRcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpc3ctXHUwMDNlaW5vZGVzWypucl0gPSBpbm9kZTtcbiBcdFx0KCpucikrKztcbiBcbi1cdFx0aWYgKCpuciBcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmICgqbnIgXHUwMDNlPSBXQl9NQVhfSU5PREVTX1BFUl9JU1cgLSAxKSB7XG4rXHRcdFx0ZnVsbCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdGxpc3Rfc3BsaWNlKFx1MDAyNnNjYW5uZWQsIGxpc3QpO1xuK1xuK1x0cmV0dXJuIGZ1bGw7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDUuNDM4NDE1NzQzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTgzMzYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZnMtd3JpdGViYWNrLmNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvZnMtd3JpdGViYWNrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5naW5nIGFuZCB3aHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBTaW5jZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHdyaXRlYmFjayBiZWhhdmlvciwgSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBsaW5lIDcyNyBhbmQgc2VlIHdoYXQgdGhhdCBnaXZlcyBtZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSBzb21lIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZGlmaWNhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBhcmVhIG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjQ5Ljg1Njc1NjA1NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzEwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzEwOlxcdFxcdGlmICghaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKGlub2RlLCBuZXdfd2IpKVxcbiA3MTE6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0aXN3LVxcdTAwM2Vpbm9kZXNbMF0gPSBpbm9kZTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZShpbm9kZS1cXHUwMDNlaV93YiwgbmV3X3diLCAxKTtcXG4gNzE2OlxcdFxcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XFxuIDcxNzpcXHRcXHRyZXR1cm47XFxuIDcxODpcXHRcXG4gNzE5OlxcdG91dF9mcmVlOlxcbiA3MjA6XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDcyMTpcXHRcXHRpZiAobmV3X3diKVxcbiA3MjI6XFx0XFx0XFx0d2JfcHV0KG5ld193Yik7XFxuIDcyMzpcXHRcXHRrZnJlZShpc3cpO1xcbiA3MjQ6XFx0fVxcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csXFxuIDcyODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKm5yKVxcbiA3Mjk6XFx0e1xcbiA3MzA6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgKnRtcDtcXG4gNzMxOlxcdFxcdExJU1RfSEVBRChzY2FubmVkKTtcXG4gNzMyOlxcdFxcdGJvb2wgZnVsbCA9IGZhbHNlO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHQvKlxcbiA3MzU6XFx0XFx0ICogV2FsayBmcm9tIHRoZSBvbGRlc3QgZW5kIGFuZCBtb3ZlIHNjYW5uZWQgaW5vZGVzIHRvIHRoZSBuZXdlc3RcXG4gNzM2OlxcdFxcdCAqIGVuZCwgc28gdGhlIG5leHQgc2NhbiByZXN1bWVzIGF0IHVuc2Nhbm5lZCBpbm9kZXMgaW5zdGVhZCBvZlxcbiA3Mzc6XFx0XFx0ICogcmUtd2Fsa2luZyBhbiBldmVyLWdyb3dpbmcgcnVuIG9mIHByZXBhcmVkIGFuZCBza2lwcGVkIG9uZXMuXFxuIDczODpcXHRcXHQgKiBGb3IgYl9kaXJ0eV90aW1lIHRoaXMga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGUgYXQgdGhlXFxuIDczOTpcXHRcXHQgKiBlbmQgbW92ZV9leHBpcmVkX2lub2RlcygpIHBpY2tzIGZyb207IGJfYXR0YWNoZWQgaXMgdW5vcmRlcmVkLlxcbiA3NDA6XFx0XFx0ICovXFxuIDc0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShpbm9kZSwgdG1wLCBsaXN0LCBpX2lvX2xpc3QpIHtcXG4gNzQyOlxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfaW9fbGlzdCwgXFx1MDAyNnNjYW5uZWQpO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRcXHRpZiAoIWlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChpbm9kZSwgbmV3X3diKSlcXG4gNzQ1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRcXHRpc3ctXFx1MDAzZWlub2Rlc1sqbnJdID0gaW5vZGU7XFxuIDc0ODpcXHRcXHRcXHQoKm5yKSsrO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRcXHRpZiAoKm5yIFxcdTAwM2U9IFdCX01BWF9JTk9ERVNfUEVSX0lTVyAtIDEpIHtcXG4gNzUxOlxcdFxcdFxcdFxcdGZ1bGwgPSB0cnVlO1xcbiA3NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc1MzpcXHRcXHRcXHR9XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXHRsaXN0X3NwbGljZShcXHUwMDI2c2Nhbm5lZCwgbGlzdCk7XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdHJldHVybiBmdWxsO1xcbiA3NTg6XFx0fVxcbiA3NTk6XFx0XFxuIDc2MDpcXHQvKipcXG4gNzYxOlxcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3diIC0gZGV0YWNoIGFzc29jaWF0ZWQgaW5vZGVzXFxuIDc2MjpcXHQgKiBAd2I6IHRhcmdldCB3YlxcbiA3NjM6XFx0ICpcXG4gNzY0OlxcdCAqIFN3aXRjaCBhbGwgaW5vZGVzIGF0dGFjaGVkIHRvIEB3YiB0byBhIG5lYXJlc3QgbGl2aW5nIGFuY2VzdG9yJ3Mgd2IgaW4gb3JkZXJcXG4gNzY1OlxcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXFxuIDc2NjpcXHQgKiBzd2l0Y2hlZCBhbmQgdGhlIGZ1bmN0aW9uIGhhcyB0byBiZSByZXN0YXJ0ZWQuXFxuIDc2NzpcXHQgKi9cXG4gNzY4OlxcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbiA3Njk6XFx0e1xcbiA3NzA6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcXG4gNzcxOlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcXG4gNzcyOlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2I7XFxuIDc3MzpcXHRcXHRpbnQgbnI7XFxuIDc3NDpcXHRcXHRib29sIHJlc3RhcnQgPSBmYWxzZTtcXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgV0JfTUFYX0lOT0RFU19QRVJfSVNXKTtcXG4gNzc3OlxcdFxcdGlmICghaXN3KVxcbiA3Nzg6XFx0XFx0XFx0cmV0dXJuIHJlc3RhcnQ7XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDkuODU3MDg0MTk0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1Nzk1OTc1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCoqXG5cbk9rYXksIHNvIEkndmUgaGl0IGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBObyBwb2ludCBqdXN0IGRpdmluZyBpbiB3aXRob3V0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0cmlnZ2VycyBpdCwgd2hhdCBpdHMgaW5wdXRzIGFyZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgd29ya2Zsb3cgaXMgdGhhdCBpdCdzIGVtYmVkZGVkIHdpdGhpbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYW55IHJlbGV2YW50IGdsb2JhbCB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXQgbWlnaHQgdG91Y2guIEknbGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVzb3VyY2UgY2xlYW51cCwgdGVtcG9yYXJ5IGZpbGUgZGVsZXRpb24sIGRhdGFiYXNlIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQsIG9yIHN0YXRlIHJlc2V0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIGRhdGEgc2VyaWFsaXphdGlvbiBjb25zaWRlcmF0aW9ucyBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIHJlbGF0ZWQgdG8gZmFpbGVkIG9wZXJhdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo1NS40MzY2ODUyOTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZzLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NTpcXHRcXG4gNzc2OlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc3NzpcXHRcXHRpZiAoIWlzdylcXG4gNzc4OlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzgzOlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzg0OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzg1OlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzg5OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0bnIgPSAwO1xcbiA3OTI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzkzOlxcdFxcdC8qXFxuIDc5NDpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3OTU6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3OTY6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3OTc6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3OTg6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3OTk6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gODAwOlxcdFxcdCAqL1xcbiA4MDE6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gODAyOlxcdFxcdGlmICghcmVzdGFydClcXG4gODAzOlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA4MDU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDgwODpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA4MDk6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDgxMDpcXHRcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gODExOlxcdFxcdFxcdGtmcmVlKGlzdyk7XFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODEzOlxcdFxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0dHJhY2VfaW5vZGVfc3dpdGNoX3dic19xdWV1ZSh3YiwgbmV3X3diLCBucik7XFxuIDgxNjpcXHRcXHR3Yl9xdWV1ZV9pc3cobmV3X3diLCBpc3cpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRyZXR1cm4gcmVzdGFydDtcXG4gODE5OlxcdH1cXG4gODIwOlxcdFxcbiA4MjE6XFx0LyoqXFxuIDgyMjpcXHQgKiB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUgLSBhc3NvY2lhdGUgd2JjIHdpdGggdGFyZ2V0IGlub2RlIGFuZCB1bmxvY2sgaXRcXG4gODIzOlxcdCAqIEB3YmM6IHdyaXRlYmFja19jb250cm9sIG9mIGludGVyZXN0XFxuIDgyNDpcXHQgKiBAaW5vZGU6IHRhcmdldCBpbm9kZVxcbiA4MjU6XFx0ICpcXG4gODI2OlxcdCAqIEBpbm9kZSBpcyBsb2NrZWQgYW5kIGFib3V0IHRvIGJlIHdyaXR0ZW4gYmFjayB1bmRlciB0aGUgY29udHJvbCBvZiBAd2JjLlxcbiA4Mjc6XFx0ICogUmVjb3JkIEBpbm9kZSdzIHdyaXRlYmFjayBjb250ZXh0IGludG8gQHdiYyBhbmQgdW5sb2NrIHRoZSBpX2xvY2suICBPblxcbiA4Mjg6XFx0ICogd3JpdGViYWNrIGNvbXBsZXRpb24sIHdiY19kZXRhY2hfaW5vZGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgVGhpcyBpcyB1c2VkXFxuIDgyOTpcXHQgKiB0byB0cmFjayB0aGUgY2dyb3VwIHdyaXRlYmFjayBjb250ZXh0LlxcbiA4MzA6XFx0ICovXFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuIDgzMjpcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA4MzM6XFx0XFx0X19yZWxlYXNlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jaylcXG4gODM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NTUuNDM2OTI3NDA3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MzI0NzA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbm9kZSBTd2l0Y2ggV3JpdGViYWNrIENvbnRleHQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXN3YCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIOKAkyBob3cgaXQncyBhbGxvY2F0ZWQsIGhvdyBpdHMgYGlub2Rlc2AgbWVtYmVyIGlzIHVzZWQsIGFuZCBvdmVyYWxsLCB3aGVyZSBpdCBmaXRzIGluLiBJdCBhcHBlYXJzIHRvIGJlIGEgYHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHRgLCBhbmQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvZGUsIGl0cyBhbGxvY2F0aW9uIGhhcHBlbnMgd2l0aGluIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgdmlhIGBremFsbG9jX2ZsZXhgLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCEgQSBwb2ludGVyIGAqbnJgICh0byBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHRvIDApIHNlZW1zIHRvIHBsYXkgYSByb2xlIGluIGhvdyB0aGlzIHN0cnVjdHVyZSdzIGBpbm9kZXNgIG1lbWJlciBpcyBwb3B1bGF0ZWQuXG5cblRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gYGlzd19wcmVwYXJlX3dic19zd2l0Y2hgLiBUaGUgZXhpc3RpbmcgY29kZSBzbmlwcGV0IHNob3dzIGEgc3RyYWlnaHRmb3J3YXJkIGl0ZXJhdGlvbiB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMgKGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCksIHdoZXJlIGlub2RlcyBtZWV0aW5nIGEgY2VydGFpbiBjb25kaXRpb24gaGF2ZSB0aGVpciBwb2ludGVycyBzdG9yZWQgaW4gYGlzdy1cdTAwM2Vpbm9kZXNgLiBUaGUgYCpucmAgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIHN1Y2Nlc3NmdWwgaW5zZXJ0aW9uLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkgaWYgdGhlIGJ1ZmZlciBpcyBmaWxsZWQuXG5cblRoZSBcImFmdGVyIHRoZSBwYXRjaFwiIGNvZGUgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZvcndhcmQgaXRlcmF0aW9uLCB0aGUgY29kZSBub3cgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSB0ZW1wb3JhcnkgbGlzdCAoYHNjYW5uZWRgKS4gVGhpcyBzdWdnZXN0cyBhIHJlb3JkZXJpbmcgb3IgcHJpb3JpdGl6YXRpb24gc3RyYXRlZ3kgZm9yIGlub2RlIHByb2Nlc3NpbmcuIFRoZSBpbnRlbnQgc2VlbXMgdG8ga2VlcCB0aGUgb2xkZXN0IHVuc2Nhbm5lZCBpbm9kZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFmdGVyIHRoZSBtb3ZlLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLCBJIHdvbmRlciBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgdXNlIG9mIGBsaXN0X3NwbGljZWAgaXMgYWxzbyBub3RhYmxlLCBjb21iaW5pbmcgdGhlIGxpc3RzIGFmdGVyIHRoZSBpdGVyYXRpb24sIHRoaXMgc2VlbXMgbW9yZSBzb3BoaXN0aWNhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpc3ctXHUwMDNlaW5vZGVzYCBhcnJheSBpcyAqY29uc3VtZWQqLiBJIG5lZWQgdG8gZmluZCB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZXMgdGhpcyBjb250ZXh0IHRvIHF1ZXVlIHRoZSB3cml0ZWJhY2sgcmVxdWVzdHMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIChvciBzaW1pbGFyKSB0byBsb2NhdGUgY2FsbHMgdG8gYHdiX3F1ZXVlX2lzd2AgYW5kIHJlbGF0ZWQgdXNlcyBvZiB0aGUgYHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHRgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIHJlc3Qgb2YgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDowMS4wNjk0MDE0MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1OTc3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndiX3F1ZXVlX2lzd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mcy13cml0ZWJhY2suYz02MjQ9c3RhdGljIGJvb2wgaW5vZGVfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy02NTktXFxuZnMvZnMtd3JpdGViYWNrLmM6NjYwOnN0YXRpYyB2b2lkIHdiX3F1ZXVlX2lzdyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuZnMvZnMtd3JpdGViYWNrLmMtNjYxLVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYz02NzU9c3RhdGljIHZvaWQgaW5vZGVfc3dpdGNoX3dicyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X3diX2lkKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNzE1LVxcdHRyYWNlX2lub2RlX3N3aXRjaF93YnNfcXVldWUoaW5vZGUtXFx1MDAzZWlfd2IsIG5ld193YiwgMSk7XFxuZnMvZnMtd3JpdGViYWNrLmM6NzE2OlxcdHdiX3F1ZXVlX2lzdyhuZXdfd2IsIGlzdyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNzE3LVxcdHJldHVybjtcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTc2OD1ib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTgxNS1cXHR0cmFjZV9pbm9kZV9zd2l0Y2hfd2JzX3F1ZXVlKHdiLCBuZXdfd2IsIG5yKTtcXG5mcy9mcy13cml0ZWJhY2suYzo4MTY6XFx0d2JfcXVldWVfaXN3KG5ld193YiwgaXN3KTtcXG5mcy9mcy13cml0ZWJhY2suYy04MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAxLjM1NTM4OTQ2MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjM3OTExNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBmcy13cml0ZWJhY2suYzogTGluZXMgNjUwLTcxMCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDY1MCB0byA3MTAuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGJlIGludm9sdmVkIGluIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB3cml0ZWJhY2ssIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGRpcnR5IHBhZ2VzIGFyZSBpZGVudGlmaWVkLCBwZXJoYXBzIGhhbmRsZWQgYXQgdGhlIGluZGl2aWR1YWwgZmlsZXN5c3RlbSBsZXZlbCBvciBob3cgdGhlIGdsb2JhbCB3cml0ZWJhY2sgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBzcGVjaWZpYyBkaXJ0eSBwYWdlcy4gR2l2ZW4gdGhlIGZpbGUgY29udGV4dCwgaXTigJlzIGhpZ2hseSBwcm9iYWJsZSBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGB3Yl93cml0ZWJhY2tgIGZ1bmN0aW9uIG9yIG9uZSBvZiBpdHMgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IGVsdWNpZGF0ZSBpdHMgcm9sZSBpbiB0aGUgZ2xvYmFsIHdyaXRlYmFjayBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGRpcnR5IHBhZ2Ugc2VsZWN0aW9uIHByb2Nlc3MuIEkgd2FudCB0byB1bmRlcnN0YW5kOiBpcyBpdCBzZWxlY3Rpbmcgc3BlY2lmaWMgZGlydHkgcGFnZXMsIGhhbmRsaW5nIGEgd2hvbGUgcmFuZ2Ugb2YgcGFnZXMgd2l0aGluIGEgQkRJLCBvciBkb2VzIGl0IGNvbnRyb2wgdGhlIHNjaGVkdWxpbmcgb2Ygd3JpdGViYWNrcyBiYXNlZCBvbiBJL08gYmFuZHdpZHRoPyBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBiYWxhbmNlcyByZXNwb25zaXZlbmVzcyB3aXRoIGRhdGEgaW50ZWdyaXR5LiBJdCB3b3VsZCBiZSBncmVhdCBpZiB0aGlzIHNlY3Rpb24gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY2xlYW5lciBhbmQgdGhlIGZsdXNoZXIgdGhyZWFkcyBhbmQgaWYgdGhpcyBzZWN0aW9uIGhhcyBzb21lIGxvY2tpbmcgbWVjaGFuaXNtIGFzIHdlbGwsIEknbSBob3BpbmcgdG8gc2VlIGhvdyBpdCBwcm90ZWN0cyB0aGUgcmVsZXZhbnQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAzLjk5MzMwNDkwMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdF9faWdldChpbm9kZSk7XFxuIDY1MTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdHJldHVybiB0cnVlO1xcbiA2NTQ6XFx0XFxuIDY1NTpcXHRvdXRfdW5waW46XFxuIDY1NjpcXHRcXHRjZ3JvdXBfd3JpdGViYWNrX3VucGluKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNjU3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0c3RhdGljIHZvaWQgd2JfcXVldWVfaXN3KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4gNjYxOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3cpXFxuIDY2MjpcXHR7XFxuIDY2MzpcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZpc3ctXFx1MDAzZWxpc3QsIFxcdTAwMjZ3Yi1cXHUwMDNlc3dpdGNoX3dic19jdHhzKSlcXG4gNjY0OlxcdFxcdFxcdHF1ZXVlX3dvcmsoaXN3X3dxLCBcXHUwMDI2d2ItXFx1MDAzZXN3aXRjaF93b3JrKTtcXG4gNjY1OlxcdH1cXG4gNjY2OlxcdFxcbiA2Njc6XFx0LyoqXFxuIDY2ODpcXHQgKiBpbm9kZV9zd2l0Y2hfd2JzIC0gY2hhbmdlIHRoZSB3YiBhc3NvY2lhdGlvbiBvZiBhbiBpbm9kZVxcbiA2Njk6XFx0ICogQGlub2RlOiB0YXJnZXQgaW5vZGVcXG4gNjcwOlxcdCAqIEBuZXdfd2JfaWQ6IElEIG9mIHRoZSBuZXcgd2JcXG4gNjcxOlxcdCAqXFxuIDY3MjpcXHQgKiBTd2l0Y2ggQGlub2RlJ3Mgd2IgYXNzb2NpYXRpb24gdG8gdGhlIHdiIGlkZW50aWZpZWQgYnkgQG5ld193Yl9pZC4gIFRoZVxcbiA2NzM6XFx0ICogc3dpdGNoaW5nIGlzIHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSBhbmQgbWF5IGZhaWwgc2lsZW50bHkuXFxuIDY3NDpcXHQgKi9cXG4gNjc1OlxcdHN0YXRpYyB2b2lkIGlub2RlX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld193Yl9pZClcXG4gNjc2OlxcdHtcXG4gNjc3OlxcdFxcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBpbm9kZV90b19iZGkoaW5vZGUpO1xcbiA2Nzg6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcztcXG4gNjc5OlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdztcXG4gNjgwOlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IgPSBOVUxMO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHQvKiBub29wIGlmIHNlZW1zIHRvIGJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi9cXG4gNjgzOlxcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9XQl9TV0lUQ0gpXFxuIDY4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdC8qIGF2b2lkIHF1ZXVlaW5nIGEgbmV3IHN3aXRjaCBpZiB0b28gbWFueSBhcmUgYWxyZWFkeSBpbiBmbGlnaHQgKi9cXG4gNjg3OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXN3X25yX2luX2ZsaWdodCkgXFx1MDAzZSBXQl9GUk5fTUFYX0lOX0ZMSUdIVClcXG4gNjg4OlxcdFxcdFxcdHJldHVybjtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0aXN3ID0ga3phbGxvY19mbGV4KCppc3csIGlub2RlcywgMiwgR0ZQX0FUT01JQyk7XFxuIDY5MTpcXHRcXHRpZiAoIWlzdylcXG4gNjkyOlxcdFxcdFxcdHJldHVybjtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuIDY5NTpcXHRcXG4gNjk2OlxcdFxcdC8qIGZpbmQgYW5kIHBpbiB0aGUgbmV3IHdiICovXFxuIDY5NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDY5ODpcXHRcXHRtZW1jZ19jc3MgPSBjc3NfZnJvbV9pZChuZXdfd2JfaWQsIFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpO1xcbiA2OTk6XFx0XFx0aWYgKG1lbWNnX2NzcyBcXHUwMDI2XFx1MDAyNiAhY3NzX3RyeWdldChtZW1jZ19jc3MpKVxcbiA3MDA6XFx0XFx0XFx0bWVtY2dfY3NzID0gTlVMTDtcXG4gNzAxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA3MDI6XFx0XFx0aWYgKCFtZW1jZ19jc3MpXFxuIDcwMzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRuZXdfd2IgPSB3Yl9nZXRfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBHRlBfQVRPTUlDKTtcXG4gNzA2OlxcdFxcdGNzc19wdXQobWVtY2dfY3NzKTtcXG4gNzA3OlxcdFxcdGlmICghbmV3X3diKVxcbiA3MDg6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDowMy45OTM2MDczODJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk0NDc3NTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggYW5kIERhdGEgQWNjZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgc3dpdGNoX3dvcmtgIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGhvdyBgaXN3LVx1MDAzZWlub2Rlc2AgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHBvaW50cyBvZiBleGVjdXRpb24gd2hlcmUgYHN3aXRjaF93b3JrYCBpcyBjYWxsZWQuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCB0ZWxscyBtZSB0aGUgY29uZGl0aW9ucyBhbmQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbm9kZSBhY2Nlc3MgaXMgaGFwcGVuaW5nLiBJcyBpdCBjYWxsZWQgZnJvbSBhIHRhc2tsZXQsIGludGVycnVwdCBoYW5kbGVyLCBvciBhIHJlZ3VsYXIgcHJvY2VzcyBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHRoZSBpbm9kZSBhY2Nlc3MuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hpY2gqIGlub2RlIGlzIGFjY2Vzc2VkLCBhbmQgaWYgdGhlIHNhbWUgaW5vZGUgY2FuIGJlIGFjY2Vzc2VkIGVsc2V3aGVyZSwgYW5kIGlmIHNvLCB3aGVuIGFuZCBob3cuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGlub2RlIHVzZSBwYXR0ZXJuLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY29tcGxldGUgYWNjZXNzIHBhdHRlcm4gZm9yIGBpc3ctXHUwMDNlaW5vZGVzYC4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB0byBiZSBhZGRyZXNzZWQsIG9yIGlmIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gSSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gZm9sbG93IGZ1bmN0aW9uIGNhbGxzIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBhdGhzIHRoYXQgbWF5IHVzZSB0aGUgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGEgZGVlcCBkaXZlIHdpdGggbXkgZGVidWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjA2LjkzODM4NjkzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNDcwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dpdGNoX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnMtd3JpdGViYWNrLmM9NTkwPXZvaWQgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTU5Mi1cXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxcbmZzL2ZzLXdyaXRlYmFjay5jOjU5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3dpdGNoX3dvcmspO1xcbmZzL2ZzLXdyaXRlYmFjay5jLTU5NC1cXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3csICpuZXh0X2lzdztcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTY2MD1zdGF0aWMgdm9pZCB3Yl9xdWV1ZV9pc3coc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtNjYzLVxcdGlmIChsbGlzdF9hZGQoXFx1MDAyNmlzdy1cXHUwMDNlbGlzdCwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd2JzX2N0eHMpKVxcbmZzL2ZzLXdyaXRlYmFjay5jOjY2NDpcXHRcXHRxdWV1ZV93b3JrKGlzd193cSwgXFx1MDAyNndiLVxcdTAwM2Vzd2l0Y2hfd29yayk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNjY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MDYuOTg5NTU3MjI0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyMzg3MDg0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYCBmdW5jdGlvbiBpbiBgZnMvZnMtd3JpdGViYWNrLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXcml0ZWJhY2sgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgaW5vZGVfc3dpdGNoX3dic193b3JrX2ZuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24ndCBpdD8gVGhpcyBmdW5jdGlvbiBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2Ygd3JpdGViYWNrIG9wZXJhdGlvbnMsIHRoZSBjb3JlIG1hY2hpbmVyeSB0aGF0IGVuc3VyZXMgZGF0YSBnZXRzIGZyb20gdGhlIGlub2RlJ3MgZGlydHkgcGFnZXMgb3V0IHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlICppbm9kZSdzKiBgd2JfbGlzdGAgZ2V0cyBqdWdnbGVkIGFuZCBzb3J0ZWQgYW5kIHRoZSAqd2Jfd29yayogc3RydWN0cyBnZXQgdXBkYXRlZC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2UgZGVjaWRlIHdoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCAqcmlnaHQgbm93KiwgYW5kIHdoYXQgY2FuIHdhaXQuIEkgd2FudCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGlzIHNtYXJ0IGVub3VnaCB0byBoYW5kbGUgc2l0dWF0aW9ucyB3aXRoIG1hbnkgZGlydHkgaW5vZGVzLCBvciBpZiB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IHBlcmZvcm1hbmNlIGlzc3Vlcy4gTG9va2luZyBmb3IgbG9jayBjb250ZW50aW9uIHBvaW50cyBpcyBhIG11c3QsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcmVxdWVudGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZWZmaWNpZW50bHkgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB3cml0ZWJhY2sgY29udGV4dHMuIEJhc2ljYWxseSwgd2hhdCBzdHJhdGVnaWVzIGFyZSB1c2VkIHRvIGltcHJvdmUgb3ZlcmFsbCB0aHJvdWdocHV0IGFuZCBrZWVwIGxhdGVuY2llcyBsb3c/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEwLjIyODI2ODI1NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdFxcdHdiX3B1dChuZXdfd2IpO1xcbiA1ODY6XFx0XFx0a2ZyZWUoaXN3KTtcXG4gNTg3OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmlzd19ucl9pbl9mbGlnaHQpO1xcbiA1ODg6XFx0fVxcbiA1ODk6XFx0XFxuIDU5MDpcXHR2b2lkIGlub2RlX3N3aXRjaF93YnNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDU5MTpcXHR7XFxuIDU5MjpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGlfd3JpdGViYWNrLFxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN3aXRjaF93b3JrKTtcXG4gNTk0OlxcdFxcdHN0cnVjdCBpbm9kZV9zd2l0Y2hfd2JzX2NvbnRleHQgKmlzdywgKm5leHRfaXN3O1xcbiA1OTU6XFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmxpc3Q7XFxuIDU5NjpcXHRcXG4gNTk3OlxcdFxcdGxpc3QgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZuZXdfd2ItXFx1MDAzZXN3aXRjaF93YnNfY3R4cyk7XFxuIDU5ODpcXHRcXHQvKlxcbiA1OTk6XFx0XFx0ICogTm90aGluZyB0byBkbz8gVGhhdCB3b3VsZCBiZSBhIHByb2JsZW0gYXMgcmVmZXJlbmNlcyBoZWxkIGJ5IGlzd1xcbiA2MDA6XFx0XFx0ICogaXRlbXMgcHJvdGVjdCB3YiBmcm9tIGZyZWVpbmcuLi5cXG4gNjAxOlxcdFxcdCAqL1xcbiA2MDI6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlzdCkpXFxuIDYwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdC8qXFxuIDYwNjpcXHRcXHQgKiBHcmFiIG91ciByZWZlcmVuY2UgdG8gd2Igc28gdGhhdCBpdCBjYW5ub3QgZ2V0IGZyZWVkIHVuZGVyIHVzXFxuIDYwNzpcXHRcXHQgKiBhZnRlciB3ZSBwcm9jZXNzIGFsbCB0aGUgaXN3IGl0ZW1zLlxcbiA2MDg6XFx0XFx0ICovXFxuIDYwOTpcXHRcXHR3Yl9nZXQobmV3X3diKTtcXG4gNjEwOlxcdFxcdC8qXFxuIDYxMTpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byBzeW5jaHJvbml6aW5nIGFtb25nIHN3aXRjaGVycywgSV9XQl9TV0lUQ0hcXG4gNjEyOlxcdFxcdCAqIHRlbGxzIHRoZSBSQ1UgcHJvdGVjdGVkIHN0YXQgdXBkYXRlIHBhdGhzIHRvIGdyYWIgdGhlIGlfcGFnZVxcbiA2MTM6XFx0XFx0ICogbG9jayBzbyB0aGF0IHN0YXQgdHJhbnNmZXIgY2FuIHN5bmNocm9uaXplIGFnYWluc3QgdGhlbS5cXG4gNjE0OlxcdFxcdCAqIExldCdzIGNvbnRpbnVlIGFmdGVyIElfV0JfU1dJVENIIGlzIGd1YXJhbnRlZWQgdG8gYmVcXG4gNjE1OlxcdFxcdCAqIHZpc2libGUuXFxuIDYxNjpcXHRcXHQgKi9cXG4gNjE3OlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlzdywgbmV4dF9pc3csIGxpc3QsIGxpc3QpXFxuIDYyMDpcXHRcXHRcXHRwcm9jZXNzX2lub2RlX3N3aXRjaF93YnMobmV3X3diLCBpc3cpO1xcbiA2MjE6XFx0XFx0d2JfcHV0KG5ld193Yik7XFxuIDYyMjpcXHR9XFxuIDYyMzpcXHRcXG4gNjI0OlxcdHN0YXRpYyBib29sIGlub2RlX3ByZXBhcmVfd2JzX3N3aXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiA2MjU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diKVxcbiA2MjY6XFx0e1xcbiA2Mjc6XFx0XFx0LyogQXZvaWQgdGhlIGF0b21pY19pbmMvc21wX21iIGRhbmNlIG9uY2UgU0JfQUNUSVZFIGlzIGdvbmUuICovXFxuIDYyODpcXHRcXHRpZiAoIShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX0FDVElWRSkpXFxuIDYyOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEwLjIyODQ3MjU3NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjI2OTI2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgYHByb2Nlc3NfaW5vZGVfc3dpdGNoX3dic2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBwcm9jZXNzX2lub2RlX3N3aXRjaF93YnNgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBpdCBhcm91bmQgbGluZSA1NTAsIHNvIEkgc2hvdWxkIGhlYWQgb3ZlciB0aGVyZSBhbmQgaW52ZXN0aWdhdGUgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaW5vZGVzIGFuZCB3cml0ZWJhY2sgbWVjaGFuaXNtcy4gR2l2ZW4gd2hhdCBJJ3ZlIGJlZW4gc3R1ZHlpbmcsIEknbSBhbnRpY2lwYXRpbmcgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGNvbmN1cnJlbmN5IG9yIGRhdGEgY29uc2lzdGVuY3kgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIGZvY3VzIG9uIGhvdyBkYXRhIGlzIHRyYW5zaXRpb25lZCBvciBzeW5jaHJvbml6ZWQgZHVyaW5nIGFuIGlub2RlIHN3aXRjaCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBjb250ZXh0IHN3aXRjaC4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgd3JpdGViYWNrIHByb2Nlc3MgZnJvbSB0aGUgZGlydHkgcGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MTMuNDU1NDAxODQzWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0XFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gNTUxOlxcdFxcdH0gZWxzZSB7XFxuIDU1MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuIDU1NDpcXHRcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHdoaWxlICgqaW5vZGVwKSB7XFxuIDU1NzpcXHRcXHRcXHRXQVJOX09OX09OQ0UoKCppbm9kZXApLVxcdTAwM2VpX3diICE9IG9sZF93Yik7XFxuIDU1ODpcXHRcXHRcXHRpZiAoaW5vZGVfZG9fc3dpdGNoX3dicygqaW5vZGVwLCBvbGRfd2IsIG5ld193YikpXFxuIDU1OTpcXHRcXHRcXHRcXHRucl9zd2l0Y2hlZCsrO1xcbiA1NjA6XFx0XFx0XFx0aW5vZGVwKys7XFxuIDU2MTpcXHRcXHRcXHRpZiAoKmlub2RlcCBcXHUwMDI2XFx1MDAyNiBuZWVkX3Jlc2NoZWQoKSkge1xcbiA1NjI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm5ld193Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTYzOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZvbGRfd2ItXFx1MDAzZWxpc3RfbG9jayk7XFxuIDU2NDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNTY1OlxcdFxcdFxcdFxcdGdvdG8gcmVsb2NrO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3X3diLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA1NzA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm9sZF93Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0dXBfcmVhZChcXHUwMDI2YmRpLVxcdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRpZiAobnJfc3dpdGNoZWQpIHtcXG4gNTc1OlxcdFxcdFxcdHdiX3dha2V1cChuZXdfd2IpO1xcbiA1NzY6XFx0XFx0XFx0d2JfcHV0X21hbnkob2xkX3diLCBucl9zd2l0Y2hlZCk7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGZvciAoaW5vZGVwID0gaXN3LVxcdTAwM2Vpbm9kZXM7ICppbm9kZXA7IGlub2RlcCsrKSB7XFxuIDU4MDpcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gKCppbm9kZXApLVxcdTAwM2VpX3NiO1xcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXHRcXHRpcHV0KCppbm9kZXApO1xcbiA1ODM6XFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja191bnBpbihzYik7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXHR3Yl9wdXQobmV3X3diKTtcXG4gNTg2OlxcdFxcdGtmcmVlKGlzdyk7XFxuIDU4NzpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNTg4OlxcdH1cXG4gNTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoxMy40NTU1NjY3NDRaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU4MjAyODg1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdyaXRlYmFjayBJbm9kZSBTd2l0Y2ggUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGlzIHRoYXQgYGlzdy1cdTAwM2Vpbm9kZXNgIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYGt6YWxsb2NfZmxleGAgaXMgdXNlZCB0byBhbGxvY2F0ZSBgaXN3YCwgd2hpY2ggZW5zdXJlcyB0aGUgbGFzdCBlbGVtZW50IGlzIE5VTEwuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBob3cgd2UgcG9wdWxhdGUgdGhpcyBhcnJheSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGhhbmRsZWQuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgaXN3X3ByZXBhcmVfd2JzX3N3aXRjaGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyBtb2RpZmllZC4gQmVmb3JlIHRoZSBjaGFuZ2UsIGl0IHNlZW1zIHRoZSBjb2RlIHdhcyBpdGVyYXRpbmcgZm9yd2FyZCB0aHJvdWdoIGEgbGlzdCBvZiBpbm9kZXMuIE5vdywgaXQgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLCBtb3Zpbmcgc2Nhbm5lZCBpbm9kZXMgdG8gYSBsb2NhbCBsaXN0LCBgc2Nhbm5lZGAsIGJlZm9yZSBzcGxpY2luZyB0aGVtIGJhY2sgaW50byB0aGUgbWFpbiBsaXN0LiBUaGlzIGNoYW5nZSBhaW1zIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEknZCBndWVzcy4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQga2VlcHMgdGhlIG9sZGVzdCB1bnNjYW5uZWQgaW5vZGVzIGF0IHRoZSBlbmQgYW5kIG1vdmVzIHRoZSBvbmVzIGFscmVhZHkgc2Nhbm5lZCB0byB0aGUgZnJvbnQuIFRoaXMgc291bmRzIGxpa2UgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkbHkgcHJvY2Vzc2luZyB0aGUgc2FtZSBhbHJlYWR5LXByZXBhcmVkIG9yIHNraXBwZWQgaW5vZGVzLiBJdCBhbHNvIHNlZW1zIHRvIHJldHVybiAnZnVsbCcgaWYgdGhlIGlub2RlIGxpc3QgZXhjZWVkcyB0aGUgbWF4IHNpemUgb2YgdGhlICdpbm9kZXMnIGFycmF5LlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGNoZWNrLiBgc2Nhbm5lZGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBMSVNUX0hFQURgLiBgZnVsbGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gVGhlIG90aGVyIGxvb3AgdmFyaWFibGVzIGFyZSBpdGVyYXRpb24gcG9pbnRlcnMuIGBpc3dgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgLCBzbyBpdCdzIHplcm9lZC4gVGhlcmUncyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgd2UncmUgZW50aXJlbHkgd2l0aGluIHRoZSBpbnRlcm5hbCB3cml0ZWJhY2sgY2dyb3VwIGhhbmRsaW5nIChgZnMtd3JpdGViYWNrLmNgKS4gU28sIG5vIHVzZXItdmlzaWJsZSBtZW1vcnkgbW9kaWZpY2F0aW9ucywgbm8gbmV0bGluayBtZXNzYWdlcywgbm90aGluZyBsaWtlIHRoYXQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGl0IHRyaWdnZXJzIEtNU0FOLiBMZXQncyBzZWUuLi4gdGhpcyBwYXRjaCBkb2Vzbid0IGludm9sdmUga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMsIGFyZSBub3QgcGFydCBvZiB0aGUgc2NvcGUuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIHdoaWNoIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgc2luY2UgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIHJlYWRpbmcgb3IgY29weWluZywgS01TQU4gc2hvdWxkbid0IGJlIG5lZWRlZCBoZXJlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgbG9ja2luZy9jb25jdXJyZW5jeSBwcm9ibGVtcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBERUJVR19MSVNULiBTbywgbm8sIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBJJ20gcHJldHR5IGNvbmZpZGVudCBhYm91dCB0aGlzLiBBbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIHdoaWxlIHRoZSBsaXN0IG1hbmlwdWxhdGlvbiBpcyBhIGJpdCBtb3JlIGNvbXBsZXggbm93LCBpdCBsb29rcyBzYWZlIGZyb20gYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBmb3JtdWxhdGUgbXkgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTQsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjI3NTg1ODk1OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgJ2lzd19wcmVwYXJlX3dic19zd2l0Y2gnIGluIGZzL2ZzLXdyaXRlYmFjay5jIHRvIHJldmVyc2UtdHJhdmVyc2Ugd3JpdGViYWNrIGlub2RlIGxpc3RzIGFuZCBtb3ZlIHNjYW5uZWQgZW50cmllcyB1c2luZyBhIGxvY2FsICdzY2FubmVkJyBsaXN0IGhlYWQgc28gdGhhdCBzdWJzZXF1ZW50IHNjYW5zIHN0YXJ0IGF0IHVuc2Nhbm5lZCBpbm9kZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0YWNrIHZhcmlhYmxlcyAoJ3NjYW5uZWQnIGFuZCAnZnVsbCcpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgTElTVF9IRUFEKCkgYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uICgnYm9vbCBmdWxsID0gZmFsc2U7JykuIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciAnaXN3JyByZW1haW5zIHplcm8taW5pdGlhbGl6ZWQgdmlhIGt6YWxsb2NfZmxleCgpLCBhbmQgbm8gc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIGRvbWFpbiBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYnVncyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzICdpc3dfcHJlcGFyZV93YnNfc3dpdGNoJyBpbiBmcy9mcy13cml0ZWJhY2suYyB0byByZXZlcnNlLXRyYXZlcnNlIHdyaXRlYmFjayBpbm9kZSBsaXN0cyBhbmQgbW92ZSBzY2FubmVkIGVudHJpZXMgdXNpbmcgYSBsb2NhbCAnc2Nhbm5lZCcgbGlzdCBoZWFkIHNvIHRoYXQgc3Vic2VxdWVudCBzY2FucyBzdGFydCBhdCB1bnNjYW5uZWQgaW5vZGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdGFjayB2YXJpYWJsZXMgKCdzY2FubmVkJyBhbmQgJ2Z1bGwnKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIExJU1RfSEVBRCgpIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiAoJ2Jvb2wgZnVsbCA9IGZhbHNlOycpLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgJ2lzdycgcmVtYWlucyB6ZXJvLWluaXRpYWxpemVkIHZpYSBremFsbG9jX2ZsZXgoKSwgYW5kIG5vIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBkb21haW4gb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGJ1Z3Mgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[1] Phase: Succeeded StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 19:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 19:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2] Phase: Succeeded StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 19:04:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 19:04:41 +0000 UTC FinishedAt: 2026-09-11 19:04:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pg4p/series-workflow2pg4p-convert-artifact-3147826521/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 19:04:51 +0000 UTC FinishedAt: 2026-09-11 19:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 19:04:51 +0000 UTC FinishedAt: 2026-09-11 19:21:35 +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:*d78b5404-6967-4bcd-8e13-e0430a42a3de,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-workflow2pg4p/series-workflow2pg4p-convert-artifact-3147826521/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": "87b67b85-dea0-481e-a398-b198feaecb4e", "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-workflow2pg4p/series-workflow2pg4p-build-action-4145292791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 19:04:51 +0000 UTC FinishedAt: 2026-09-11 19:21:25 +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:*d78b5404-6967-4bcd-8e13-e0430a42a3de,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-workflow2pg4p/series-workflow2pg4p-convert-artifact-3147826521/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": "87b67b85-dea0-481e-a398-b198feaecb4e", "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-workflow2pg4p/series-workflow2pg4p-build-action-4145292791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 19:21:35 +0000 UTC FinishedAt: 2026-09-11 19:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 19:21:35 +0000 UTC FinishedAt: 2026-09-11 19:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 19:21:35 +0000 UTC FinishedAt: 2026-09-11 19:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 19:21:35 +0000 UTC FinishedAt: 2026-09-11 19:21:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pg4p/series-workflow2pg4p-convert-artifact-2518566700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 19:21:46 +0000 UTC FinishedAt: 2026-09-11 19:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 19:21:46 +0000 UTC FinishedAt: 2026-09-11 19:23:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87b67b85-dea0-481e-a398-b198feaecb4e,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-workflow2pg4p/series-workflow2pg4p-build-action-4145292791/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-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 19:23:39 +0000 UTC FinishedAt: 2026-09-11 19:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 19:23:39 +0000 UTC FinishedAt: 2026-09-11 19:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 19:23:39 +0000 UTC FinishedAt: 2026-09-11 19:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 19:23:39 +0000 UTC FinishedAt: 2026-09-11 19:40:29 +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:*d78b5404-6967-4bcd-8e13-e0430a42a3de,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-workflow2pg4p/series-workflow2pg4p-convert-artifact-2518566700/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": "40a6772f-6e12-4dfd-b40a-40a1196ce4f7", "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-workflow2pg4p/series-workflow2pg4p-build-action-54513096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 19:23:39 +0000 UTC FinishedAt: 2026-09-11 19:40:19 +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:*d78b5404-6967-4bcd-8e13-e0430a42a3de,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-workflow2pg4p/series-workflow2pg4p-convert-artifact-2518566700/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": "40a6772f-6e12-4dfd-b40a-40a1196ce4f7", "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-workflow2pg4p/series-workflow2pg4p-build-action-54513096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 19:40:29 +0000 UTC FinishedAt: 2026-09-11 19:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 19:40:29 +0000 UTC FinishedAt: 2026-09-11 19:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 19:40:29 +0000 UTC FinishedAt: 2026-09-11 19:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 19:40:29 +0000 UTC FinishedAt: 2026-09-11 19:42:16 +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:*40a6772f-6e12-4dfd-b40a-40a1196ce4f7,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-workflow2pg4p/series-workflow2pg4p-build-action-54513096/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-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"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:*87b67b85-dea0-481e-a398-b198feaecb4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40a6772f-6e12-4dfd-b40a-40a1196ce4f7,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-workflow2pg4p/series-workflow2pg4p-build-action-4145292791/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-workflow2pg4p/series-workflow2pg4p-build-action-54513096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 19:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 19:42:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"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-workflow2pg4p/series-workflow2pg4p-convert-artifact-1525022229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 19:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 19:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 19:42:26 +0000 UTC FinishedAt: 2026-09-11 19:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 19:42:36 +0000 UTC FinishedAt: 2026-09-11 22:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pg4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"e14d4302cbd0de773960bec33c2281508c8d8855","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isw_prepare_wbs_switch","cleanup_offline_cgwb","cleanup_offline_cgwbs_workfn","wb_memcg_offline","inode_prepare_wbs_switch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e14d4302cbd0de773960bec33c2281508c8d8855","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"9e7bc821-c131-4450-8f21-e8487f63bbe8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 19:42:36 +0000 UTC FinishedAt: 2026-09-11 22:49:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87b67b85-dea0-481e-a398-b198feaecb4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40a6772f-6e12-4dfd-b40a-40a1196ce4f7,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-workflow2pg4p/series-workflow2pg4p-build-action-4145292791/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-workflow2pg4p/series-workflow2pg4p-build-action-54513096/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-workflow2pg4p/series-workflow2pg4p-convert-artifact-1525022229/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,}